2014-01-23 106 views
1

我使用AntlrWords 2.1爲antlr v4創建語法。無論出於何種原因,該聲明均不予承認。我搜查了很多,但無法找到原因。你能找到任何錯誤嗎?帶括號和空格的Antl語法

grammar bracketsGrammar; 

OPENINGBRACKET : '['; 
CLOSINGBRACKET : ']'; 

lParanthesis : OPENINGBRACKET ; 
rParanthesis : CLOSINGBRACKET ; 

WS : ' ' ->skip; 
WORD : ~[ "]+ ; 

parenthesizedWord : lParanthesis WS+ WORD WS+ rParanthesis ; 

fullfile: parenthesizedWord EOF ; 

我的輸入是

[ Manuel ] 

,輸出是

(fullfile (parenthesizedWord (lParanthesis [) Manuel ]) <EOF>) 

正如你可以同時看到[和]是輸出的一部分,但我rParanthesis不被認可。

感謝您的幫助 曼努埃爾

+0

你有沒有考慮[GrammarLexer.g4](https://github.com/sharwell/antlrworks2/blob/ master/org-antlr-works-editor/src/org/antlr/works/editor/grammar/experimental/GrammarLexer.g4)和[GrammarParser.g4](https://github.com/sharwell/antlrworks2/blob/master /org-antlr-works-editor/src/org/antlr/works/editor/grammar/experimental/GrammarParser.g4)? –

+0

我在這裏沒有看到任何有關「輸出」的內容。你究竟是如何產生你的輸出的? –

+0

使用ANTLRWorks 2.1創建輸出,在那裏你可以選擇Run-> Run in TestRig ...這會給你生成的標記列表和生成的樹 –

回答

0

skip在詞法空間,但正在使用的語法規則裏面的WS令牌:刪除它們。

它不應該是:

parenthesizedWord : lParanthesis WS+ WORD WS+ rParanthesis ; 

但:

parenthesizedWord : lParanthesis WORD rParanthesis ; 

代替。

然後將下面的分析樹將被創建:


enter image description here

+0

謝謝,就是這樣。我雖然我仍然必須考慮空格,但它是有意義的,如果他們被跳過從解析器規則排除他們感謝 –