我有一个左递归规则,如下所示:
EXPRESSION : EXPRESSION BINARYOP EXPRESSION | UNARYOP EXPRESSION | NUMBER;
我需要为它添加括号,但我不确定如何使左括号依赖于匹配的右括号,但仍然是可选的。有人能告诉我怎么样? (或者我想在lexing中做太多,我应该将部分或全部内容留给解析吗?)
答案 0 :(得分:1)
您可以添加递归规则:
EXPRESSION : EXPRESSION BINARYOP EXPRESSION
| UNARYOP EXPRESSION
| NUMBER
| OPENPARENS EXPRESSION CLOSEPARENS
;
答案 1 :(得分:1)
是的,你试图在词法分析器中做太多。以下是绕过左递归规则的方法:
http://www.antlr.org/wiki/display/ANTLR3/Expression+evaluator(请参阅解析器规则expr
如何逐步归结到规则atom
,然后再次从atom
递归调用
HTH