Eclipse plugin antlr3ide生成没有包信息的解析器和lexer?
antlr3ide似乎在没有java文件所在的包信息的情况下生成解析器和lexer文件(例如包tour.trees;,这里相对路径文件夹tour/trees包含相应的文件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 '=
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
块甚至是非法的…)。如果您添加了一个选项
块,它应该放在@标题
块之前。当然不客气。