mrm*_*tzh 2 java parsing antlr antlr4
ANTLR 是否可以根据我们在解析过程中的条件来更改 AST?
例如,在解析像 foo().dropLastBar(true).bar() 这样的字符串时,如果我们知道存在 dropLastBar(true),我们希望删除最后一次出现的栏。
现在我已经使用ANTLR中的“成员”来记录是否存在具有真值的dropLastBar。但是我不知道如何修改ANTLR的规则,使生成的AST根据我们拥有的字符串而有所不同。字符串可以是foo().dropLastBar(true).bar().bar().bar(),那么我们有没有可能得到foo().dropLastBar(true).bar()生成的AST。 bar() 没有解析两次?
我认为你在这里不必要地使事情复杂化。解析器是一种语法工具。基于 ANTLR4 的解析器根据指定的语法生成一个解析树(不是 AST顺便说一句),它表示它得到的输入。
您所追求的是语义处理,这不是解析器的任务,无论如何它也不是为此而设计的。而是在解析运行后执行语义步骤,在其中处理解析树以提取所需的信息。试图将这种处理强加到语法/解析器中不会很好地工作(因为它会减慢解析器的速度并使其变得更加复杂)。