LCC編譯器的源程式分析 29 if條件語句

2021-04-13 02:29:21 字數 1077 閱讀 1412

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