




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告一一、实验名称 递归下降分析法二、实验目的1、 掌握递归下降分析法的基本原理2、 掌握递归下降分析程序的构造方法三、实验要求3、 理解递归下降语法分析方法的主要原理4、 理解递归下降分析法对文法的要求5、 熟练掌握文法变换算法四、 程序代码#include stdafx.h#include #include#include#includechar a50 ,b50,d200,e10; char ch;int n1,i1=0,flag=1,n=5;int E(); int E1(); int T(); int G(); int S(); int F();void input();void input1();void output();void main() int f,p,j=0; char x; d0=E; d1=; d2=; d3=T; d4=G; d5=#; printf(请输入字符串(长度TGt); flag=1; input(); input1(); f=T(); if (f=0) return(0); t=G(); if (t=0) return(0); else return(1); int E() int f,t; printf(E-TGt); e0=E;e1=;e2=;e3=T;e4=G;e5=#; output(); flag=1; input(); input1(); f=T(); if (f=0) return(0); t=G(); if (t=0) return(0); else return(1); int T() int f,t; printf(T-FSt); e0=T;e1=;e2=;e3=F;e4=S;e5=#; output(); flag=1; input(); input1(); f=F(); if (f=0) return(0); t=S(); if (t=0) return(0); else return(1); int G() int f; if(ch=+) bi1=ch; printf(G-+TGt); e0=G;e1=;e2=;e3=+;e4=T;e5=G;e6=#; output(); flag=0; input();input1(); ch=a+i1; f=T(); if (f=0) return(0); G(); return(1); printf(G-t); e0=G;e1=;e2=;e3=;e4=#; output(); flag=1; input();input1(); return(1);int S() int f,t; if(ch=*) bi1=ch;printf(S-*FSt); e0=S;e1=;e2=;e3=*;e4=F;e5=S;e6=#; output(); flag=0; input();input1(); ch=a+i1; f=F(); if (f=0) return(0); t=S(); if (t=0) return(0); else return(1); printf(S-t); e0=S;e1=;e2=;e3=;e4=#; output(); flag=1; ai1=ch; input();input1(); return(1);int F() int f; if(ch=() bi1=ch;printf(F-(E)t); e0=F;e1=;e2=;e3=(;e4=E;e5=);e6=#; output(); flag=0; input();input1(); ch=a+i1; f=E(); if (f=0) return(0); if(ch=) bi1=ch;printf(F-(E)t); flag=0;input();input1(); ch=a+i1; else printf(errorn); return(0); else if(ch=i) bi1=ch;printf(F-it); e0=F;e1=;e2=;e3=i;e4=#; output(); flag=0;input();input1(); ch=a+i1; else printf(errorn);return(0); return(1);void input() int j=0; for (;j=i1-flag;j+) printf(%c,bj); printf(tt); printf(%ctt,ch); void input1() int j; for (j=i1+1-flag;j;dn+2=#;n=n+2;i=n; i=i-2; while(di!=&i!=0) i=i-1; i=i+1; while(di!=e0) i=i+1; q=i; m=q;k=q; while(dm!=) m=m-1; m=m+1; while(m!=q) dn=dm;m=m+1;n=n+1; dn=#; for(j=3;ej!=#;j+) dn=ej; n=n+1; k=k+1; while(dk!=) dn=dk;n=n+1;k=k+1; dn=#;五、 实验结果实验报告二一、实验名称 LL1文法分析器二、实验内容#include#include#include#include#include#define M 22#define N 30using namespace std;using std:string;/产生式的数据结构struct generatypechar str100;int length;int left;struct generatype tableMN;/堆栈的数据结构struct stacktypestring content200;int top;struct stacktype STACK;/编码表的数据结构struct symboltypestring symbol;int id;struct symboltype bianma100;int toknum=0,fnum=0;/token表及符号表长度int tokc100,tokn100;/token表中的内容string vt30,vn22;/终结符及非终结符数组string inputs657;void init()FILE *fp1;int s=0,p=0;fp1=fopen(ftok.txt,r);while(!feof(fp1)fscanf(fp1,%d%d,&tokctoknum,&tokntoknum);toknum+;toknum=toknum-2;/初始化终结符vt0=id;vt1=;vt2=;vt3=while;vt4=if;vt5=int;vt6=func;vt7=else;vt8=,;vt9=true;vt10=(;vt11=);vt12=!;vt13=&;vt14=|;vt15=;vt16=;vt17=;vt18=;vt19=const;vt20=+;vt21=*;vt22=false;vt23=then;vt24=do;vt25=;vt26=;vt27=;vt28=;vt29=$;/$为开始符号/初始化编码表bianma0.symbol=func;bianma0.id=1;bianma1.symbol=while;bianma1.id=2;bianma2.symbol=do;bianma2.id=3;bianma3.symbol=if;bianma3.id=4;bianma4.symbol=then; bianma4.id=5;bianma5.symbol=else; bianma5.id=6;bianma6.symbol=true; bianma6.id=7;bianma7.symbol=false; bianma7.id=8;bianma8.symbol=const; bianma8.id=9;bianma9.symbol=id;bianma9.id=10;bianma10.symbol=;bianma10.id=11;bianma11.symbol=;bianma11.id=12;bianma12.symbol=;bianma12.id=13;bianma13.symbol=,;bianma13.id=14;bianma14.symbol=;bianma14.id=15;bianma15.symbol=!;bianma15.id=16;bianma16.symbol=&;bianma16.id=17;bianma17.symbol=|;bianma17.id=18;bianma18.symbol=;bianma19.id=20;bianma20.symbol=;bianma21.id=22;bianma22.symbol=;bianma22.id=23;bianma23.symbol=;bianma23.id=24;bianma24.symbol=+;bianma24.id=25;bianma25.symbol=*;bianma25.id=26;bianma26.symbol=(;bianma26.id=27;bianma27.symbol=);bianma27.id=28;bianma28.symbol=int;bianma28.id=29;/初始化非终结符vn0=K;vn1=L;vn2=A;vn3=S;vn4=U;vn5=W;vn6=C;vn7=F;vn8=T;vn9=D;vn10=G;vn11=B;vn12=H;vn13=I;vn14=J;vn15=M;vn16=N;vn17=E;vn18=P;vn19=Q;vn20=R;vn21=V;/初始化预测分析表for(s=0;sM;s+)for(p=0;pN;p+)tablesp.left=0;strcpy(tablesp.str,err);strcpy(table06.str,func id L);strcpy(table10.str,SA);strcpy(table11.str,SA);strcpy(table13.str,SA);strcpy(table14.str,SA);strcpy(table15.str,SA);strcpy(table20.str,SA);strcpy(table21.str,SA);strcpy(table22.str,#);strcpy(table23.str,SA);strcpy(table24.str,SA);strcpy(table25.str,SA);strcpy(table30.str,id =E;);strcpy(table31.str,L);strcpy(table33.str,US);strcpy(table34.str,CSF);strcpy(table35.str,TD;);strcpy(table43.str,WBdo);strcpy(table53.str,while);strcpy(table64.str,ifBthen);strcpy(table77.str,elseS);strcpy(table85.str,int);strcpy(table90.str,idG);strcpy(table108.str, idG);strcpy(table1025.str,#);strcpy(table110.str,IH);strcpy(table119.str,IH);strcpy(table1110.str,IH);strcpy(table1112.str,IH);strcpy(table1122.str,IH);strcpy(table1211.str,#);strcpy(table1214.str,|IH);strcpy(table1223.str,#);strcpy(table1224.str,#);strcpy(table130.str,MJ);strcpy(table139.str,MJ);strcpy(table1310.str,MJ);strcpy(table1312.str,MJ);strcpy(table1322.str,MJ);strcpy(table1411.str,#);strcpy(table1413.str,&MJ);strcpy(table1414.str,#);strcpy(table1423.str,#);strcpy(table1424.str,#);strcpy(table150.str,idNE);strcpy(table159.str,true);strcpy(table1510.str,(B);strcpy(table1512.str,!B);strcpy(table1522.str,false);strcpy(table1615.str,);strcpy(table1616.str,=);strcpy(table1617.str,=);strcpy(table1618.str,);strcpy(table1626.str,=);strcpy(table1627.str,=);strcpy(table1628.str,);strcpy(table170.str,QP);strcpy(table1710.str,QP);strcpy(table1719.str,QP);strcpy(table1811.str,#);strcpy(table1813.str,#);strcpy(table1814.str,#);strcpy(table1820.str,+QP);strcpy(table1823.str,#);strcpy(table1824.str,#);strcpy(table1825.str,#);strcpy(table190.str,VR);strcpy(table1910.str,VR);strcpy(table1919.str,VR);strcpy(table2011.str,#);strcpy(table2013.str,#);strcpy(table2014.str,#);strcpy(table2020.str,#);strcpy(table2021.str,*VR);strcpy(table2023.str,#);strcpy(table2024.str,#);strcpy(table2025.str,#);strcpy(table210.str,id);strcpy(table2110.str,(E);strcpy(table2119.str,const);for(s=0;sM;s+)for(p=0;pN;p+)tablesp.length=strlen(tablesp.str);fclose(fp1);return;/进栈void push(stacktype & sta,string s)sta.contentsta.top=s;sta.top+;return;/出栈void pop(stacktype & sta)sta.contentsta.top - 1=;sta.top-;return;/判断是否为非终结符int ISvn(string s)int i=0;for(i=0;iM;i+)if(s=vni)return i;return -1;/判断是否为终结符int ISvt(string s)int i=0;for(i=0;iN;i+)if(s=vti)return i;return -1;/token表中的内容存进输入数组void input()int a,b;for(a=0;a=toknum;a+)if(tokca=10)inputsa=id;elsefor(b=0;b=28;b+)if(tokca=bianmab.id)inputsa=bianmab.symbol;break;inputstoknum + 1 = $;/分析表中的内容进栈void puts(int m,int n)int i=tablemn.length;/生成式长度char str10,temp10;int j=0,num=9,t;string s = ;i=i-1;if(strcmp(tablemn.str,#)=0)cout vnm#=0)num = 9;if(isupper(tablemn.stri)s = ;s.append(tablemn.str,i,1);push(STACK, s);i-;else if(tablemn.stri = )num = 9;i-;else dostrnum=tablemn.stri;i-;num-;while(tablemn.stri!= &!isupper(tablemn.stri) & i =0);num+;j = 0;t = num;strcpy(temp,);while(t=9)tempj=strt;j+;t+;s = ;s.append(temp,0,j);push(STACK,s);cout vnmtablemn.strendl;/语法分析void analyse(void)int first=0;int k,t;string x,a;push(STACK,$);/$进栈push(STACK,K);/开始符号进栈input(); /输入字符串a=inputsfirst;/当前输入字符x=STACK.contentSTACK.top-1;/栈顶k=ISvn(x);/行值t=ISvt(a);/列值while(x!=$)/栈顶为终结符if(ISvt(x)!=-1)if(x=a)pop(STACK);x=STACK.contentSTACK.top-1;first+;a=inputsfirst;/栈顶为非终结符elsek=ISvn(x);/分析表行值t=ISvt(a);/分析表列值pop(STACK);/释放栈顶puts(k,t);/生成式进栈x=STACK.contentSTACK.top-1;return;void main(void)init();analyse();return; 1 -1 10 1 11 -1 4 -1 10 2 19 -1 10 3 18 -1 8 -1 5 -1 10 2 15 -1 10 3 25 -1 10 2 13 -1 6 -1 10 2 15 -1 10 2 26 -1 10 3 13 -1 12 -1三、实验结果实验报告三一、 实验名称 LR文法分析器二、 实验内容#include stdafx.h#include #include #include #include using namespace std ;struct code_valchar code;char val20;const char *p= /产生式SE,EE+T,ET,TT*F,TF,F(E),Fi ;const char TNT =+*()i#ETF; /LR分析表列的字符const int M9 = /LR分析表数字化,列字符+*()i#ETF用数字标识。 0, 0, 4, 0, 5,0, 1, 2, 3, /0表示出错,s4用表示。 6, 0, 0, 0, 0,99, /Acc用表示-2, 7, 0,-2, 0,-2, /r2用-2表示-4,-4, 0,-4, 0,-4, 0, 0, 4, 0, 5, 0, 8, 2, 3,-6,-6, 0,-6, 0,-6, 0, 0, 4, 0, 5, 0, 0, 9, 3, 0, 0, 4, 0, 5, 0, 0, 0,10, 6, 0, 0,11,-1, 7, 0,-1, 0,-1,-3,-3, 0,-3, 0,-3,-5,-5, 0,-5, 0,-5;int col(char); /列定位函数原型void calculat(int n ,int top );int num_val1000 = 0;char ori_val1000 = - ; /这 wvalvoid main()int state50=0; /状态栈初值char symbol50=#; /符号栈初值int top=0; /栈顶指针初值/ ofstream cout(par_r.txt); /语法分析结果输出至文件par_r.txtifstream cin(lex_r.txt); / lex_r.txt存放词法分析结果,语法分析器从该文件输入数据。struct code_val t; /结构变量,存放单词二元式。cint.codet.val; /读一单词int action;int i,j=0; /输出时使用的计数器,并非必要。coutstept状态栈t符号栈t输入符号t;coutwvaltt.valendl;/输出标题并非必要。do coutj+)t; /输出step,并非必要。 for(i=0;i=top;i+)coutstatei;coutt;/输出状态栈内容,并非必要。 for(i=0;i=top;i+)coutsymboli; /输出符号栈内容,并非必要。 couttt.codet;coutt; for(i=0;i=top;i+) coutori_vali ; /输出当前输入符号(单词种别),并非必要。 couttt; for(i=0;i=top;i+) if(num_vali
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保定市人民医院遗传性内分泌综合征基因诊断考核
- 2025海南昌江昌粮储备有限公司招聘工作人员(第3号)考前自测高频考点模拟试题附答案详解(完整版)
- 邯郸市人民医院消化道穿孔修补技术考核
- 2025广东中山大学附属口腔医院工勤事务岗工作人员(驾驶员)招聘1人模拟试卷及答案详解一套
- 2025年金华磐安县卫健事业单位公开招聘工作人员29人考前自测高频考点模拟试题及答案详解(易错题)
- 2025人民医院荧光原位杂交技术操作与报告解读考核
- 2025湖南长沙市望城区卫健人才公开引进29人模拟试卷及答案详解(典优)
- 2025年度中国农业科学院哈尔滨兽医研究所公开招聘18人考前自测高频考点模拟试题附答案详解(考试直接用)
- 北京市人民医院感染控制在输血科的落实考核试题
- 2025金华金开招商招才服务集团有限公司招聘1人考前自测高频考点模拟试题及答案详解(全优)
- (2025年标准)投资清退结清协议书
- 《钢筋桁架楼承板应用技术规程》TCECS 1069-2022
- 2025江苏银行线上笔试题库及答案
- 焊接电极管理办法
- 电焊工职业健康安全培训
- 学堂在线 军事历史-第二次世界大战史 期末考试答案
- 电梯司机培训内容大纲
- 钢制防火门维修合同范本
- 幼儿园干冰课件
- pbl教学课件模板
- 从S国税局视角剖析转让定价反避税的实践与启示
评论
0/150
提交评论