逗號表示式是優先順序最低的表示式。像下面的例子:
1+2,2+3;
a = (a,b,c);
還有在for語句中的使用:
for(int a=3,b=4; a < 10; a++,b++)
要處理上面這些逗號表示式,在
lcc裡就需呼叫表示式處理函式
expr
,它的**如下:
#001 tree expr(int tok)
#002 ', 0 };
#004
#005 tree p = expr1(0);
#006
#007 while (t == ',')
#008
#014
#015 if (tok)
#016 test(tok, stop);
#017
#018 return p;
#019 } 在第
3行裡是定義了出錯時找到下乙個恢復錯誤的符號。 第
5行是處理逗號表示式的第乙個表示式。 第
7行是迴圈地處理所有逗號表示式。 第
11行是處理下乙個表示式。 第
12行是構造逗號表示式樹。 第
16行是找到下乙個出錯恢復的位置。
它處理逗號表示式主要是遞迴地呼叫前面介紹的表示式函式來分析逗號表示式。
從前面幾節到這裡把所有表示式介紹完成,主要介紹區域性變數初始化時需要表示式運算,才能計算右邊的值,然後再賦值給定義的變數。下一節開始分析
c語言的語句了。
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...