武漢理工大學編譯原理 課內實驗

2021-10-25 15:14:15 字數 2531 閱讀 6140

二、賦值語句的語法分析程式設計與實現

總結編譯原理課設驗收更水,只看結果。

1.pc機

2.c++整合環境

通過設計、編制、除錯乙個具體的詞法分析程式,加深對詞法分析原理的理解,並掌握在對程式語言源程式進行掃瞄過程中將其分解為各類單詞的詞法分析方法。

完成對某一種常用高階語言(如pl/0語言)的各類單詞的詞法分析程式設計。

pl/0語言文法的ebnf描述:

〈程式〉∷= 〈分程式〉。

〈分程式〉∷= [〈常量說明部分〉]

[〈變數說明部分〉]

[〈過程說明部分〉]〈語句〉

〈常量說明部分〉∷= const〈常量定義〉;

〈常量定義〉∷= 〈標誌符〉=〈無符號整數〉

〈無符號整數〉∷= 〈數字〉

〈變數說明部分〉∷= var〈標誌符〉;

〈標誌符〉∷= 〈字母〉

〈過程說明部分〉∷= 〈過程首部〉〈分程式〉;

〈過程首部〉∷= procedure〈標誌符〉;

〈語句〉∷= 〈賦值語句〉|〈條件語句〉|〈當型迴圈語句〉|〈過程呼叫語句〉|〈讀語句〉|〈寫語句〉|〈復合語句〉|〈空〉

〈賦值語句〉∷= 〈標誌符〉:=〈表示式〉

〈復合語句〉∷= begin〈語句〉end

〈條件〉∷= 〈表示式〉〈關係運算子〉〈表示式〉|odd〈表示式〉

〈表示式〉∷= [+|-]〈項〉

〈項〉∷= 〈因子〉

〈因子〉∷= 〈標誌符〉|〈無符號整數〉|『(』〈表示式〉『)』

〈加法運算子〉∷= +|-

〈乘法運算子〉∷= *|/

〈關係運算子〉∷= =|#|<|>|<=|>=

〈條件語句〉∷= if〈條件〉then〈語句〉

〈過程呼叫語句〉∷= call〈標誌符〉

〈當型迴圈語句〉∷= while〈條件〉do〈語句〉

〈讀語句〉∷= read『(』〈標誌符〉『)』

〈寫語句〉∷= write『(』〈表示式〉『)』

〈字母〉∷= a|b|….

.|x|y|z

〈數字〉∷= 0|1|2|….

1.資料結構的設計

class

word

};

2.核心演算法的設計

//詞法分析函式

word lexicalanalysis()

ch =

" ";

index--

;//讀完後回退位置,防止錯位,識別單詞是保留字還是識別符號

//看是否是保留字

for(

int i =

0; i < len; i++)}

if(flag !=-1

)//保留字

else

else}}

elseif(

is_number

(ch)

) ch =

" ";

index--

;//讀完後回退位置

ite = constant.

find

(str1)

;//查詢str1

if(ite != constant.

end())

else

}elseif(

is_boundary

(ch)

)elseif(

is_operator

(ch)

) ch =

" ";

index--

;//讀完後回退位置

//檢查是否存在復合運算子

for(

int i =

0; i < len1; i++

)else}}

else

}

核心的詞法分析函式對掃瞄的每乙個字元,進行判斷,分別對保留字、識別符號、常數、界符、運算子五種型別的單詞進行識別,其中識別符號和常數按照其文法進行迴圈識別,滿足其條件就將其按相應類別進行輸出。

簡單賦值語句的文法g:

〈賦值語句〉∷= 〈識別符號〉=〈表示式〉

〈表示式〉∷= 單目算符〈表示式〉|〈項〉|〈表示式〉〈加法運算子〉〈項〉

〈項〉∷= 〈因子〉|〈項〉〈乘法運算子〉〈因子〉

〈因子〉∷= 〈標誌符〉|〈無符號整數〉|(〈表示式〉)

〈無符號整數〉∷= 〈數字〉|〈無符號整數〉〈數字〉

〈標誌符〉∷= 〈字母〉|〈標誌符〉〈字母〉|〈標誌符〉〈數字〉

〈加法運算子〉∷= +|-

〈乘法運算子〉∷= *|/

對於常用高階語言(如pascal、c語言)的賦值語句用所學過的語法分析方法進行語法分析,並把源程式翻譯成為語法樹(採用適當的形式)作為輸出結果輸出到檔案中。

採用遞迴下降法實現,實驗報告略有瑕疵,但是源工程用遞迴下降法實現,輸出為四元式。

武漢理工大學C語言 課內實驗

問題描述 1.求乙個三位數的各位數字 當 n 為 152 時,分別求出 n 的個位數字 digit1 十位數字 digit2 和百位數字 digit3 的值。2.三天打魚兩天曬網 中國有句俗語 三天打魚兩天曬網 假設某人從某天起,開始 三天打魚兩天曬網 問這個人在以後的第 n 天中是 打魚 還是 曬...

武漢理工大學數值分析課內實驗

二 用c語言實現幾個求常微分方程初值問題解的程式。euler方法及其改進 龍格 庫塔 runge kutta 方法 三 用c語言實現幾個非線性方程求根的程式。二分法 迭代法 迭代過程的加速 四 用c語言實現幾個求線性方程組解的程式。gauss消去法 總結數值分析課內實驗採用程式設計的思想去實現有關數...

武漢理工大學資料結構課內實驗

二 棧的應用 三 樹的應用 四 無向圖的應用 五 有向圖的應用 六 查詢與排序 七 哈夫曼編碼總結 1 安裝了windows 10作業系統的pc機1臺 2 pc機系統上安裝了microsoft visual studio 2019開發環境 專案名稱 學生資訊管理系統 專案內容 設計乙個學生資訊管理系...