ANTLR4 Parser,未创建访问者

我是ANTLR的新手,并尝试在ANTLR4中编写语法,而不需要事先刷过以前的版本。 我正在阅读“ The Definitive ANTLR 4 Reference ”一书。 我使用Eclipse并安装了ANTLR4 IDE,如下所示。 我在Expr.g4中写了以下语法:

grammar Expr; import Common; options{ language = Java; } prog: stat+; stat: expr NEWLINE | ID '=' expr NEWLINE | NEWLINE; expr: expr ('/'|'*') expr | expr ('+'|'-') expr | INT | ID | '('expr')'; 

Common.g4包含以下内容:

 lexer grammar Common; ID: [A-Za-z]+; INT: [0-9]+; NEWLINE: '\r'?'\n'; WS: [\t]+ -> skip; 

创建了lexer.java,但没有创建parser.java和visitor.java以及其他基本文件。 请帮我解决问题。 提前致谢。

事实上我曾经遇到过同样的问题,我曾经在同一个项目中整合了两个G4文件,第一个生成了访问者但第二个没有。

然后我意识到每个G4文件都有自己的代码生成配置,您可以通过以下方式进行更改:

  1. 右键单击G4文件,然后单击Run As
  2. 选择External tool configuration
  3. 无访问者更改为访问者 ,您可以为听众执行相同操作。

现在生成了Visitor文件。

您应该在构建过程中生成语法。 从ANTLR 4.2开始(目前可通过Sonatype快照Maven存储库获得4.2-SNAPSHOT),Maven插件支持Eclipse m2e。 Maven插件的文档可在此处获得:

http://www.antlr.org/api/maven-plugin/master/index.html

我不相信任何使用ANTLR语法的构建,也不会将代码生成步骤自动化到构建本身, 强烈建议您避免使用手动代码生成步骤或代码生成作为IDE扩展的一部分。

检查您的JRE版本(命令行[windows]:java -version)。
我在这个例子中遇到了同样的问题。 因为JRE 8

所以,如果你有JRE8,Posible解决方案是:

  • 在eclipse.ini中添加-version:1.7 ; 要么
  • 在“运行方式/外部工具配置…”中,在参数中添加-version:1.7 ; 要么
  • 在Windows / Java / Installed JRE中选择JRE 1.7

要生成XXXVisitor,请在“运行方式/外部工具配置…”中通过-visitor更改-no-visitor参数。

  • 适用于-version:1.6。

首选项 – > ANTLR4 – >工具 – >选项 – >生成解析树访问者