首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析器解释器编程

解析器解释器编程
EN

Stack Overflow用户
提问于 2012-02-22 10:20:12
回答 2查看 1.6K关注 0票数 3

我想编写一个程序包来计算某个输入公式的结果值,

由于分流-场算法(Dijikstra),我创建了解析器,我想创建允许用户使用的函数库(用于ex:sin()cos()函数),然后我想知道下一步应该是什么;所以我有一些问题:

  1. 还有更简单的使用,分流场算法,还是递归下降算法解析公式?
  2. 在我工作的某个阶段,我是否会接触到翻译的工作,以及如何达到?

谢谢..。

请注意,我正在使用Delphi编写程序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-22 10:46:09

还有更简单的使用,分流场算法,还是递归下降算法解析公式?

最简单的就是你更了解的那个。如果有一个平分,我会使用递归下降,它可以用于普通表达式和更复杂的脚本(即:解释器)。

如果这不是家庭作业(因此您不需要自己实现代码),那么查看现成的解决方案(例如:dwscriptPascal脚本)。您还可以使用“编译器”,这是一种为产生词汇分析器和解析器而设计的工具集。我不能推荐任何一种,因为老实说,我没有找到一种来满足我的需要。您可以从TP Lex/Yacc开始搜索。

在我工作的某个阶段,我是否会接触到翻译的工作,以及如何达到?

解释器通常处理脚本并执行多个操作(execute语句)。表达式计算器仅用于表达式,提供结果(或可用于获取结果的表达式树)。

解释器肯定需要表达式解析器(或计算程序),而不是相反。

票数 5
EN

Stack Overflow用户

发布于 2012-02-22 13:54:15

已经实现了这两种方法(并且仍然使用这两种方法维护系统),下面是我的赞成/反对清单:

  • 调车场:
    • 代码很短
    • 当与简单规则/优先级表相关联时很容易
    • 当出问题时调试很烦人

  • 递归下降:
    • 代码更长
    • 当你只有简单的规则/优先级时,就更复杂了。
    • 更容易扩展或添加特例语法。
    • 相对简单的调试(遵循更多的“人”流)

换句话说,当您只处理数学公式时,分流场可能是一条路,但如果您觉得以后可能需要更多的复杂性,那么递归下降可能更灵活、更可扩展/更易于维护,并且从长远来看是有回报的。

编译器的编译器(Lex/Yacc、Flex/Bison等)这显然是第三种选择,但我不知道Delphi有什么可维护的实现,而对于简单的数学公式,它们太过分了。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9392903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档