Eclipse plugin antlr3ide生成没有包信息的解析器和lexer?

Eclipse plugin antlr3ide生成没有包信息的解析器和lexer?,eclipse-plugin,antlr,antlrv3ide,Eclipse Plugin,Antlr,Antlrv3ide,antlr3ide似乎在没有java文件所在的包信息的情况下生成解析器和lexer文件(例如包tour.trees;,这里相对路径文件夹tour/trees包含相应的文件ExprParser.java和ExprLexer.java) 这个似乎有点不活跃,对我帮助不大:( 下面是一个示例语法文件Expr.g: grammar Expr; options { language = Java; } prog : stat+; stat : expr NEWLINE | ID '=

antlr3ide似乎在没有java文件所在的包信息的情况下生成解析器和lexer文件(例如包tour.trees;,这里相对路径文件夹tour/trees包含相应的文件
ExprParser.java
ExprLexer.java

这个似乎有点不活跃,对我帮助不大:(

下面是一个示例语法文件
Expr.g

grammar Expr;

options {
  language = Java;
}


prog : stat+;

stat : expr NEWLINE
     | ID '=' expr NEWLINE
     | NEWLINE
     ;

expr: multiExpr (('+'|'-') multiExpr)*
    ;

multiExpr : atom('*' atom)*
    ;

atom : INT
     | ID
     | '(' expr ')'
     ;

ID : ('a'..'z'|'A'..'Z')+ ;
INT : '0'..'9'+;
NEWLINE : '\r'?'\n';
WS : (' '|'\t'|'\n'|'\r')+{skip();};

包声明不是antlrv3ide生成的。这是由ANTLR完成的。若要让ANTLR在包
tour.trees
中生成源文件,请在语法文件中添加包含包声明的
@header
块,如下所示:

grammar Expr;

options {
  language = Java;
}

// placed _after_ the `options`-block!    
@parser::header { package tour.trees; }
@lexer::header { package tour.trees; }

prog : stat+;

...

包声明不是antlrv3ide生成的。这是由ANTLR完成的。若要让ANTLR在包
tour.trees
中生成源文件,请在语法文件中添加包含包声明的
@header
块,如下所示:

grammar Expr;

options {
  language = Java;
}

// placed _after_ the `options`-block!    
@parser::header { package tour.trees; }
@lexer::header { package tour.trees; }

prog : stat+;

...

@BartKiers我没有为语法文件添加额外的选项块?我应该吗?@BartKiers谢谢你的建议:)我现在添加了一个示例代码。@BartKiers我没有为语法文件添加额外的选项块?我应该吗?@BartKiers谢谢你的建议:)我现在添加了一个示例代码。它很有效!非常感谢!但是我想知道为什么antlr3ide不在生成的源代码所在的位置添加包信息?我是否需要添加一个空的
options
块,这样我就可以添加
@parser::header
或者
@lexer::header
,如果我使用
Expr.g
文件的默认选项?@HongxuChen我不使用
Antl3ide
,但我不知道为什么它应该覆盖已经由ANTLR处理的功能。您只需删除
options
-块(
language=Java
是默认值,因此您不需要它),您不需要空块(如果内存可用,空的
options
块甚至是非法的…)。如果您添加了一个
选项
块,它应该放在
@标题
块之前。当然,不客气。它起作用了!非常感谢!但是我想知道为什么antlr3ide不在生成的源代码所在的位置添加包信息?我是否需要添加一个空的
options
块,这样我就可以添加
@parser::header
或者
@lexer::header
,如果我使用
Expr.g
文件的默认选项?@HongxuChen我不使用
Antl3ide
,但我不知道为什么它应该覆盖已经由ANTLR处理的功能。您只需删除
options
-块(
language=Java
是默认值,因此您不需要它),您不需要空块(如果内存可用,空的
options
块甚至是非法的…)。如果您添加了一个
选项
块,它应该放在
@标题
块之前。当然不客气。