设计数学解析器最聪明的方法是什么?我指的是一个函数,它接受一个数学字符串(比如:"2 +3/2+ (2 * 5)")并返回计算值?我在很久以前就用VB6写了一个,但它最终变得臃肿,而且不太便携(或者说它很聪明……)。一般想法,伪代码或真正的代码是赞赏的。
发布于 2008-09-22 12:37:47
一个相当好的方法需要两个步骤。第一步涉及converting the expression from infix to postfix (例如,通过Dijkstra's shunting yard)表示法。完成后,编写一个postfix evaluator就非常简单了。
发布于 2008-11-22 14:36:28
我写了一些关于设计数学解析器的博客文章。这里有一个一般的introduction,关于grammars的基本知识,sample implementation written in Ruby和一个test suite。也许你会发现这些材料很有用。
发布于 2008-09-22 12:38:29
您有几种方法。您可以生成动态代码并执行它,以便在不需要编写大量代码的情况下获得答案。只需在.NET中搜索运行时生成的代码,周围有很多示例。
或者,您可以创建一个实际的解析器,并生成一个小的解析树,然后用它来计算表达式。同样,对于基本表达式来说,这是非常简单的。请查看codeplex,因为我相信他们有一个数学解析器。或者只需查找BNF,其中将包含示例。任何介绍编译器概念的网站都会将此作为基本示例。
https://stackoverflow.com/questions/114586
复制相似问题