如何解决antlr4:简单语法输入不匹配
我有一个简单的语法,它总是在看似正确的输入上给我不匹配的输入。我的语法如下
root: expression;
expression
: METRIC comparator RHS
| expression AND expression
| expression OR expression
| LPAREN expression RPAREN
;
comparator
: EQ | GT | GE | LT | LE;
EQ: [eE][qQ];
GE: [gG][eE];
GT: [gG][tT];
LE: [lL][eE];
LT: [lL][tT];
LPAREN: '(';
RPAREN: ')';
AND: [aA][nN][dD];
OR: [oO][rR];
WS: [ \t\n\r]+;
METRIC: 'latency' | 'qps';
RHS: 'foobar' | 'foobaz';
当输入为 mismatched input 'latency'
时,为什么此语法会给出 latency eq foobar
错误。当然,这是在第一个生产 METRIC comparator RHS
解决方法
您发布的语法不会产生错误/警告“不匹配的输入'延迟'”。如果是这种情况,您可能没有重新生成词法分析器和解析器类。
您问题中的语法的唯一问题是,对于输入 latency eq foobar
,词法分析器生成您的解析器不接受的 WS
标记。
您可能想在词法分析器中跳过这些 WS
标记:
WS: [ \t\n\r]+ -> skip;
通过这种更改,您的解析器将为输入 latency eq foobar
生成以下解析树:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。