LCC編譯器的源程式分析 24 條件表示式

2021-08-22 09:10:15 字數 527 閱讀 8686

c語言裡條件表示式語句如下:

表示式1 ?表示式2 :表示式3

條件運算子要求有三個操作物件,稱為三元運算子,它是c語言中唯一的乙個三目運算子。比如計算兩個值的最大值,就可以寫成下面這樣:

int nmax = a > b ? a:b;

下面就來看lcc是怎麼樣處理條件表示式的,它的**如下:

#001static tree expr2(void)

#002

#025

#026

p = condtree(p, l, r);

#027

} #028

#029

return p;

#030}

第5行是判斷這個表示式是否條件表示式。

第16行是遞迴呼叫expr函式來處理表示式2(a:),然後返回左子樹l。

第18行是遞迴呼叫expr2處理表示式3(b),然後返回右子樹r。

第26行是構造條件樹節點。

通過上面短短

30行程式就可以處理條件表示式了。

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