ANTLR4 Parser,未创建访问者

时间:2014-01-19 04:18:09

标签: java parsing antlr4 eclipse-kepler

我是ANTLR的新手,并尝试在ANTLR4中编写语法而不需要事先刷过以前的版本。我正在阅读“ The Definitive ANTLR 4 Reference ”一书。我使用Eclipse并安装了here中给出的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以及其他基本文件。请帮我解决问题。提前谢谢。

5 个答案:

答案 0 :(得分:5)

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

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

  1. 右键单击G4文件,然后单击Run As
  2. 选择External tool configuration
  3. 无访问者更改为访问者,您也可以这样做 监听器。
  4. 现在生成Visitor文件。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

检查您的JRE版本(命令行[windows]:java -version)。 我对example有同样的问题。 因为 JRE 8

因此,如果你有JRE8,Posible解决方案是:

  • 在eclipse.ini中添加 -version:1.7 ;或
  • 在“运行方式/外部工具配置...”中,在参数中添加 -version:1.7 ;或
  • 在Windows / Java /已安装的JRE中选择 JRE 1.7

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

  • 适用于-version:1.6,也是。

答案 3 :(得分:1)

偏好 - > ANTLR4 - >工具 - >选项 - >生成解析树访问者

答案 4 :(得分:0)

对于Maven,文档中尚不清楚如何设置visitor属性。您必须在元素中做到这一点。

<plugin>
    <groupId>org.antlr</groupId>
    <artifactId>antlr4-maven-plugin</artifactId>
    <version>${antlr.version}</version>
    <configuration>
        <visitor>true</visitor>
    </configuration>
    ...
</plugin>