2014-01-19 81 views
3

我是ANTLR的新手,並試圖在ANTLR4中編寫語法,而無需事先使用以前的版本進行刷新。我正在按照本書'The Definitive ANTLR 4 Reference'。我使用Eclipse並安裝了here中給出的ANTLR4 IDE。我寫在Expr.g4以下語法:ANTLR4 Parser,未創建的訪問者

grammar Expr; 

import Common; 

options{ 
language = Java; 
} 
prog: stat+; 

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

expr: expr ('/'|'*') expr 
    | expr ('+'|'-') expr 
    | INT 
    | ID 
    | '('expr')'; 

的Common.g4包含以下內容:

lexer grammar Common; 

ID: [A-Za-z]+; 
INT: [0-9]+; 
NEWLINE: '\r'?'\n'; 
WS: [\t]+ -> skip; 

的lexer.java被創造但不parser.java和visitor.java和其他基地文件。請幫我解決這個問題。提前致謝。

+0

沒有足夠的信息。你確定解析器和訪問者應該被生成嗎?你看過正確的目錄嗎?也許你應該再次查看文檔和/或發佈跟蹤器。 – blackcompe

+0

@blackcompe是的,我已經使用了其他語法並進行了檢查。當我保存文件時,所有文件都是自動創建的。但不是在上述情況下。 – Pacu

+0

我有同樣的問題,你有沒有找到解決辦法? – user902383

回答

2

您應該在構建過程中生成您的語法。從ANTLR 4.2開始(目前可通過Sonatype快照Maven倉庫以4.2-SNAPSHOT的形式獲得),Maven插件支持Eclipse m2e。對於Maven插件的文檔可以在這裏找到:

http://www.antlr.org/api/maven-plugin/master/index.html

我不相信它使用ANTLR語法和不自動代碼生成步驟到構建本身的任何內部版本,強烈建議你避免使用手動代碼生成步驟或代碼生成作爲IDE擴展的一部分有史以來

2

檢查您的JRE版本(命令行[windows]:java -version)。
我和這個example有同樣的問題。 因爲JRE 8

所以,如果你有JRE8,更多鈔票的解決方案是:

  • 加入-version:1.7中的eclipse.ini;或
  • 在「運行方式/外部工具配置...」中,在參數中添加-version:1.7;或
  • 選擇JRE 1.7在Windows/Java的/安裝的JRE

要生成XXXVisitor,在 「運行方式/外部工具配置...」 變-no-遊客參數由-visitor

  • 適用於-version:1.6。
+0

當您使用命令行生成java類時,使用'-visitor'作爲arg,如上所述生成訪問者類。 – boring

1

偏好 - > ANTLR4 - >工具 - >選項 - >生成解析樹先生

5

其實我有同樣的問題一次,我用同一個項目產生的第一個內的兩個G4文件集成訪客但第二個沒有。

然後我意識到,每個G4文件具有代碼生成它自己的配置,你可以通過改變:

  1. 右鍵單擊G4文件,然後Run As
  2. 選擇External tool configuration
  3. 更改沒有-visitor訪問者,您可以對 進行同樣的處理。

現在生成Visitor文件。

+0

這爲我做了詭計!我沒有收到訪客文件。我只使用一個G4文件,但知道每個G4文件都有自己的工具配置是關鍵...... – skrilmps