随笔-91  评论-137  文章-0  trackbacks-0
首先生成抽象语法树,方法如下:
1.根节点为0时表示没有default标签,为1时表示有default标签
2.第0个根节点表示switch里的条件
3.若有default标签,则最后一个根节点为default子树
4.每个根节点为0时表示在此标签下没有stmt_list语句块,这个节点的唯一孩子为要匹配的表达式;为1时表示有语句块,根节点的左孩子表示要匹配的表达式,右孩子为要执行的语句块
注意:Equal指令会弹出两操作数,应此在Equal指令执行之前必须先保留switch里exp的副本(即Push一次),最后弹出副本
测试代码:
 1 integer aaa,bbb
 2 
 3 function ccc()
 4     switch aaa + 1 do
 5         default:
 6             aaa = 123
 7         case 123:
 8             do
 9                 aaa = aaa + 1
10             while aaa < 789 end
11         case 456:
12             aaa = 123
13     end switch
14 end function
生成虚拟机代码:
posted on 2010-09-29 15:55 lwch 阅读(1229) 评论(0)  编辑 收藏 引用 所属分类: QLanguage

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理