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
节点。第一个变体效率更高,因为它只评估一次并根据单个操作员检查快速做出决定。
如何在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
节点。第一个变体效率更高,因为它只评估一次并根据单个操作员检查快速做出决定。