1
我試圖解析這樣的事情,遞歸表達規則返回null
! (a="1" AND b="2")
但是,'!' expression
先進行處理,所以它會成爲!
和(a="1" AND b="2")
和expression
部分的價值將變爲空。 (因爲它還沒有處理)
任何想法?這似乎是一個普遍的問題。
附加規則:
expression returns [String value]
: StringLiteral
{ $value = $StringLiteral.text; }
| IntegerLiteral
{ $value = $IntegerLiteral.text; }
| Identifier '=' StringLiteral
{ $value = $Identifier.text + ":" + $StringLiteral.text; }
| Identifier '=' IntegerLiteral
{ $value = $Identifier.text + ":" + $IntegerLiteral.text; }
| '!' expression
{ $value = " ! " + $expression.value; }
| '(' expression ')'
{ $value = '(' + $expression.value + ')'; }
| le = expression AND re = expression
{ $value = $le.value + " AND " + $re.value; }
| le = expression OR re = expression
{ $value = $le.value + " OR " + $re.value; }
;
偉大的答案!我和parens有同樣的問題,並解決了它們! – daisy 2015-04-02 15:13:18