ANTLR4 Parser,未创建访问者

Pac*_*acu 5 java parsing antlr4 eclipse-kepler

我是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')';
Run Code Online (Sandbox Code Playgroud)

Common.g4包含以下内容:

lexer grammar Common;

ID: [A-Za-z]+;
INT: [0-9]+;
NEWLINE: '\r'?'\n';
WS: [\t]+ -> skip;
Run Code Online (Sandbox Code Playgroud)

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

A.T*_*bet 6

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

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

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

现在Visitor生成文件.


ale*_*led 6

对于 Maven,文档中并不清楚如何设置该visitor属性。您必须在元素中执行此操作。

<plugin>
    <groupId>org.antlr</groupId>
    <artifactId>antlr4-maven-plugin</artifactId>
    <version>${antlr.version}</version>
    <configuration>
        <visitor>true</visitor>
    </configuration>
    ...
</plugin>
Run Code Online (Sandbox Code Playgroud)


Sam*_*ell 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 扩展的一部分