LCC編譯器的源程式分析 37 default語句

2021-08-22 09:21:12 字數 809 閱讀 9200

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...