编译原理实验报告实验二编写递归下降语法分析程序Word文件下载.docx
- 文档编号:7480013
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:15
- 大小:243.27KB
编译原理实验报告实验二编写递归下降语法分析程序Word文件下载.docx
《编译原理实验报告实验二编写递归下降语法分析程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《编译原理实验报告实验二编写递归下降语法分析程序Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。
秋白楼B720
实验成绩:
日期:
2016年4月1日
一、实验目的
通过设计、编制、调试一个递归下降语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,掌握常用的语法分析方法。
通过本实验,应达到以下目
标:
1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。
2、掌握词法分析的实现方法。
3、上机调试编出的语法分析程序。
二、实验过程
1、分析对象分析算术表达式的BNF定义如下:
〈算术表达式〉→〈项〉|〈算术表达式〉+〈项〉|〈算术表达式〉-〈项〉
〈项〉→〈因式〉|〈项〉*〈因式〉|〈项〉/〈因式〉
〈因式〉→〈变量〉│(〈算术表达式〉)
〈变量〉→i
用符号表示如下:
E→T|E+T|E-T
T→F|T*F|T/F
F→i│(E)
递归下降分析程序实现思想简单易懂。
程序结构和语法产生式有直接的对应关系。
因为每个过程表示一个非终结符号的处理,添加语义加工工作比较方便。
递归下降分析程序的实现思想是:
识别程序由一组子程序组成。
每个子程序对应于一个非终结符号。
每一个子程序的功能是:
选择正确的右部,扫描完相应的字。
在右部中有非终结符号时,调用该非终结符号对应的子程序来完成。
自上向下分析过程中,如果带回溯,则分析过程是穷举所有可能的推导,看是否能推导出待检查的符号串。
分析速度慢。
而无回溯的自上向下分析技术,当选择某非终结符的产生时,可根据输入串的当前符号以及各产生式右部首符号而进行,效率高,且不易出错。
无回溯的自上向下分析技术可用的先决条件是:
无左递归和无回溯。
无左递归:
既没有直接左递归,也没有间接左递归。
无回溯:
对于任一非终结符号U的产生式右部x1|x2|…|xn,其对应的字的首终结符号两两不相交。
2.递归下降语法分析流程图
实验分为五个模块,分别是:
E()函数,E1()函数,T()函数,T1()函数,F()函数。
用递归下降算法分析上述算术表达式的框图,如下图所示。
ZC过程为总控程序。
图1-1ZC过程
图1-2E过程
图1-3T过程
图1-4F过程
图1-5函数过程SYM
图1-6函数过程Advance
三、实验结果
1.测试数据
测试数据时输入要测试的串并以#结束
数据共分为2组,分别如下:
第一组数据
i+i*i#
第二组数据
I**#
2.测试结果
测试结果如下图所示:
图1-7测试结果1
图1-8测试结果2
四、讨论与分析
本次试验分为5个大步骤:
ZC过程:
开始,然后打印“INPUTEXPRESSION”,输入字符串ST,执行E过程,然后判断SYM是否不等于#或者TZ是否等于1,如果是,打印“ERRORAGAIN”,给TZ赋值为0,跳回到开始步骤继续;
如果不是则打印“RIGHTAGAIN”,回到开始步骤继续。
E过程:
开始,执行T过程,判断SYM是否等于“+”或“—”,如果不是,返回,如果是,执行ADVANCE,跳回到开始步骤。
T过程:
开始,执行F过程,判断SYM是否等于“*”或者“/”,如果不是,返回,如果是,执行ADVANCE,在跳回到开始过程。
F过程:
开始,判断SYM是否不等于“A”或者SYM是否小于Z,如果不是,执行ADVACE,然后执行返回,如果不是,再判断SYM是否不等于“(”,如果是,打印“ERROR”,TZ赋值1,返回;
如果不是,执行ADVANCE,在执行E过程,接着继续判断SYM是否不等于“)”,如果是,打印"
ERROR"
TZ赋值1,如果不是,执行ADVANCE,返回。
SYM:
取字符串ST的第一个字符给SYM。
ADVANCE:
取字符串ST去除首字符后留下的字符串。
五、附录:
关键代码部分如下:
(E()函数和E1()函数构成E过程,T()函数和T1()函数构成T过程,F()函数构成F过程)
/*E()函数*/
voidE()
{
if(x==0)
{
output1(i);
printf("
E->
TE1"
);
output(i+1);
T();
E1();
}
}
/*E1()函数*/
voidE1()
if(s[i]=='
+'
)
{
output1(i);
printf("
E1->
+TE1"
output(i+1);
advance();
T();
E1();
}
elseif(s[i]=='
-'
-TE1"
#'
output1(i-1);
ε"
output(i);
else
/*T()函数*/
voidT()
if(x==0)
if(s[i]!
='
T->
FT1"
F();
T1();
/*T1()函数*/
voidT1()
*'
T1->
*FT1"
/'
/FT1"
/*F()函数*/
voidF()
i'
F->
i"
('
{
output1(i);
printf("
(E)"
output(i+1);
advance();
E();
if(x!
=1)
{
if(s[i]=='
)'
output1(i);
printf("
output(i+1);
advance();
}
else
x=1;
}}
}
elseif(s[i]=='
x=1;
x=1;
六、实验者自评
通过本次实验,我对递归下降词法分析器的结构,过程有了更进一步的了解,通过学习书本和试验原理书上的内容,对它的工作原理,具体实行步骤有了进一步的掌握。
这次实验让我了解到如何设计、编制并调试递归下降语法分析程序,加深对递归下降语法分析原理的理解;
熟悉了构造递归下降语法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用某种高级语言(例如C语言)直接编写此法分析程序。
由于本次试验是测试性试验,所以要求输出的结果是成功与否,输入一个句型,进过分析,判断它是否合法,主要内容在于其判断过程中。
本次试验不光提高了自己的编程能力,同时提高了对递归下降的了解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 报告 编写 递归 下降 语法分析 程序
![提示](https://static.bingdoc.com/images/bang_tan.gif)