免费预览已结束,剩余5页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
_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 main() /the main functiongetChansheng
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行从业资格考试银行风险管理实务模拟试卷及答案
- 2026年注册环保工程师考试环境影响评价相关法律法规专项训练习题及答案
- 2026年电子商务师职业资格考试电子商务发展趋势与政策法规专项训练习题集及答案
- 公共卫生管理类资格考试慢性非传染性疾病专项习题及答案
- 无人机驾驶员执照考试无人机飞行安全教育与培训专项训练习题及答案
- 2026年无人机驾驶员执照考试历年真题汇编与解析及答案
- 卫生信息管理考试模拟试题及答案
- 2026年考研法学804民法学专项训练题库及答案
- 2026年大学英语四级考试听力理解专项练习题及答案
- 2026年金融风险管理师考试金融市场与金融工具专项题库及答案
- 萍乡市投发集团2026年度下半年高层次及急需紧缺人才招聘笔试模拟试题及答案解析
- 军官转业申请书
- 外研版高二英语上册(必修第三册)全册重点单词、短语、句型归纳
- ESG可持续发展治理体系
- 绿化工程隐患排查清单
- 建筑工程材料进场检验制度
- 食品安全监督抽检和风险监测工作规范培训
- 云南省住宅小区供配电设施技术标准
- 施工现场清洁安全培训课件
- 供应商报名表
- 室内装修工人培训
评论
0/150
提交评论