2012-09-29 51 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

我明白了,感謝您的親切幫助:) –

相關問題