編譯原理實驗報告三:語法分析(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,詞法分析,語法分析,中間程式碼生成)請訪問本人部落格