如何写一个身份访问者

时间:2017-03-17 13:57:04

标签: antlr antlr4

让我们假设我使用的是Python3.g4语法:

如何编写解析python脚本的程序,遍历语法树并输出相同的旧程序?

后来我想对程序进行一些更改,但是现在如果我能重现该程序,我会很高兴。

到现在为止,我想在走抽象语法树时会丢失一些信息,并且没有简单的方法。

1 个答案:

答案 0 :(得分:0)

问题是您正在丢失隐藏频道上的所有令牌内容。因此,您必须检查解析树中的每个标记是否在TokenStream旁边的ParseTree中有一个隐藏的标记。

为此,getHiddenTokensToRight中的方法getHiddenTokensToLeftBufferedTokenStream应该是此工作的正确工具。

但是,如果您只想复制已解析的输入,则应尝试直接访问TokenStream并在Token之后从Token读出Token,而无需关注public string ReturnDateForDisplay { get { return this.VoluntaryWork.DateEnded.ToString("d"); } } {1}}已启用 有了它,您应该能够重现原始输入而没有太多问题。