欢迎来到天天文库
浏览记录
ID:31578403
大小:2.19 MB
页数:9页
时间:2019-01-13
《西北师范大学数信学院学生报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、课程实践报告书西北师范大学数信学院学生实验报告学号:2009710301022011年09月07日系别计算机科学系专业计算机科学与技术(师范一班)班级09计师一班姓名陈建峰课程名称编译原理课程类型必修课学时数周2实验名称一.文法的输入与输出一.实验目的:1.掌握文法在计算机内的存储表示;2.输入任意的上下文无关文法;3.以四元组的形式输出Chomsky文法。二.内容和步骤:叙述本次实验的实现方法、分析、实现了哪些功能、给出一个或多个测试用例及其预期运行结果,要求能够反映本次实验的成果。1.本次实验的实现方法为:采用数组的形式实现文法在机内的存储表示。
2、2.本次试验的问题分析为:一是文法的输入形式;二是文法在计算机内的存储表示形式。3.本次试验应实现以下功能:输入一个文法的识别符号与重写规则,输出文法的四要素VN,VT,P,Z。4.测试实例:实例一:输入文法G1[E]:E::=E+T
3、TT::=T*F
4、FF::=(E)
5、i实例二:输入文法G2[Z]:Z::=aZb
6、abZ::=CSdS::=CSd
7、Cd实例三:输入文法G3[E]:E::=T
8、E+T
9、E-TT::=F
10、T*F
11、T/FF::=(E)
12、i实例四:输入文法:G4[Z]:Z::=Ab
13、cA::=Aab
14、ab::=cbD
15、dd::=bDd
16、D三
17、.源程序代码:9课程实践报告书实例一:输入文法G1[E]:E::=E+T
18、TT::=T*F
19、FF::=(E)
20、i/*IOGrammar.c*///文法的输入与输出//作者:西北师范大学-数学与信息科学学院-2009级计算机科学与技术师范一班-200971030102-陈建峰//编程时间:2011年09月07日-2011年10月12日#includecharGName[10];typedefcharSymbolT;SymbolTStartSymbol;//识别符号的类型为chartypedefstruct{SymbolTLeftSym
21、;//规则的左部符号SymbolTRightpart[20];//规则的右部符号的集合intRightLength;//规则右部符号的长度}RuleTC;RuleTCGrammarC[20];SymbolTVT[20];//终结符号的集合SymbolTVN[20];//非终结符号的集合intNVN=0,NVT=0;//给终结符号的个数和非终结符号的个数置初值typedefstruct{intLeftSymNum;//左部符号的序号intRightpartNum[20];//右部符号的序号所组成的集合intRightLength;//右部符号的长度}R
22、uleT;//规则类型RuleTGrammar[20];intRuleN;//规则的个数charStartSym;//识别符号charInput[][20]={"E::=E+T
23、T","T::=T*F
24、F",9课程实践报告书"F::=(E)
25、i"," "};//用数组存储规则intLineNumofG=3;//规则的行数为3行voidGetGrammar(){/*把暂存文法中一切符号替换为相应序号,同时存入结果文法中*//*非终结符号时序号加100*/charLeftS,Sym;intk,j,m;StartSym=GrammarC[1].LeftS
26、ym;//第一条规则的左部符号是文法的识别符号for(k=1;k<=RuleN;k++){LeftS=GrammarC[k].LeftSym;//把每一条规则的左部符号存放在LeftS中for(j=1;j<=NVN;j++)if(LeftS==VN[j]){Grammar[k].LeftSymNum=j+100;break;}for(j=1;j<=GrammarC[k].RightLength;j++){Sym=GrammarC[k].Rightpart[j];//把每一条规则的右部符号存放在Sym中for(m=1;m<=NVN;m++)if(Sym
27、==VN[m])//如果Sym中有非终结符号{Grammar[k].RightpartNum[j]=m+100;break;}if(m<=NVN)continue;for(m=1;m<=NVT;m++)9课程实践报告书if(Sym==VT[m])//如果Sym中有终结符号{Grammar[k].RightpartNum[j]=m;break;}}Grammar[k].RightLength=GrammarC[k].RightLength;}}voidstoreG()//存储文法的函数storeG(){/*把Input中的输入文法存放在过渡文法中*/i
28、ntrow,colum,k,j,m;charsym,U;RuleN=0;row=0;NVN=NVT=0;wh
此文档下载收益归作者所有