default
語句是使用在
switch
語句的復合語句裡,它是所有其它分支不能處理時的分支處理。在
lcc裡是如下處理的:
#001case default:
#002 if (swp == null)
#003 error("illegal default label/n");
#004 else if (swp->deflab)
#005 error("extra default label/n");
#006 else
#007
#011 t = gettok();
#012 expect(':');
#013 statement(loop, swp, lev);
#014 break; 第
2行是判斷是否在
switch
語句裡,如果不在就在第
3行裡提示出錯。 第
4行是判斷是否已經定義了
default
語句,如果已經有就是重複出錯,在第
5行裡提示。 第
8行和第
9行是定義
default
的標號,以便其它分支不能處理時跳轉到這個標號執行。 第
11行是獲取下乙個記號。 第
12行是檢查是否冒號結束。 第
13行是處理
default
後面的語句,通過遞迴呼叫函式
statement
來處理。
這樣就可以處理
default
語句,比較簡單的。
LCC編譯器的源程式分析 12 13
語法分析是比較複雜的處理,下面再來分析乙個例子,它的 如下 typedef unsigned short wchar t typedef wchar t wint t 第一句語句在lcc裡的處理,前面已經解釋清楚,主要生成wchar t儲存符號表裡,並且記錄這個id的型別屬性。那麼第二句是怎麼樣通過...
LCC編譯器的源程式分析 18 19
lcc編譯器的源程式分析 19 全域性函式的定義 函式定義funcdefn處理裡,已經準備好呼叫引數和引數返回,接著就是呼叫全域性函式宣告來處理。如下面的 132 宣告函式。133 cfunc dclglobal sclass,id,ty,pt 134 上面的 是處理函式全域性定義。現在就去就分析d...
LCC編譯器的源程式分析 20 復合語句
在 c語言裡,有一種語句叫做復合語句。它是由 把一些語句括起來的,如下面的例子 在lcc 裡處理這樣的復合語句的函式是 compound 它在上面函式定義函式 funcdefn 是這樣呼叫的 150labels table null,labels 151stmtlabs table null,lab...