欢迎来到天天文库
浏览记录
ID:8929847
大小:40.50 KB
页数:5页
时间:2018-04-12
《编译原理语法分析实验1》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《编译原理》课程实验报告课程实验题目:语法分析实验学生所在系部:计算机科学与技术学生所在专业:计算机科学与技术学生所在班级:软件二班学生学号:2009145617_学生姓名:邱玉梅一、实验目的通过本实验,了解递归下降预测分析的原理和过程以及可能存在的回溯问题,探讨解决方法,为预测分析表方法的学习奠定基础。分析递归下降子程序的优缺点。二、实验内容及要求1.针对算术表达式文法:E→TE’E’→+TE’
2、εT→FT’T’→*FT’
3、εF→(E)
4、i为其编写递归下降子程序,判定某个算术表达式是否正确:如j+k*m,j*k+m输入:其输入数据应该为词法分析器输出的记号形
5、式:i+i*i,i*i+i输出:分析结果:算术表达式结构正确或结构错误。三、实验程序设计说明1.实验方案设计各个函数之间的调用关系如下图所示:2.程序源代码源代码如下:#include#include#include#includechara[10];intlookahead=0;voidE1();voidT();voidT1();voidF();voidE(){printf("E->TE'");T();E1();}voidE1(){if(a[lookahead]=='+'){prin
6、tf("E'->+TE'");lookahead++;T();E1();}elseprintf("T'->ε");}voidT(){printf("T->FT'");F();T1();}voidT1(){if(a[lookahead]=='*'){printf("T'->*FT'");lookahead++;F();T1();}elseprintf("T'->ε");}voidF(){if(a[lookahead]=='i'){printf("F->i");lookahead++;}elseif(a[lookahead]=='('){l
7、ookahead++;E();if(a[lookahead]==')'){printf("F->(E)");lookahead++;}else{printf("括号不匹配分析失败!");exit(0);}}else{printf("括号不匹配,分析失败!");exit(0);}}intmain(){while(1){printf("请输入算数表达式(以#键结束):");scanf("%s",a);E();if((a[lookahead]=='#'))printf("句子结构正确");elseprintf("无结束标志,分析失败");}r
8、eturn0;}3.程序的执行结果程序运行结果如下所示:
此文档下载收益归作者所有