Eri*_*nge 11
实现了两者(并且仍在维护两者的系统),这是我的pro/con列表:
或者换句话说,当你只处理数学公式时,Shunting Yard可能是要走的路,但如果你觉得以后可能需要更多的复杂性,递归下降可能更灵活/可扩展/可维护并回报长期来说.
编译器的编译器(Lex/Yacc,Flex/Bison等)将是一个明显的第三选择,但我不知道Delphi的任何维护实现,对于简单的数学公式,它们是过度的.
什么更简单的使用,Shunting Yard算法,或递归下降算法解析公式?
最简单的是你更了解的那个.如果有一个平局我会用递归下降,它可以用于普通表达式和更复杂的脚本(即:解释器).
如果这不是作业(因此您不需要自己实现代码),请查看现成的解决方案(例如:dwscript或Pascal Script).您还可以使用"编译器编译器",这是一个专为生成lexycal分析器和解析器而设计的工具集.我不能推荐任何,因为,说实话,我还没有找到满足我需求的.您可以使用TP Lex/Yacc开始搜索.
我会在工作的某个阶段到达口译员的工作吗?
解释器通常会处理脚本并执行多个操作(执行语句).表达式计算器仅适用于表达式,提供结果(或可用于获取结果的表达式树).
解释器肯定需要表达式解析器(或评估器),但不是相反.