设计数学解析器最聪明的方法是什么?我的意思是一个函数,它接受一个数学字符串(如:"2 + 3/2 +(2*5)")并返回计算值?我在VB6很久以前写过一个,但它最终变得臃肿而且不太便携(或者说很聪明......).一般的想法,伪造的代码或真正的代码表示赞赏.
一个相当不错的方法将涉及两个步骤.第一步涉及将表达式从中缀转换为后缀(例如通过Dijkstra的调车场)表示法.一旦完成,编写一个后缀评估器是非常简单的.
我写了几篇关于设计数学解析器的博客文章.有一般性的介绍,关于语法的基础知识,用Ruby编写的示例实现和测试套件.也许你会发现这些材料很有用.
你有几种方法.您可以生成动态代码并执行它以获得答案,而无需编写太多代码.只需在.NET中搜索运行时生成的代码,就会有很多例子.
或者,您可以创建一个实际的解析器并生成一个小的解析树,然后用于评估表达式.对于基本表达式,这也很简单.检查codeplex,因为我相信他们有一个数学解析器.或者只是查看BNF,其中包括示例.任何介绍编译器概念的网站都会将此作为基本示例.
Codeplex Expression Evaluator