实验报告三:语法分析
一、实验目的
通过设计、开发一个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,词法分析,语法分析,中间代码生成)请访问本人博客