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