语法很简单:
expression: signal logic_op right_op;
signal: .+?;
right_op: .+?;
logic_op: GT|GTE|LT|LTE|NOT|EQ;
GT: '>';
GTE: '>=';
LT: '<';
LTE: '<=';
NOT: 'NOT';
EQ: '=';
WS : [ trn]+ -> skip ;
但我用"a>b',它给了我这个错误:
line 1:0 token recognition error at: 'a'
line 1:4 token recognition error at: 'b'
line 1:5 mismatched input '<EOF>' expecting {'>', '>=', '<', '<=', 'NOT', '=', WS}
为什么?
没有与a
和b
匹配的lexer规则。添加此:
ID : [a-zA-Z]+;
如果你的后续问题是";但是a
和b
是由.+?
匹配的,对吗&";,那么答案是";否";。在解析器规则(如signal
(中,.
(点(匹配任何令牌。在lexer规则中,.
匹配任何字符。