2014-01-23 1 views
1

Я использую AntlrWords 2.1 для создания грамматики для antlr v4. По какой-либо причине rParanthesis не распознается. Я много искал, но не мог найти причину. Вы можете найти какие-либо ошибки?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 не признается.

Спасибо за вашу помощь Manuel

+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 в TestRig ..., который дает вам полученный список токенов и полученное дерево. –

ответ

0

Вы skip пространства в лексере но использует WS маркер внутри правил синтаксического анализатора: удалите их.

Это не должно быть:

parenthesizedWord : lParanthesis WS+ WORD WS+ rParanthesis ; 

но:

parenthesizedWord : lParanthesis WORD rParanthesis ; 

вместо этого.

И тогда следующее дерево разбора будет создано:


enter image description here

+0

Спасибо, вот и все. Я, тем не менее, все еще должен учитывать пробелы, но имеет смысл, если они пропускаются, чтобы исключить их из правил парсера. –

Смежные вопросы