LCC編譯器的源程式分析 66 DAG樹分析例子

2021-06-16 00:48:23 字數 1231 閱讀 6107

前面已經介紹建立分析樹,下面就來詳細地說明乙個例子,看看到底生成什麼樣的分析樹,

c源程式如下:

#005  int ntest1 = 1;

#006  int ntest2 = 2;

#007  int ntest3;

#008  int i;

#009  

#010  ntest3 = ntest1 + ntest2;

把上面的源程式分析後,就生成下面的

dag樹,如下:

#2   addrlp4 count=1 ntest1

#3   cnsti4 count=1 1

'1   asgni4 count=0 #2 #3 4 4

左子樹是

addrlp4

,右子樹是

cnsti4

,根節點是

asgni4

。這是第

5行的樹。

#2   addrlp4 count=1 ntest2

#3   cnsti4 count=1 2

'1   asgni4 count=0 #2 #3 4 4

左子樹是

addrlp4

,右子樹是

cnsti4

,根節點是

asgni4

。這是第

6行的樹。

#2   addrlp4 count=2 ntest3

#5   addrlp4 count=1 ntest1

#4   indiri4 count=1 #5

#7   addrlp4 count=1 ntest2

#6   indiri4 count=1 #7

#3   addi4 count=1 #4 #6

'1   asgni4 count=0 #2 #3 4 4

這是第10行的樹。根節點是

asgni4

,它的左子樹是

addrlp4

,也就是

ntest3

。它的右子樹是

addi4

,也就是

ntest1 + ntest2

。ntest1

是由#4 indiri4

和#5 addrlp4

樹構成的。

ntest2

也是#6   indiri4

和#7   addrlp4

構成的。

前面1,2

,3等號碼是節點序號。

LCC編譯器的源程式分析 66 DAG樹分析例子

前面已經介紹建立分析樹,下面就來詳細地說明乙個例子,看看到底生成什麼樣的分析樹,c源程式如下 005int ntest1 1 006int ntest2 2 007int ntest3 008int i 009 010ntest3 ntest1 ntest2 把上面的源程式分析後,就生成下面的 da...

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