Antlr4:使用两个相同的词法分析器规则使语法工作

Antlr4: Make grammar work with two identical lexer rules

我有语法:

grammar qwe;

query
    : COLUMN OPERATOR value EOF
    ;

COLUMN
    : [a-z_]+
    ;

OPERATOR
    : ('='|'>'|'<')
    ;

STRING_LITERAL
    : [a-zA-Z_]+
    ;

value
    : STRING_LITERAL
    ;

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

示例查询:total_sales>qwe.

问题在于 COLUMNvalue 词法分析器规则是相同的。这会导致错误:

如何重写语法以使其在没有错误消息的情况下运行?

当然,您不能有两个相同的词法分析器规则。在这种情况下,您似乎应该删除 COLUMN 规则并将其视为一个值,如果真的没有什么可以区分它们的话。

另一种选择是考虑为 COLUMN 使用 reserved words 的规则(如果适用的话)。