antlr4:简单语法输入不匹配

时间:2021-01-22 20:54:39

标签: antlr antlr4 grammar

我有一个简单的语法,它总是在看似正确的输入上给我不匹配的输入。我的语法如下

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

之后

1 个答案:

答案 0 :(得分:0)

您发布的语法不会产生错误/警告“不匹配的输入'延迟'”。如果是这种情况,您可能没有重新生成词法分析器和解析器类。

您问题中的语法的唯一问题是,对于输入 latency eq foobar,词法分析器生成您的解析器不接受的 WS 标记。

您可能想在词法分析器中跳过这些 WS 标记:

WS: [ \t\n\r]+ -> skip;

通过这种更改,您的解析器将为输入 latency eq foobar 生成以下解析树:

enter image description here

相关问题