文档介绍:编译原理实验报告
题目
实验3:递归下降语法分析实验
学院
计算机学院(信息工程学院)
专业
软件工程
班级
08092714
学号
08927410
学生姓名
陈亚斌
指导教师
谌志群
完成日期
2011年6月
一、实验目的
编写一个语法分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。
实验要求
利用编程语言实现语法分析程序,并对简单语言进行语法分析。
待分析的简单语言的语法
用扩充的BNF表示如下:
⑴<程序>::=begin<语句串>end
⑵<语句串>::=<语句>{;<语句>}
⑶<语句>::=<赋值语句>
⑷<赋值语句>::=ID:=<表达式>
⑸<表达式>::=<项>{+<项> | -<项>}
⑹<项>::=<因子>{*<因子> | /<因子>
⑺<因子>::=ID | NUM | (<表达式>)
实验要求说明
输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“ess”,否则输出“error”。
例如:
输入 begin a:=9; x:=2*3; b:=a+x end #
输出 ess
输入 x:=a+b*c end #
输出 error
语法分析程序的酸法思想
⑴主程序示意图如图2-1所示。
置初值
调用scaner读下一个单词符号
调用lrparser
结束
图2-1 语法分析主程序示意图
⑵递归下降分析程序示意图如图2-2所示。
⑶语句串分析过程示意图如图2-3所示。
是否begin?
调用statement函数
否
是
是否;?
调用scaner
否
调用语句串分析程序
是
调用scaner
是否end?
否
调用statement函数
是
调用scaner
出错处理
syn=0&&kk=0?
否
是
出错处理
打印分析成功
图2-2 递归下降分析程序示意图图2-3 语句串分析示意图
⑷statement语句分析程序流程如图2-4、2-5、2-6、2-7所示。
调用term函数
是否标识符?
否
调用expression函数
调用scaner
是否:=?
调用scaner
是否+ , -?
否
否 是
调用scaner
调用term函数
出错处理
出错处理
图2-4 statement语句分析函数示意图图2-5 expression表达式分析函数示意图
调用scaner
调用factor函数
出错处理
是否* , /?
调用factor函数
是否标识符?
是
否 否
是否整常数?
是
是
否
是否(?
否
是
调用scaner
是否)?
调用expression函数
图 2-6 term分析函数示意图
否
出错处理
调用scaner
调用scaner
是
图2-7 factor分析过程示意图
语法分析程序的C语言程序源代码
#include "" /*定义I/O库所用的某些宏和变量*/
#include "" /*定义字符串库函数*/
#include