2
我正在寫一個antlr語法,我希望能夠嵌套表達式,它可以是「簡單」表達式或布爾表達式(帶有可選的圓括號)。一個簡單的表達僅僅是一個與LHS和RHS,如a = 5
antlr用於嵌套布爾表達式的左遞歸
我希望能夠支持這些類型的表達式:
a = 5
a = 5 OR b = 10
a = 5 OR (b = 10 AND c = 12)
(a = 5 AND b = 10) OR (c = 12 AND D = 13)
我的語法是這樣的:
STRING: CHAR+;
fragment CHAR: ('a'..'z' | 'A'..'Z' | '0'..'9');
booleanOp: 'AND' | 'OR';
simpleExpr: STRING '=' STRING;
expr: simpleExpr | parenExpr | booleanExpr;
parenExpr: '(' expr ')';
booleanExpr: expr (booleanOp expr)+;
我得到一個錯誤,expr
和booleanExpr
是相互左遞歸。我明白爲什麼這是發生的,但我真的不知道如何解決這個問題,如果我想能夠嵌套布爾表達式在彼此。
我使用antlr3,但讓我試試4 ...它似乎更接受 – 2013-05-09 19:23:32
是的,antlr4使它更容易,謝謝。 – 2013-05-09 19:45:16
我想知道爲什麼expr規則沒有給出「左遞歸」錯誤。 – 2018-02-14 19:40:25