




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验报告学号专业计算机班级姓名课程名称编译原理课程类型必修课实验名称实验一、文法存储及输出实验目的: 1.掌握文法在计算机内的存储表示; 2.输入任意的上下文无关文法;3.以四元组的形式输出Chomsky 文实验内容:叙述本次实验的实现方法、分析、实现了哪些功能、给出一个或多个测试用例及其预期运行结果,要求能够反映本次实验的成果。1.本次实验的实现方法为:采用数组的形式实现文法在机内的存储表示。2.本次试验的问题分析为:一是文法的输入形式;二是文法在计算机内的存储表示形式。3.本次试验应实现以下功能:输入一个文法的识别符号与重写规则,输出文法的四要素VN,VT,P,Z
2、。4.测试实例:实例:输入文法GE:E:=E+T|T T:=T*F|FF:=(E)|i实验代码如下:#include <stdio.h> char GName10; typedef char SymbolT; SymbolT StartSymbol; typedef struct SymbolT LeftSym; SymbolT Rightpart20; int RightLength; RuleTC; RuleTC GrammarC20; SymbolT VT20; SymbolT VN20; int NVN=0,NVT=0; typedef struct int LeftSym
3、Num; int RightpartNum20; int RightLength; RuleT; RuleT Grammar20; int RuleN; char StartSym; char Input 20= "E:=E+T|T", "T:=T*F|F", "F:=(E)|i", "0" ; int LineNumofG=3; void GetGrammar() char LeftS,Sym; int k,j,m; StartSym=GrammarC1.LeftSym; for(k=1; k<=RuleN
4、; k+) LeftS=GrammarCk.LeftSym; for(j=1; j<=NVN; j+) if(LeftS=VNj) Grammark.LeftSymNum=j+100; break; for(j=1; j<=GrammarCk.RightLength; j+) Sym=GrammarCk.Rightpartj; for(m=1; m<=NVN; m+)if(Sym=VNm) Grammark.RightpartNumj=m+100;break; if(m<=NVN) continue; for(m=1; m<=NVT; m+) if(Sym=VTm
5、) Grammark.RightpartNumj=m; break; Grammark.RightLength=GrammarCk.RightLength; void storeG( ) int row,colum, k,j,m; char sym,U; RuleN=0; row=0; NVN=NVT=0; while(row<LineNumofG) colum=0; sym=Inputrowcolum; for(k=1; k<=NVN; k+) if(sym=VNk) break; if(k>NVN) VN+NVN=sym; GrammarC+RuleN.LeftSym=s
6、ym; colum=colum+4; j=0; while(Inputrowcolum!='0') sym=Inputrowcolum+; if(sym='|') GrammarCRuleN.RightLength=j;U=GrammarCRuleN.LeftSym; RuleN=RuleN+1; GrammarCRuleN.LeftSym=U; j=0; continue; j=j+1; GrammarCRuleN.Rightpartj=sym; for(k=1;k<=NVT; k+)if( sym=VTk) break;if(k>NVT)VT+N
7、VT=sym; GrammarCRuleN.RightLength=j; row=row+1; for( m=1; m<=NVT; m+) for(k=1; k<=NVN; k+) if(VTm=VNk) VTm=' ' break; for(m=1;m<=NVT; m+) if(VTm=' ') for(j=m+1; j<=NVT; j+) VTj-1=VTj; NVT=NVT-1; if(VTm=' ') m=m-1; continue; GetGrammar( ); DispG( ) int k,j,m; print
8、f("n 文法的识别符号 Z 为:%cn", StartSym); printf("重写规则集 P 为:n"); for(k=1; k<=RuleN; k+) printf("%8c%c:=",' ', VNGrammark.LeftSymNum-100); for(j=1; j<=Grammark.RightLength; j+) m=Grammark.RightpartNumj; if(m<100) printf("%c",VTm); else printf("%c&
9、quot;,VNm-100); printf("n"); printf("文法的非终结符号集为:VN= "); for(k=1; k<=NVN-1; k+) printf("%c", VNk); printf(","); printf("%c n",VNNVN); printf("文法的终结符号集为:VT= "); for(k=1; k<=NVT-1; k+) printf("%c", VTk); printf(",");
10、printf("%c n",VTNVT); void main( ) char c='Y' int j; printf("n 文法重写规则:n"); for(j=0; j<LineNumofG; j+) printf("%sn",Inputj); printf("重新输入文法的重写规则?(Y/N): "); scanf("%c",&c); if(c='Y' | c='y') printf("输入行数(一个规则一行):"); scanf("%d",&LineNumofG); for(j=0; j<LineNumofG; j+) scanf("%s",Inputj); storeG( ); DispG( ); 实验结果:实例一:输入文法GE:E:=E+T|T T:=T*F|FF:=(E)|i实例二:输入文法G2Z:Z:=aZb|ab Z:=CSd S:=CSd|Cd实例三:输入文法G3E:E:=T|E+T|E-TT:=F|T*F|T/F F:=(E)|i实例四:输入文法:G4Z:Z:=Ab|c A:=Aa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 突发公共卫生事件护理
- 智能制造印刷技术指南
- 化学工业废物处理规定
- 物业管理遗失物品处理方案
- 冒险卡通动漫报告
- 2025新疆兵团粮安储备粮管理有限责任公司招聘19人笔试含答案
- 2025西安光环电子科技有限公司招聘(3-5人)笔试含答案
- 2025年铁岭银行见习生招聘50人笔试含答案
- 企业规章制度的协同与协作
- 2025年事业单位工勤技能-福建-福建计算机信息处理员三级高级历年参考题库含答案解析
- 区妇联家庭教育工作的调研报告
- 劳保用品发放表格及管理
- 江苏省盐城市各县区乡镇行政村村庄村名居民村民委员会明细
- 税法(第三版)项目一任务三增值税应纳税额的计算
- Q∕SY 01004-2016 气田水回注技术规范
- TSG Z8002-2022 特种设备检验人员考核规则
- 非标自动化设备公司绩效与薪酬管理方案(范文)
- 2019年广东公务员考试行测真题及答案(县级)
- 电工常用工具(课堂PPT)
- 虹桥高铁外墙顾问建议ppt课件
- (高清版)外墙外保温工程技术标准JGJ144-2019
评论
0/150
提交评论