2009-12-10 2 views
0

У меня есть левый рекурсивный правило, как следующее:Как добавить скобки к этому правилу?

EXPRESSION  : EXPRESSION BINARYOP EXPRESSION | UNARYOP EXPRESSION | NUMBER; 

Мне нужно добавить скобки к нему, но я не уверен, как сделать левую скобку зависят от соответствующей правой скобки пока еще необязательным. Может ли кто-нибудь показать мне, как? (Или я пытаюсь сделать полностью слишком много Lexing, и я должен оставить некоторые или все это в разборе?)

ответ

1

Вы можете добавить рекурсивное правило:

EXPRESSION  : EXPRESSION BINARYOP EXPRESSION 
       | UNARYOP EXPRESSION 
       | NUMBER 
       | OPENPARENS EXPRESSION CLOSEPARENS 
       ; 
+0

К сожалению, это правило в имя на самом деле 'EXPRESSION', я понял, что всего минуту назад. – RCIX

+0

Это должно работать пока. – RCIX

+0

@RCIX: Вы уверены в этом? AFAIK, это не сработает: ANTLR не может обрабатывать такие * леворекурсивные * правила. См.: Http://www.antlr.org/wiki/display/ANTLR3/Left-Recursion+Removal –

1

Да, вы пытаясь сделать слишком много в лексере. Вот как обойти левую рекурсию правила:

http://www.antlr.org/wiki/display/ANTLR3/Expression+evaluator (посмотреть, как правило, анализатор expr стекает вниз к правилу atom, а затем вызываются рекурсивно из atom снова)

HTH

+0

О, боже, это будет большой ... Спасибо за подсказку, хотя! – RCIX

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