證明語句 A = B * C + 20 的完整編譯過程,其中 A、B、C 為實數型別。


解決方案

                    符號表

序號變數名變數型別
200A浮點數
204B浮點數
208C浮點數

現在,我們將瞭解如何在每個級別執行編譯器階段以及它的工作原理。

  • 詞法分析

這是第一步,它充當編譯器和原始碼之間的橋樑。它一次讀取原始碼一個字元,並將原始碼設計成一系列稱為標記的原子單元。

在這個階段,我們將瞭解如何對錶達式進行標記化。

A → 識別符號:(id, 1)

= → 運算子:賦值

B → 識別符號:(id, 2)

* → 運算子:乘法

C → 識別符號:(id, 3)

+ → 運算子:二元加法

20 → 常量:整數

最終表示式如下:

id1=id2*id3+20
  • 語法分析

它也稱為解析器。它接收來自上一階段(詞法分析)生成的標記作為輸入,並生成稱為語法樹或解析樹的分層結構。

在這個階段,它可以在對錶達式進行標記化後檢查語法。

表示式的語法分析如下:

  • 語義分析

此階段以語法樹為輸入,並確定程式的語義準確性。然而,即使標記是準確的且語法正確的,它們也可能在語義上不精確。因此,語義分析器確定語句結構的語義 **(含義)**。在這個階段,它可以驗證語法樹的型別和語義操作。

  • 中間程式碼生成

此階段以語法和語義上正確的形式作為輸入,並生成原始碼的相同中間表示法。在這個階段,我們將提供修改後的解析樹,並在轉換為中間程式後作為輸出,建立一個三地址碼。

T1=id2 * id3
T2=int to real (20)
T3=T1+T2
id1=T3
  • 程式碼最佳化

這是一個可選階段。它將源程式的中間表示轉換為高效的程式碼。在這個階段,它將以三地址碼作為輸入,並作為輸出,識別最佳化後的程式碼。

T1=id2 * id3
id1=T1+ 20.0
  • 程式碼生成

這是編譯過程的最後一步。它將最佳化的中間程式碼轉換為機器/彙編程式碼。它為程式中的變數分配記憶體位置。

在最後階段,可以看到如何將最終表示式修改為彙編程式。

更新於:2021年10月22日

9K+ 瀏覽量

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.