返回首页

简介
在这个项目中的类,允许您解析用户输入的文本表达式和编译。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

回答

评论会员:谢恩的故事 时间:2011/12/28
非常有趣,写得很好
巴蒂尔
耶稣爱你 {A}
!!|米格尔巴罗斯
评论会员:游客 时间:2011/12/28
绝品感谢分享。{S0}
ToolmakerSteve2
评论会员:游客 时间:2011/12/28
!imgsrc=http://www.orcode.com/upimg/2011_12_28_12_12_12_1.gif米格尔巴罗斯-开发imgsrc=http://www.orcode.com/upimg/2011_12_28_12_11_34_2.gif
|优秀文章和例子,我特别赞赏看到如何有效地调用动态方法
jpbochi:
评论会员:YAlexopoulos 时间:2011/12/28
我在过去类似的东西

我结束了使用的CodeDOM编译一个lambda表达式。其目的是相似的,但我的解决办法是重得多。如果你有兴趣,我写了一篇文章:{A3}

5

修订于1月13日,2009 7:37
评论会员:SteveM4 时间:2011/12/28
你不要支持变量
评论会员:?jconwell 时间:2011/12/28
不支持变量的代码。有一个MSILParser类GetVar的功能,被称为一个变量时,需要进行评估。对于这个例子,它仅仅是硬编码返回一些静态值。例如,你可以写一个表达式AB * C或AB = C

分析器实际上是什么决定了什么样的说法是允许的。这是非常简单的,但你总是可以实现一个更强大的的解析器来处理更复杂的数据,如日期/时间,对象,点运算符。

很高兴你喜欢的文章

- 史蒂夫
评论会员:SteveM4 时间:2011/12/28
好工作。我很高兴看到更多的文章,关于如何使用Reflection.Emit!

约翰康韦尔
评论会员:保罗浏览器 时间:2011/12/28
约翰,评论表示感谢。我读过你的文章,与发出创建动态类型。这是一个很大的指导作用,而且很彻底
评论会员:游客 时间:2011/12/28
好工作。darrellp