微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

antlr4:简单语法输入不匹配

如何解决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 生成以下解析树:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。