文法的化简和改造-----编译原理_第1页
文法的化简和改造-----编译原理_第2页
文法的化简和改造-----编译原理_第3页
文法的化简和改造-----编译原理_第4页
文法的化简和改造-----编译原理_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深圳大学实验报告课程名称:编译原理实验名称:文法的化简和改造姓名:学号:班级:实验日期:第6周、第8周实验课一。实验目的1)编写文法的化简和改造程序;二。实验环境1)硬件环境:计算机;2)软件环境:C/C编译器;三。实验内容1.用碳/碳语言编写方法的化简和改造程序,实现以下功能之一(如实现两个功能,则满分为110分;如实现三个功能,则满分为120分):(1)无用符号和无用产生式的删除,参考课本中算法2.1和算法2.2。(2) -产生式的消除,参考课本中算法2.3、2.4和2.5。(3)单产生式的消除,参考课本中算法2.6。从文件或终端中读入文法,并将化简和改造后的文法输出到另一文件或终端中。文法的表示如下:S-aS西南南美联盟U-aV-bVV-acW-aW用空字符表示用大写的拉丁字母表示文法的非终结符号,用小写的拉丁字母表示文法的终结符号,每个产生式占一行,第一个产生式的左部为开始符号。在下面写出代码,并用课本2.4节中相应的例子进行验证,提供相应的截图(对窗口截图时先同时按中高音和prtscn键,再按ctrl v粘贴)答:课本中的结果为:美国会计准则而在实验中输出结果为:S-aS S-a下面是书本中算法的主要代码:/算法21岁,算法22用于消除无用产生式/算法2.1void algorithm21()符号集VN1生产集P1;结构Lnode *left=空;结构代码*右=空;int标志=0,add=1;下一个=空;P1。下一个=空;P1。num=0;/第一步左=生产,下一个;而(左)标志=1;右=左-右;同时(右)if(strcmp(右名)=0)休息;如果(is设置(终止符,右名)=0)标志=0。休息;right=right-next;如果(标志=1)/如果原来不存在则添加如果(IsInSet(VN1,左名)=0)AddSym(VN1,左名);left=left-next;/第二步添加=1;同时(添加)add=0;左=生产,下一个;而(左)标志=1;右=左-右;同时(右)if(strcmp(右名)=0)休息;如果(IsInSet(终止符,右名)=0) (IsInSet(VN1,右名)=0)标志=0。休息;right=right-next;如果(标志=1)/如果原来不存在则添加如果(IsInSet(VN1,左名)=0)AddSym(VN1,左名);添加=1;left=left-next;/第三步左=生产,下一个;而(左)标志=1;右=左-右;同时(右)if(strcmp(右名)=0)休息;如果(IsInSet(终止符,右名)=0) (IsInSet(VN1,右名)=0)标志=0。休息;right=right-next;如果(标志=1)地址(P1,左);left=left-next;/转移到系统链表集合/删除原有的透明生产集(生产);销毁符号集(非终结符);/转移生产数量=P1数量;生产下一个=P1下一个;下一个=VN1,下一个;/算法2.2void algorithm22()符号集VN1生产集P1;结构Lnode *left=空;结构代码*右=空;int标志=0,add=1;下一个=空;下一个=空;P1。下一个=空;P1。num=0;/开始符号放入VN1添加符号(VN1,开始);/第一步添加=1;同时(添加)add=0;左=生产,下一个;而(左)如果(IsInSet(VN1,左名)=1)右=左-右;同时(右)如果(is设置(非终结符,右名)=1)add=AddSym(VN1,右名);否则如果(IsInSet(终止符,右名)=1 | strcmp(右名)=0)添加=添加符号(VT1,右名);right=right-next;left=left-next;/第二步左=生产,下一个;而(左)标志=1;如果(IsInSet(VN1,左名)=1)右=左-右;同时(右)如果(IsInSet(VN1,右名)=0 IsInSet(VT1,右名)=0)标志=0。休息;right=right-next;如果(标志=1)地址(P1,左);left=left-next;/转移到系统链表集合/删除原有的透明生产集(生产);销毁符号集(非终结符);销毁符号集(终结器);/转移生产数量=P1数量;生产下一个=P1下一个;下一个=VN1,下一个;终结器,下一个=VT1,下一个;/算法23岁,算法24用于消除-产生式/算法2.3void algorithm23()结构Lnode *left=空;结构代码*右=空;int标志=0,add=1;W1。下一个=空;W2 .下一个=空;/第一步左=生产,下一个;而(左)右=左-右;/如果是空产生式如果(右下一个=空)字符串化学机械抛光(右名称 )=0)添加符号(W1、左名);left=left-next;/第二步添加=1;同时(添加)add=0;左=生产,下一个;而(左)标志=1;右=左-右;同时(右)如果(IsInSet(W1,右名)=0)标志=0。休息;right=right-next;如果(标志=1)添加=添加符号(W1、左名);left=left-next;/算法23结束,等待算法2.4/算法2.4void algorithm24()生产集P1;结构符号*符号=空;结构Lnode *left=NULL,*ltmp=NULL,* tmpNew=NULL结构代码*右=空,*rtmp=空;int标志=0,add=1;P1。下一个=空;P1。num=0;/第一步sym=非终结符。下一步同时(sym)if(IsInSet(W1,sym-name)=0)添加符号(W2,符号名);sym=sym-next;/第二步左=生产,下一个;而(左)tmpNew=(struct Lnode *)malloc(sizeof(struct Lnode);tmpNew-name=(char *)malloc(strlen(left-name)1);strcpy(tmpNew-name,left-name);tmp新-下一个=空;tmp新-右=空;对于lgo24(P1,左,左-右,战区导弹防御系统);left=left-next;/转移透明生产集(生产);生产下一个=P1下一个;生产数量=P1数量;/递归添加产生式AlGo 24无效(生产集*集,结构代码*左,结构代码*尾,结构代码*p)结构Lnode *ltmp=空,*new1=空,* new2=空结构Rnode

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论