首先生成抽象语法树,方法如下:
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 阅读(1273)
评论(0) 编辑 收藏 引用 所属分类:
QLanguage