我正在使用ANTLR創建和/或解析器+評估器。表達式將會有這樣的格式:antlr解析器和/或邏輯 - 如何獲得邏輯運算符之間的表達式?
x eq 1 && y eq 10
(x lt 10 && x gt 1) OR x eq -1
我正在讀的邏輯表達式這個帖子在ANTLR Looking for advice on project. Parsing logical expression,我發現語法貼有一個良好的開端:
grammar Logic;
parse
: expression EOF
;
expression
: implication
;
implication
: or ('->' or)*
;
or
: and ('&&' and)*
;
and
: not ('||' not)*
;
not
: '~' atom
| atom
;
atom
: ID
| '(' expression ')'
;
ID : ('a'..'z' | 'A'..'Z')+;
Space : (' ' | '\t' | '\r' | '\n')+ {$channel=HIDDEN;};
但是,雖然從解析器中獲取樹對於變量只是表達式一個字符(即,"(A || B) AND C"
,我很難適應這種情況(例如"x eq 1 && y eq 10"
我期望一個"AND"
父母和兩個孩子,"x eq 1"
和"y eq 10"
,請參閱下面的測試用例)。我想這與"ID"
有關。正確的語法是什麼?
在這裏發佈,以及:HTTP://antlr.markmail。org/message/bk6kutcu56vuglgl – 2012-03-01 18:52:09