我有一個左遞歸規則如下所示:如何在此規則中添加括號?
EXPRESSION : EXPRESSION BINARYOP EXPRESSION | UNARYOP EXPRESSION | NUMBER;
我需要括號添加到它,但我不知道如何做一個左括號取決於右括號相匹配,但仍可選。有人能告訴我如何? (還是我試圖做的詞法了太多,我應該留下一些或所有這句法分析?)
我有一個左遞歸規則如下所示:如何在此規則中添加括號?
EXPRESSION : EXPRESSION BINARYOP EXPRESSION | UNARYOP EXPRESSION | NUMBER;
我需要括號添加到它,但我不知道如何做一個左括號取決於右括號相匹配,但仍可選。有人能告訴我如何? (還是我試圖做的詞法了太多,我應該留下一些或所有這句法分析?)
你可以添加一個遞歸的規則:
EXPRESSION : EXPRESSION BINARYOP EXPRESSION
| UNARYOP EXPRESSION
| NUMBER
| OPENPARENS EXPRESSION CLOSEPARENS
;
是的,你是試圖在詞法分析器中做太多事情。下面是如何繞過左遞歸規則:
http://www.antlr.org/wiki/display/ANTLR3/Expression+evaluator(見解析器規則expr
如何淌下的規則再和從再次遞歸調用)
HTH
哦,親愛的,這是將變得很大...感謝您的提示,但! – RCIX 2009-12-10 10:35:41
對不起,該規則的名字其實是'EXPRESSION',我只是在一分鐘前才意識到。 – RCIX 2009-12-10 04:03:21
這應該現在工作。 – RCIX 2009-12-10 04:05:06
@RCIX:你確定? AFAIK,這是行不通的:ANTLR不能處理這種*左遞歸*規則。參見:http://www.antlr.org/wiki/display/ANTLR3/Left-Recursion+Removal – 2009-12-10 09:27:14