為表示式-(a + b) * (c + d) - (a + b + c) 構造四元式、三元式和間接三元式


解決方案

首先,此語句將轉換為三地址碼,如下所示:

t1 = a + b

t2 = -t1

t3 = c + d

t4 = t2 * t3

t5 = t1 + c

t6 = t4 - t5

四元式

位置運算子引數 1引數 2結果
(0)+abt1
(1)-t1
t1
(2)+t2cd
(3)t3t1d*
(4)+t1t2t2
(5)-*t2t3

                                                                                            三元式

位置運算子引數 1引數 2
(0)+ab
(1)-(0)
(2)+t2c
(3)t3(1)(2)
(4)+(0)t2
(5)-(3)(4)

陣列表示

四元式是一種最多包含四個欄位的結構,即運算子、引數 1、引數 2 和結果。三元式包含三個欄位來表示三地址碼。三元式的欄位包括運算子的名稱、第一個源運算元和第二個源運算元。

這種三地址碼錶示包含三個 (3) 個欄位,即一個用於運算子,兩個用於引數(即引數 1 和引數 2)。在這種表示中,不使用臨時變數。我們不使用臨時變數,而是使用括號中的數字來表示指向符號表中該特定記錄的指標。

四元式和三元式會導致一些記憶體浪費,因為某些欄位未被佔用。為了防止浪費空間,可以使用單個數組來表示表示式。

示例- 考慮語句

a = -b + c * d

其三地址碼將為

t1 = -b

t2 = c * d

t3 = t1 + t2

a = t3

四元式將為

位置運算子引數 1引數 2結果
(0)-b
t1
(1)*t2ct1
(2)+t1t1d
(3)=d
A

由於四元式中存在空間浪費,因此可以將其轉換為陣列表示,如下所示:

-Bt1t3Cct1+t1t1d=da

優勢

  • 它節省了記憶體空間。


劣勢

  • 它無法識別單詞,即它是否是運算子或運算元。在四元式中,可以快速完成此操作,因為運算子和運算元都寫在相應的欄位中。


更新於: 2021-11-05

31K+ 次檢視

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告

© . All rights reserved.