递归下降语法分析器报告.docx
- 文档编号:8475553
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:13
- 大小:173.48KB
递归下降语法分析器报告.docx
《递归下降语法分析器报告.docx》由会员分享,可在线阅读,更多相关《递归下降语法分析器报告.docx(13页珍藏版)》请在冰豆网上搜索。
递归下降语法分析器报告
学生实验报告
(理工类)
课程名称:
编译原理专业班级:
计算机科学与技术
(1)
学生学号:
0905101005学生姓名:
周浩
所属院部:
信息技术学院指导教师:
2011——2012学年第2学期
金陵科技学院教务处制
实验报告书写要求
实验报告原则上要求学生手写,要求书写工整。
若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。
纸张一律采用A4的纸张。
实验报告书写说明
实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。
各院部可根据学科特点和实验具体要求增加项目。
填写注意事项
(1)细致观察,及时、准确、如实记录。
(2)准确说明,层次清晰。
(3)尽量采用专用术语来说明事物。
(4)外文、符号、公式要准确,应使用统一规定的名词和符号。
(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。
实验报告批改说明
实验报告的批改要及时、认真、仔细,一律用红色笔批改。
实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。
实验报告装订要求
实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。
实验项目名称:
语法分析程序实验学时:
6
同组学生姓名:
无实验地点:
A203
实验日期:
实验成绩:
批改教师:
批改时间:
一、实验目的和要求
1、目的
通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。
2、要求
选择最有代表性的语法分析方法,如算符优先法、递归子程序法和LR分析法;选择对各种常见程序语言都用的语法结构,如赋值语句,特别是表达式,作为分析对象,并且与所选语法分析方法要比较贴切。
二、实验仪器和设备
硬件:
PC机
软件:
c++
三、实验过程
1、实验内容
算术表达式的文法可以是(可以根据需要适当改变):
E→E+E|E-E|E*E|E/E|(E)|i
根据递归下降分析法或预测分析法,对表达式进行语法分析,判断一个表达式是否正确。
2、实验步骤
(1)准备:
1.阅读课本有关章节,确定算术表达式的文法;(设计出预测分析表);2.考虑好设计方案;3.设计出模块结构、测试数据,初步编制好程序。
(2)上机调试,发现错误,分析错误,再修改完善。
教师根据学生的设计方案与学生进行探讨,以修改方案和代码。
(3)改造后的文法:
E→E+T|E-T|T
T→T*F|T/F|F
F→F^P|P
P→c|id|(E)
3、实验设计思想
(1)主程序示意图如图1所示。
(2)递归下降分析程序示意图如图2所示。
(3)语句串分析过程示意图如图3所示。
(4)statement语句分析函数流程如图4,5,6,所示。
图1递归下降分析程序示意图
图2语句串分析示意图
是
否
是
图3statement语句分析函数示意图
否
是
图4expression表达式分析函数示意图
否
是
图5term分析函数示意图
图6factor分析过程示意图
4、实验程序介绍
(1)程序结构分析
(2)程序总体流程图或结构图
(3)程序函数块简介
1.语法分析的主程序
voidmain()
{p=0;
printf("********************语法分析程序***************\n");
printf("请输入源程序:
\n");
do
{scanf("%c",&ch);
prog[p++]=ch;
}while(ch!
='#');
p=0;
scaner();
lrparser();
printf("语法分析结束!
\n");
}
2.编写扫描子程序
voidlrparser()
{
if(syn==1)//begin
{
scaner();
yucu();
if(syn==6)//end
{
scaner();
if(syn==0&&kk==0)printf("success\n");
}
else
{
if(kk!
=1)printf("error,lose'end'!
\n");
kk=1;
}
}
else
{
printf("error,lose'begin'!
\n");
kk=1;
}
return;
}
voidyucu()
{
statement();
while(syn==26)//;
{
scaner();
statement();
}
return;
}
voidstatement()
{
if(syn==10)
{
scaner();
if(syn==18)
{
scaner();
expression();
}
else
{
printf("error!
");
kk=1;
}
}
else
{
printf("error!
");
kk=1;
}
return;
}
voidexpression()
{
term();
while(syn==13||syn==14)
{
scaner();
term();
}
return;
}
voidterm()
{
factor();
while(syn==15||syn==16)
{
scaner();
factor();
}
return;
}
voidfactor()
{
if(syn==10||syn==11)scaner();//为标识符或整常数时,读下一个单词符号
elseif(syn==27)
{
scaner();
expression();
if(syn==28)scaner();
else{printf("')'错误\n");kk=1;}
}
else{printf("表达式错误\n");kk=1;}
return;}
四、实验结果与分析
程序输入/输出示例:
如参考C语言的运算符。
输入如下表达式(以分号为结束)和输出结果:
(a)10;
输出:
正确
此时程序运行结果如下图:
(b)1+2;
输出:
正确
此时程序运行结果如下图:
(c)(1+2)/3+4-(5+6/7);
输出:
正确
此时程序运行结果如下图:
(d)((1-2)/3+4
输出:
错误
此时程序运行结果如下图:
(e)1+2-3+(*4/5)
输出:
错误
此时程序运行结果如下图:
(f)(1+2)/3+4-(5+6/7)-2^3;
输出:
正确
此时程序运行结果如下图:
(g)(1+2)/3+4-(5+6/7)-;
输出:
正确
此时程序运行结果如下图:
五、实验总结
通过本次实验基本掌握了语法分析的原理和递归下降子程序分析方法,并且能将学到的知识学以致用,提高了对代码的分析能力,掌握了递归下降语法的构造,对自上再而下的语法分析模式有了更好的认识和理解。
通过编写程序进一步复习巩固了C#语言的相关知识,由于对C#语言的掌握不扎实,在编程过程中遇到了很多基础性问题,通过不断的查阅课本,最终解决了问题,但程序仍然存在很多值得改进和完善的地方,这就提醒我们在以后的学习过程当中应该及时复习巩固以前学过的相关知识。
WelcomeTo
Download!
!
!
欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 递归 下降 语法 分析器 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)