我正在使用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