首先生成抽象語法樹,方法如下:
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 閱讀(1288)
評論(0) 編輯 收藏 引用 所屬分類:
QLanguage