码迷,mamicode.com
首页 > Windows程序 > 详细

.Net RuntimeExplorer开发日志(四) IL to C# - 生成表达式

时间:2020-06-28 00:02:21      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:解析   exp   必须   text   xpl   存在   结构   位置   方法   

  通过前文已经将IL代码分割成各种语句块,剩下的就是要把表达式语句实现了。这里需要对表达式充分理解一下,IL代码都是有Code和Operand的,这些个Operand将会出现在表达式中,而Code则是表达式中的运算符,所以每个Operand之间都必须存在运算符。在C#中运算符一共有15级,所当Operand与Operand合并成表达式运算符等级发生变化时,则必须增加括号。

  我在这里定义了一种表达的结构,将IL语句的Operand定义为SubBlock,这里又派生几个子类,FieldBlock表示关键字,TextBlock表示普通文本,StringBlock表示字符串,LinkBlock表示类型字段方法等等。将所有运算符定义为CharBlock,而且定义了运算符的方向,也就是这个运算符在语句中的位置,同时也是这个运算符后面表达式在语句中的位置。

  解析的过程则是通过循环遍历每个IL语句,以IL的栈行StackBehaviour为分类解析,根据IL确定运算符,再根据运算符方向将运算符与SubBlock逐个添加在双向队列首或尾,待所有IL解析完毕,再调用Writer将双向队列输出成行。

.Net RuntimeExplorer开发日志(四) IL to C# - 生成表达式

标签:解析   exp   必须   text   xpl   存在   结构   位置   方法   

原文地址:https://www.cnblogs.com/ccddnet/p/13200468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!