这个antlr语法有什么问题?通配符问题?
What's wrong with this antlr grammar? wildcard problem?
语法很简单:
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 : [ \t\r\n]+ -> 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
的词法分析器规则。添加:
ID : [a-zA-Z]+;
如果您的后续问题是“但是 a
和 b
与 .+?
匹配,对吗?”,那么答案是“否”。在解析器规则(如 signal
)内,.
(点)匹配任何标记。在词法分析器规则中,.
匹配任何字符。
语法很简单:
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 : [ \t\r\n]+ -> 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
的词法分析器规则。添加:
ID : [a-zA-Z]+;
如果您的后续问题是“但是 a
和 b
与 .+?
匹配,对吗?”,那么答案是“否”。在解析器规则(如 signal
)内,.
(点)匹配任何标记。在词法分析器规则中,.
匹配任何字符。