文法的化简和改造.doc_第1页
文法的化简和改造.doc_第2页
文法的化简和改造.doc_第3页
文法的化简和改造.doc_第4页
文法的化简和改造.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

XXX 大 学实 验 报 告课程名称:编译原理实验名称:文法的化简和改造姓 名:XXXX学 号:XXXX班 级:XXXX实验日期:XXXX一.实验目的1) 编写文法的化简和改造程序;二.实验环境1) 硬件环境:计算机;2) 软件环境:C/C+编译器;三.实验内容1. 用C/C+语言编写方法的化简和改造程序,实现以下功能之一(如实现两个功能,则满分为110分;如实现三个功能,则满分为120分):(1) 无用符号和无用产生式的删除,参考课本中算法2.1和算法2.2。(2) -产生式的消除,参考课本中算法2.3、2.4和2.5。(3) 单产生式的消除,参考课本中算法2.6。从文件或终端中读入文法,并将化简和改造后的文法输出到另一文件或终端中。文法的表示如下:S-aSS-WS-UU-aV-bVV-acW-aW用空字符表示用大写的拉丁字母表示文法的非终结符号,用小写的拉丁字母表示文法的终结符号,每个产生式占一行,第一个产生式的左部为开始符号。在下面写出代码,并用课本2.4节中相应的例子进行验证,提供相应的截图(对窗口截图时先同时按alt和prtscn键,再按ctrl+v粘贴)答::代码:/* 单产生式的消除 */#include #include using namespace std;typedef struct char left; char right10; chanshengshi;typedef struct head chanshengshi data; struct head* next; Head;struct vn char ch; vn *next; ;vn Vn; /the storage to store not-ending characterHead init; /the storage to store the chanshengshiHead solution; /the storage to store the solution of chanshengshibool isBigCase(char ch) / whether the character ch is big case or small case ? if(ch=A&ch=Z) return true;else return false;void getChanshengshi() /input chanshengshicoutinput the Chanshengshi : (end with double enter key) temp.left;cin.get(); cin.get();cintemp.right;if(isBigCase(temp.left)=false) /ensure the chanshengshi is not illegalcoutIm sorry to tell you thatendl;coutthe left of the chanshengshi must be BIG-CASE characterendl;coutplease input it again! next=new Head;p=p-next;p-data=temp;p-next=NULL;if(cin.get()=n)if(cin.peek()=n) break;while(true);bool belongToVn(char ch)vn *p=&Vn;while(p-next!=NULL) p=p-next; if(p-ch=ch) return true; return false;void getVn()Vn.next=NULL;vn *q=&Vn;Head *p=&init;while(p-next!=NULL)p=p-next;if(belongToVn(p-data.left) continue;q-next=new vn;q=q-next;q-ch=p-data.left;q-next=NULL;void displayInit()Head *p=&init;while(p-next!=NULL)p=p-next;coutdata).left);cout;coutdata.right;coutnext!=NULL)p=p-next;coutch;coutnext!=NULL) q=q-next; if(q-data.left=ch) /如果不是单产生式的话 if( strlen(q-data.right)1 | !isBigCase(q-data).right0) if(p=NULL) p=new Head; h=p; else p-next=new Head; p=p-next; p-data.left=q-data.left; strcpy(p-data.right,q-data.right); p-next=NULL; else /是单产生式的话 p-next=makeFrom(q-data.right0); while(p-next!=NULL) p=p-next; p-data.left=ch; return h;void operate() /generate the chanshengshi that answer with the conditionsHead *r=&solution;solution.next=NULL;vn *p=&Vn;coutendlsolution:next!=NULL)p=p-next; /not-ending characterr-next=makeFrom(p-ch);while(r-next!=NULL) r=r-next; r=&solution; do r=r-next; coutdata.leftdata.rightnext!=NULL);int

温馨提示

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

评论

0/150

提交评论