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

  通过前文已经将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将双向队列输出成行。

猜你喜欢

转载自www.cnblogs.com/ccddnet/p/13200468.html