编译原理--实验报告2n

编译原理--实验报告2n

ID:35235187

大小:128.82 KB

页数:5页

时间:2019-03-22

编译原理--实验报告2n_第1页
编译原理--实验报告2n_第2页
编译原理--实验报告2n_第3页
编译原理--实验报告2n_第4页
编译原理--实验报告2n_第5页
资源描述:

《编译原理--实验报告2n》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、大学计算机科学与技术学院实验报告计算机基础实验教学中心编制成绩指导教师(签字)(存档)——————————————————————————————————————————————★实验课程名称:编译原理课程设计★实验项目:递规下降法语法分析程序开发★实验仪器:机房计算机★实验要求:1、理解递归下降语法分析方法的主要原理2、理解递归下降分析法对文法的要求3、掌握Predict集合的求法4、完成递归下降法的语法分析程序★实验步骤、分析设计与结果:一、实验步骤:1.求SNL文法中每个产生式Predict集合Predict(Aàβ)=First(β),          当eÏFirst(β)=(Fi

2、rst(β)-{e})∪Follow(A),当eÎFirst(β)根据Predict集合的定义求SNL的文法中每个产生式的Predict集合,判断是否满足递归下降法分析条件,若不满足用消除左递归和消除公共前缀等文法等价变化算法对文法进行变换,使其满足递归下降法的要求。对此,实验课本已经求解完全所有的SNL文法的Predict集。参照P61页。2.构造递归下降语法分析程序(1)首先,定义了语法数的节点结构,这里只列出了与语法分析有关的部分,和语义分析相关的部分,等到语义分析时再进行补充。typedefstructtreeNode{structtreeNode*child[3];/*子节点指针,这

3、里只需要3个即可*/structtreeNode*sibling;/*兄弟节点指针*/intlineno;/*源代码行号*/NodeKindnodekind;/*节点类型*/union{DecKinddec;5StmtKindstmt;ExpKindexp;}kind;/*具体类型,定义为联合体,具体分析*/intidnum;/*相同类型的变量个数,因为可能会有多个个*/charname[10][10];/*标识符的名称*/}TreeNode;(2)这里采用了递归子程序方法进行语法分析,对文法中的每个非终极符号按其产生式结构产生相应的语法分析子程序,完成相应的识别任务。其中终结符产生匹配命令,

4、非终结符则产生调用命令。每次进入子程序之前都预先读入一个单词。因为使用了递归下降方法,所以程序结构和层次清晰明了,易于手工实现,且时空效率较高。实际的语法分析工作,从调用总程序的分析子程序开始,根据产生式进行递归调用各个分析子程序。这里我们以::=PROGRAMProgramName为例,产生式左边即可写为函数名,该产生式的Predict集为PROGRAM,所以,函数可以写为TreeNode*programHead(void){TreeNode*t=newPheadNode();match(PROGRAM);if((t!=NULL)&&(token.Lex==ID))

5、{t->lineno=0;strcpy(t->name[0],token.Sem);}match(ID);//ProgramName的预测符只是ID,所以直接写了returnt;}//这里的报错部分写在match函数中3、分工部分首先,大家先对课本的递归下降法的部分进行复习,集体进行讨论,研读附带的代码,之后进行分工编写,完成后进行整合调试。丁主要完成程序的可视化和图形文件接口方面的工作,最后将各个函数整合调试。张主要对完成的程序修改bug,添加错误处理部分,最后编写报告。樊主要研读和完成大量的递归处理函数。二、实验结果这里重点说明一下我们小组对错误的处理情况。因为采用了递归下降法进行语法分析

6、,所以5在编程的过程中要更注意各个层次之间的调用关系,当出现错误时,如何确定错误的类型和错误的继续向下传播成了重点需要解决的问题。经过小组探讨,我们最后采用了分解整体的方法。将整个程序代码分为三个部分:程序头programhead,程序声明delcarePart,程序体programbody。在每个部分若出现错误,便进行报错,并输出相应的提示信息。为了防止错误的继续传播,我们只对这三个部分的头一个错误进行报错,之后便跳出该部分(主要通过之前定义的一个全局变量进行记录信息),通过搜索下个部分的predict集的字符,进行下一部分的语法分析。这样最多只会出现三个错误(其实这样虽然错误的提示信息少了

7、,但是效率也提高了,因为对之后的语句并不进行语法的分析),相对来说也较符合编程者的习惯,即一般只关心第一个出现的错误。(1)正确的展示结果:图中可以看到,在控制信息模块里,能够正确的输出语法树的信息。(2)只是出现一个错误当我们将程序头部分去掉st,导致不完整时,则会出现提示语法错误信息一条。5(3)出现多个错误之后我们在声明部分添加两个错误,程序体部分也添加两个错误,发现,错误信息只是提示这个两

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。