2014-01-23 81 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

谢谢,就是这样。我虽然我仍然必须考虑空格,但它是有意义的,如果他们被跳过从解析器规则排除他们感谢 –