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

2021-08-22 10:49:47 字數 1190 閱讀 1032

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

c源程式如下:

#005int ntest1 = 1;

#006int ntest2 = 2;

#007int ntest3;

#008int i;

#009

#010ntest3 = 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源程式如下 005 int ntest1 1 006 int ntest2 2 007 int ntest3 008 int i 009 010 ntest3 ntest1 ntest2 把上面的源程式分析後,就生成下...

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