if
語句是用來判定所給定的條件是否滿足,根據判定的結果決定執行給出來的兩種操作之一。
if語句有下面三種形式: 1.
if(表示式)語句 2.
if(表示式)語句
1 else 語句2
3.if(表示式
1)語句1
else if
(表示式
2)語句2
else if
(表示式
3)語句3
else 語句4
那麼lcc又是怎麼樣處理
if語句的呢?
lcc在函式
statement
呼叫ifstmt
來處理的。下面就來檢視
ifstmt
函式的源程式。
#001 static void ifstmt(int lab, int loop, swtch swp, int lev)
#002
#021 else
#022 definelab(lab);
#023 } 第
12行是判斷下乙個記號是否有
else
關鍵字,如果有這個關鍵字說明它是第
二、第三種
if語句的形式,那麼第
13行到第
20行就是處理
else
後面的語句。 第
14行呼叫函式
branch
來生成跳轉標號**。 第
15行是獲取下乙個記號。 第
16行定義乙個標號。 第
17行是遞迴呼叫函式
statement
來處理else
後面的語句。 第
22行是生成標號1。
lcc會把if
語句生成下面形式:
if 表示式== 0 goto 標號1
語句1
goto 標號2
標號1:語句2
標號2:
上面的**
definelab(lab)
是生成標號1,
definelab(lab + 1)
是生成標號2。
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...