用 C# 设计与实现一个四则算术运算解释器
2009-05-29 08:31:32 来源:WEB开发网核心提示: 一、输入和输出输入是一个用字符串表达的四则运算,比如 1 + 2 * 3 ,用 C# 设计与实现一个四则算术运算解释器(2),目的是试图去理解这个字符串表达的运算指令,然后计算出结果 7,也就是 * ,然后是第二级的 + 和 / ,之所以是一个解释器 Interpreter,而不是一个编译
一、输入和输出
输入是一个用字符串表达的四则运算,比如 1 + 2 * 3 。目的是试图去理解这个字符串表达的运算指令,然后计算出结果 7。之所以是一个解释器 Interpreter,而不是一个编译器 Compiler,是因为程序是去理解指令并且执行指令,而不是把指令编译成机器代码来运行;后者是编译器的目标。
在解释的过程中,要能够分辨出不合法的指令:比如非法的字符 abc,非法的数字 2.3.1.4,非法的运算指令 2 * + 3,还有等等。
整个程序可以分为两个部分:
第一个部分,是截取输入字符串,然后返回单元指令。比如,对于指令 1 + 2 * 3 – 4 / 5,就需要被分解成如下所示的单元指令集:
第二个部分,是把单元指令集(上图橙色包含部分)组成一个树结构,称之为 Abstract Syntax Tree。按照将来需要解释的顺序,优先执行的指令会放在树的叶的位置,最后执行的指令会是树的根 Root。
图片看不清楚?请点击这里查看原图(大图)。
在上图所示的 Abstract Syntax Tree 中,最先执行的指令是位于树上最深的子树,也就是 * ,然后是第二级的 + 和 / ,最后执行的位于根的指令 – 。
二、截取单元指令 (Tokenize)
更多精彩
赞助商链接