0

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

4

1 回答 1

1

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

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

但是 antlr 不知道你想用这些数字做什么,可能只是将一个添加到另一个,可能会记住一些未来的执行,可能会将这些数据传输到将非常快速地执行此操作的服务器,谁知道呢。因此,您应该扩展 antlr 侦听器(在 antlr 4 中也有访问者可以更好地控制遍历过程),并覆盖诸如

“onFirstNumber(整数)”

“onPlus”和

“onSecondNumber(整数)”

确切的格式取决于您的语法。

现在 antlr 将按照需要的顺序调用方法(这也是从语法中解决的),但是您应该按照我上面的描述指定要做什么。

希望这可以帮助,

标记

于 2014-01-20T06:58:53.707 回答