antlr4中如何以最优化的方式编写文法规则的逻辑运算?

How to write the logical operations of grammar rule in the most optimized way in antlr4?

如何在antlr4中以最优化的方式写文法规则的逻辑运算?

例如,

方法 #1

logicalExpression: expression ('EQUALS' | 'NOT EQUALS' | 'GREATER_THAN' | 'LESS_THAN') value;

方法 #2

logicalExpression
    : expression 'EQUALS' value
    | expression 'NOT EQUALS' value
    | expression 'GREATER_THAN' value
    | expression 'LESS_THAN' value

哪种方法比较efficient/performant?为什么? 我有一种感觉,表达式将在方法#2 中匹配多次而不是一次。

第一种方法效率更高。看看底层的 ATN:

对比

当解析器遍历 ATN 以预测匹配时,它必须逐条检查一条路径。在第二种方法中,它必须为每个可能的运算符评估左手 expression 节点。第一个变体效率更高,因为它只评估一次并根据单个操作员检查快速做出决定。