简介
在这个项目中的类,允许您解析用户输入的文本表达式和编译。NET程序集。此组件可以执行上的苍蝇,或者保存到一个DLL。预编译的表达式允许高层次的可移植性,使我们能够评估用户输入的逻辑非常有效。此外,我们可以使用微软的ildasm.exe工具打开,并检查底层正在生成的MSIL代码。
有很多很酷的功能。NET框架,但我的钱,Reflection.Emit命名空间提供您的怪胎降压爆炸,你可以找到。 Reflection.Emit命名空间允许你创建你自己的。NET代码在运行时动态创建。NET类型和进入体内插入MSIL指令。
MSIL是微软的。NET框架的中间语言。 IL是你的C#和VB.NET代码被编译和发送到JIT编译器的时候。NET程序运行。 MSIL是一个很低的水平,语言,这是非常快,工作用它可以让你对你的程序的特殊控制。有关的MSIL的深处,在这篇文章中,我不会进入,但在网络上有几个可用的其他资源,如果你有兴趣学习更多,我已经包括在这篇文章的末尾一些链接。背景
让我们快速概述了我们的解析器/编译器会做什么。用户将进入一个字符串表达式,符合我们的解析器的语法。这个表达式会变成一个微小的。NET程序将运行并输出结果。
要做到这一点,解析器将读取的字符的顺序列表,并分解成一个层次结构的解析树如下图所示。节点的评估所显示的顺序。当一个节点被匹配时,相应的指令被称为该节点的类型。例如,当一个数字是匹配,我们推入堆栈,这个数字。当??????令牌是匹配的,我们所说的乘法指令,依此类推。将所有的指示,在其正确的顺序为我们提供了"方案??看见的权利。表达式:3 * 2 1