2012-09-29 50 views
1

antlr3ide似乎产生解析器和词法文件,而不包信息,其中的java文件的位置(如包tour.trees;,这里的相对路径文件夹旅游/棵包含相应的文件ExprParser.javaExprLexer.java)。antlr3ide生成没有包信息的解析器和词法分析器?

official forum似乎有点不活跃和documentation给了我帮助不大:(

下面是一个示例语法文件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();}; 
+0

@BartKiers我没有为语法文件添加额外的**选项**块吗?我需要吗? –

+0

@BartKiers感谢您的建议:)我现在添加了一个示例代码。 –

回答

1

包声明不是一件antlrv3ide产生这种情况。要让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+; 

... 
+0

它的工作!非常感谢!然而,我想知道为什么antlr3ide不添加生成的源代码所在的包信息?我应该需要添加一个空的'选项'块,以便我可以添加'@parser ::如果我使用'Expr.g'文件的默认选项,那么'header'还是'@lexer :: header'? –

+0

@HongxuChen我不使用'antlr3ide',但我不知道为什么它应该覆盖已经由ANTLR处理的功能。你可以简单地删除'options'-block('language = Java'是默认的,所以你不需要它),你不需要一个空的(如果内存为我服务,一个空的'options'块甚至是非法的......)。如果你添加一个'options'块,它应该放在'@ header'块之前。当然,欢迎您。 –

+0

我明白了,感谢您的亲切帮助:) –

相关问题