2014-01-19 27 views
3

我是ANTLR的新手,并试图在ANTLR4中编写语法,而无需事先使用以前的版本进行刷新。我正在按照本书'The Definitive ANTLR 4 Reference'。我使用Eclipse并安装了here中给出的ANTLR4 IDE。我写在Expr.g4以下语法:ANTLR4 Parser,未创建的访问者

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和其他基地文件。请帮我解决这个问题。提前致谢。

+0

没有足够的信息。你确定解析器和访问者应该被生成吗?你看过正确的目录吗?也许你应该再次查看文档和/或发布跟踪器。 – blackcompe

+0

@blackcompe是的,我已经使用了其他语法并进行了检查。当我保存文件时,所有文件都是自动创建的。但不是在上述情况下。 – Pacu

+0

我有同样的问题,你有没有找到解决办法? – user902383

回答

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

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

所以,如果你有JRE8,更多钞票的解决方案是:

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

要生成XXXVisitor,在 “运行方式/外部工具配置...” 变-no-游客参数由-visitor

  • 适用于-version:1.6。
+0

当您使用命令行生成java类时,使用'-visitor'作为arg,如上所述生成访问者类。 – boring

1

偏好 - > ANTLR4 - >工具 - >选项 - >生成解析树先生

5

其实我有同样的问题一次,我用同一个项目产生的第一个内的两个G4文件集成访客但第二个没有。

然后我意识到,每个G4文件具有代码生成它自己的配置,你可以通过改变:

  1. 右键单击G4文件,然后Run As
  2. 选择External tool configuration
  3. 更改没有-visitor访问者,您可以对 进行同样的处理。

现在生成Visitor文件。

+0

这为我做了诡计!我没有收到访客文件。我只使用一个G4文件,但知道每个G4文件都有自己的工具配置是关键...... – skrilmps