实验二 语法分析 1——递归子程序法
一、目的和内容
、 实验目的:通过完成语法分析程序,了解语法分析的过程和作用
、 实验内容:用递归子程序法实现对 : 的子集程序设计语言的分析程序
、 实验要求:对源程序的内码流进行分析,如为文法定义的句子输出”是”否则输出”
否”;根据需要处理说明语句填写写相应的符号表供以后代码生成时使用
二、文法的改变
为适合递归子程序法,对实验一中的文法改写成无左递归和无左共因子的BNF如下:
程序→程序首部分程序。
程序首部→ 标识符;
分程序→常量说明部分变量说明部分过程说明部分,复合语句
常量说明部→常量定义常量定义后缀"ε
常量定义→标识符无符号整数
常量定义后缀→,常量定义常量定义后缀,"ε
变量说明部分→变量定义变量定义后缀"ε
变量定义→标识符标识符后缀:类型;
标识符后缀→,标识符标识符后缀,"ε
变量定义后缀→变量定义变量定义后缀,"ε
类型→ !!"#
过程说明部分→过程首部分程序;过程说明部分后缀"ε
过程首部→!$%! 标识符参数部分;
参数部分→标识符:ë类型"ε
<过程说明部分后缀>→过程首部分程序;过程说明部分后缀"ε
<语句>→赋值或调用语句"条件语句"当型循环语句"读语句
"写语句"复合语句"ε
<赋值或调用语句>→标识符后缀
后缀→:表达式"表达式"ε
<条件语句>→ 条件'!语句
当型循环语句→(' #!条件$语句
读语句→!$(标识符标识符后缀)
写语句→( !(表达式表达式后缀)
表达式后缀→,表过式表达式后缀"ε
复合语句→! 语句语句后缀!$
语句后缀→;语句语句后缀"ε
条件→表达式关系运算符表达式"$$表达式
表达式→项项后缀")项项后缀"项项后缀
项后缀→加型运算符项项后缀"ε
项→因子因子后缀
因子后缀→乘型运算符因子因子后缀"<
因子→标识符|无符号整数|(表达式)
加型运算符→+|-
乘型运算型→*|/