Java 在antlr中生成解析树

Java 在antlr中生成解析树,java,antlr,parse-tree,Java,Antlr,Parse Tree,我正在用antlr和java编写一个编译器。我用antlr编写了解析器,它生成代码。现在我应该做一个解析树。有人能帮我吗?我该怎么做? 生成的java代码不是解析树?我应该如何在antlr中实现此树 是和否,antlr确实为lexer和parser生成代码,这些代码可以根据语法解析输入。 因此,是的,antlr允许生成解析树并允许遍历它。 但一旦满足生产规则/令牌,应该做什么? 这部分取决于您自己的逻辑,而antlr对此无能为力。 这就是antlr停止和应用程序启动的地方 例如(过于简化):假设

我正在用antlr和java编写一个编译器。我用antlr编写了解析器,它生成代码。现在我应该做一个解析树。有人能帮我吗?我该怎么做?
生成的java代码不是解析树?我应该如何在antlr中实现此树

是和否,antlr确实为lexer和parser生成代码,这些代码可以根据语法解析输入。 因此,是的,antlr允许生成解析树并允许遍历它。 但一旦满足生产规则/令牌,应该做什么? 这部分取决于您自己的逻辑,而antlr对此无能为力。 这就是antlr停止和应用程序启动的地方

例如(过于简化):假设有一个计算器可以将两个数字相加。 所以我们定义我们的语法 它构建了一个解析器,当我们看到第一个数字、第二个数字和它们之间的符号“+”时,它将允许“连接我们的代码”

但是antlr不知道你想用这些数字做什么,也许只是把它们相加,也许为了将来的执行而记忆,也许把这些数据传输到服务器,服务器会很快执行这个动作,谁知道呢。 因此,您应该扩展antlr侦听器(在antlr 4中,也有用于更好地控制遍历过程的访问者),并重写如下方法

“onFirstNumber(整数)”

“onPlus”和

“onSecondNumber(整数编号)”

确切的格式取决于你的语法

现在,antlr将按照所需的顺序调用这些方法(同样,这是从语法中解决的),但是您应该按照我上面描述的那样指定要执行的操作

希望这有帮助

标记