首页 > 解决方案 > 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

哪种方法更有效/性能更好?为什么?我有一种感觉表达式将在方法#2 中匹配多次,而不仅仅是一次。

标签: antlrantlr4

解决方案


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

在此处输入图像描述

相对

在此处输入图像描述

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


推荐阅读