[英]How to define logical operator with parenthesis in ANTLR grammar
我正在ANTLR中定义一个语法,该语法将表达一个包含逻辑运算符和括号的表达式。
这是语法
grammar simpleGrammar;
/* This will be the entry point of the parser. */
parse
:
expression EOF
;
expression
:
expression binOp expression | ID | unOp (expression) | '(' expression ')'
;
binOp
:
('AND' | 'OR')
;
unOp
:
'NOT'
;
ID :
('a'..'z' | 'A'..'Z')+
;
定义的语法能够在没有括号的情况下表示语法分析树,但是当我输入带有括号的示例时,例如(Apple OR Bananana)AND Orange
它显示MismatchedTokenException
因此,如果有人解释如何定义语法以表达括号,将不胜感激。
您忘了告诉ANTLR如何处理空白。 例如:
WS : [ \t\r\n] -> skip;
加上这个,语法就会起作用。
附带说明一下,您的语法对于AND
和OR
运算符具有相同的优先级。 这些运算符的优先级高于NOT
。 由于这违反了常规规则,因此建议您这样编写expression
规则:
expression
: '(' expression ')' # parenExp
| 'NOT' expression # notExpr
| expression 'AND' expression # andExpr
| expression 'OR' expression # orExpr
| ID # atomExpr
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.