1

antlr3ide 似乎生成没有 java 文件所在的包信息的解析器和词法分析器文件(例如package tour.trees;,这里的相对路径文件夹tour/trees包含相应的文件ExprParser.javaExprLexer.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();};
4

1 回答 1

1

包声明不是 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+;

...
于 2012-09-29T07:42:04.900 回答