我希望编写一个软件包,计算给定输入公式的结果值。
我基于Shunting-Yard算法(Dijikstra)创建了解析器,我想创建用户可以使用的函数库(例如:sin()
和cos()
函数)。
那么接下来该怎么做?我有一些问题:
使用Shunting Yard算法还是递归下降算法更简单易用?
在我的工作中是否会涉及到解释器的工作?如果会,具体如何实现?
谢谢...
请注意,我正在使用Delphi进行编程。
我希望编写一个软件包,计算给定输入公式的结果值。
我基于Shunting-Yard算法(Dijikstra)创建了解析器,我想创建用户可以使用的函数库(例如:sin()
和cos()
函数)。
那么接下来该怎么做?我有一些问题:
使用Shunting Yard算法还是递归下降算法更简单易用?
在我的工作中是否会涉及到解释器的工作?如果会,具体如何实现?
谢谢...
请注意,我正在使用Delphi进行编程。
已经实现了两种算法(并且仍在维护着这两种系统),以下是我的优缺点列表:
换句话说,如果您只处理数学公式,那么Shunting Yard可能是最好的选择;但是,如果您认为以后可能需要更复杂的内容,递归下降可能更灵活、可扩展、可维护,并能够长期回报。
编译器编译器(Lex/Yacc、Flex/Bison等)可能是明显的第三选择,但我不知道任何Delphi的维护实现,而且对于简单的数学公式,它们过于复杂。