编译原理实验报告二 递归下降语法分析程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理实验报告
实验名称:编写递归下降语法分析程序
实验类型:验证型实验
指导教师:
专业班级:
姓名:
学号:
电子邮件:
实验地点:
实验成绩:
日期:201 年 5 月 25 日
一、实验目的
通过设计、调试递归下降语法分析程序,实现用词法分析从源程序中分出各种单词并对词法分析程序提供的单词序列进行语法检查和结构分析,熟悉并掌握常用的语法分析方法。
明确语法分析器的功能,在词法分析的基础上进一步分析程序;
加深对课堂教学的理解;
提高语法分析方法的实践能力;
通过本实验,应达到以下目标:
1、掌握递归下降的结构模型。
2、掌握语法分析的实现方法。
3、上机调试编出的语法分析程序。
二、实验过程
有了第一次的经验,这次还是先画出流程图。
流程图如下:
三、实验结果
语法分析实验成功。
赋值时少写数字:
缺少括号时:
附(txt文档内容):
程序运行后写入的:
四、讨论与分析
这个程序是在实验一的基础上写的,用的递归下降的方法。不止能识别,还能判断一些语法的正误。刚看书上附录的代码时,头都大了,觉得自己完成不了。但是真正一步一步看下去,画出了流程图,就很清晰明白了。一个函数嵌套一个函数,一步一步往细处走,刚开始是大体轮廓,然后就深入,直到最低层的判断。
书上的程序还是有一些漏洞,比如要写多个语句时,if,for,while在语句内不能加括号,不然只能分析至第一个,遇到“}”就结束了,所以在txt文件里写程序代码的时候要注意不能加{},这样才可以全部printf出来。
五、附录:关键代码(给出适当注释,可读性高)全部代码附vc++,这里粘贴主程序,以及各类函数。
int TESTparse();
int TESTscan();
int program();
int compound_stat();
int statement();
int expression_stat();
int expression();
int bool_expr();
int additive_expr();
int term();
int factor();
int if_stat();
int while_stat();
int for_stat();
int write_stat();
int read_stat();
int declaration_stat();
int declaration_list();
int statement_list();
int compound_stat();
#include
#include
int TESTscan();
int TESTparse();
FILE *fin,*fout;
void main()
{
int es=0;
es=TESTscan();
if(es>0)
printf("词法分析有错!编译停止!\n");
else
{
printf("词法分析成功!\n");
}
if(es==0)
{
es=TESTparse();
if(es==0)
printf("语法分析成功!\n");
else
printf("语法分析错误!\n");
}
}
六、实验者自评
这个实验比第一个有难度,是在第一个完成的基础上进行的。把这里面的递归和嵌套搞明白了,整个程序就好写了。
感觉还可以加一些东西,比如这个程序识别类型只能是int整型,可以加上char,float,double等。在语句里可以多加一些常用的,do while,scanf,printf,等。