1. 程式人生 > >編譯原理實驗報告三:語法分析(PL0,詞法分析,語法分析,中間程式碼生成)

編譯原理實驗報告三:語法分析(PL0,詞法分析,語法分析,中間程式碼生成)

實驗報告三:語法分析

一、實驗目的

       通過設計、開發一個S語言的語法分析程式,實現對源程式的語法檢查和結構分析,加深對相關課堂教學內容的理解,提高語法分析方法的實踐能力。

二、實驗要求

根據下列S語言的語法規則,進行語法分析

(1) <程式>→[<常量說明>][<變數說明>]<語句>

(2) <常量說明>→Const <常量定義>{,<常量定義>};

(3) <常量定義>→<識別符號>=<無符號整數>

(4) <無符號整數>→<數字>{<數字>}

(5) <字母>→a|b|c| … |z

(6) <數字>→0|1|2| … |9

(7) <識別符號>→<字母>{<字母>|<數字>}

(8) <變數說明>→Var <識別符號>{,<識別符號>};

(9) <語句>→<賦值語句>|<條件語句>|<當迴圈語句>|<複合語句>|ε

(10) <賦值語句>→<識別符號>=<表示式>;

(11) <表示式>→[+|-]<項>{<加法運算子><項>}

(12) <項>→<因子>{<乘法運算子><因子>}

(13) <因子>→<識別符號>|<無符號整數>|‘(’<表示式>‘)’

(14) <加法運算子>→+|-

(15) <乘法運算子>→* |/

(16) <條件語句>→if <條件> then <語句>| if <條件> then <語句> else

<語句>

(17) <條件>→<表示式><關係運算符><表示式>

(18) <關係運算符>→==|<=|<|>|>=|<>

(19) <當迴圈語句>→while <條件> do <語句>

(20) <複合語句>→begin <語句>{;<語句>} end

三、實驗過程分析

1. 採用多個bool型別函式:

a)  判斷字元型別(大小寫)

b)  判斷數字

c) 判斷識別符號(Constant,Var等)、並更進一步,識別連續定義(形如 Constanta, b)

d)  判斷表示式、賦值

e)  判斷if、while迴圈

2. 輸出語法分析結果

四、結果展示

       1、輸入樣本(詞法分析輸出的file_out.txt):

1 Const

1 x

1 =

1 8

1 ,

1 y

1 =

1 7

1 ;

2 Var

2 a

2 ,

2 b

2 ;

3 begin

4 a

4 =

4 x

4 +

4 y

4 ;

5 b

5 =

5 a

5 *

5 x

5 ;

6 end

2、輸出結果:

…………

具體實驗報告及程式碼見下載連結

其他實驗報告(PL0,詞法分析,語法分析,中間程式碼生成)請訪問本人部落格