预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

编译原理实验报告 实验名称:编写递归下降语法分析器实验类型:验证型实验指导教师:专业班级:姓名:学号:电子邮件:实验地点:实验成绩: 日期:2012年4月26日 目录 实验目的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。2 实验过程。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。2 背景知识。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。2 程序总体设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。2 程序流程图。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 试验结果。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。5 讨论与分析。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。7 附录。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。7 试验者自评。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。11 一、实验目的 通过设计、编制、调试一个递归下降语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,掌握常用的语法分析方法。通过本实验,应达到以下目标:1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。2、掌握词法分析的实现方法。3、上机调试编出的语法分析程序。 二、实验过程 我们在设计递归下降语法分析器时,应该首先对递归下降语法的相关的背景知识有足够的了解以及熟练的掌握。从而在脑海里形成语法分析的一般方案,根据方案一步步所要实现的目的,形成对递归下降语法分析器程序的模块划分和整体规划。 背景知识 无回溯的自上向下分析技术可用的先决条件是:无左递归和无回溯。 无左递归:既没有直接左递归,也没有间接左递归。 无回溯:对于任一非终结符号U的产生式右部x1|x2|…|xn,其对应的字的首终结符号两两不相交。 如果一个文法不含回路,也不含以ε为右部的产生式,那么可以通过执行消除文法左递归的算法消除文法的一切左递归(改写后的文法可能含有以ε为右部的产生式)。 文法的左递归消除算法: 1、将文法G的所有非终结符排序为U1,U2,…,Un; 2、For(i=1;i++;i≥n) { forj→1toi-1 把产生式Ui→Ujα替换成Ui→β1α|β2α|…|βmα; 其中:Uj→β1|β2|…|βm消除Ui产生式中的直接左递归; } 3.化简改写之后的文法,删除多余产生式。 文法的直接左递归消除公式: 直接左递归形式: U→Ux|y; 其中:x,y∈(VN∪VT)*,y不以U打头。 直接左递归的消除: U→yU‟ U‟→xU‟|ε 直接左递归的一般形式: U→Ux1|Ux2|…|Uxm|y1|y2|…|yn; 其中:xi≠ε,yi都不以U打头。 一般形式直接左递归的消除: U→y1U‟|y2U‟|…|ynU‟ U‟→x1U‟|x2U‟|…|xmU‟|ε 回溯的消除的前提是文法不得含有左递归,可提左因子来消除回溯。 程序总体设计 1、分析对象 分析算术表达式的BNF定义如下: 〈算术表达式〉→〈项〉|〈算术表达式〉+〈项〉|〈算术表达式〉-〈项〉 〈项〉→〈因式〉|〈项〉*〈因式〉|〈项〉/〈因式〉 〈因式〉→〈变量〉│(〈算术表达式〉) 〈变量〉→i 用符号表示如下: E→T|E+T|E-T T→F|T*F|T/F F→i│(E) 2.经消除直接左递归后 E→TE’ E’→+TE’|-TE’|ε T→FT’ T’→*FT’|/FT’|ε F→i|(E) 3.根据递归下降法分析法,完成上述算术表达式的分析器构造。主要完成: (1)通知外界键入算术表达式; (2)控制过程分析算术表达式; (3)根据分析结果正误,分别通知外界不同的信息。 4、程序流程图 三、实验结果 (1)输入i+i# (2)输入+i# (3)左右括号测试 (4)测试回车 (5)综合测试1 四、讨论与分析 本次试验完成了指导报告上要求的基本功能,并且本程序具有以下几种情况的排错:对(i+i这种错误,以及