下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理词法分析总结器语法分析总结器实验报告编译原理词法分析总结器语法分析总结器实验报告15/15编译原理词法分析总结器语法分析总结器实验报告编译技术班级网络0802学号52姓名叶晨舟指导老师朱玉全2021年7月4日一、目的编译技术是理论与实践并重的课程,而其实验课要综合运用一、二年级所学的多门课程的内容,用来达成一个小型编译程序。进而牢固和增强对词法剖析、语法剖析、语义剖析、代码生成和报错办理等理论的认识和理解;培育学生对完好系统的独立剖析和设计的能力,进一步培育学生的独立编程能力。二、任务及要求根本要求:1.词法剖析器产生下述小语言的单词序列这个小语言的全部的单词符号,以及它们的种别编码和内部值以下表:单词符号种别编码助记符内码值DIM1$DIM-IF2$IF-DO3$DO-STOP4$STOP-END5$END-表记符6$ID-常数〔整〕7$INT内部字符串=8$ASSIGN标准二进形式+9$PLUS-*10$STAR-11$POWER-,12$COMMA-〔13$LPAR-〕14$RPAR-关于这个小语言,有几点重要的限制:第一,全部的重点字〔如IF﹑WHILE等〕都是“保留字〞。所谓的保留字的意思是,用户不得使用它们作为自己定义的标示符。比如,下边的写法是绝对严禁的:IF〔5〕=x其次,因为把重点字作为保留字,故能够把重点字作为一类特别标示符来处理。也就是说,关于重点字不专设对应的变换图。但把它们〔及其种别编码〕预先安排在一张表格中〔此表叫作保留字表〕。当变换图辨别出一个表记符时,就去核对这张表,确立它能否为一个重点字。再次,假如重点字、表记符和常数之间没有确立的运算符或界符作间隔,那么一定起码用一个空白符作间隔〔此时,空白符不再是完好没存心义的了〕。比如,一个条件语句应写为IFi>0i=1;而绝对不要写成IFi>0i=1;因为关于后者,我们的剖析器将无条件地将IFI当作一个表记符。这个小语言的单词符号的状态变换图,以以下图:2.语法剖析器能辨别由加+减-乘*除/乘方^括号〔〕操作数所构成的算术表达式,其文法以下:E→E+T|E-T|TT→T*F|T/F|FF→P^F|Pp→(E)|i使用的算法能够是:展望剖析法;递归降落剖析法;算符优先剖析法;LR剖析法等。3.中间代码生成器产生上述算术表达式的中间代码〔四元式序列〕三、实现过程给出各题目的详尽算法描绘,数据构造和函数说明,流程图。1、词法剖析器的流程图开始输入源文件路径否路径能否有效是打开源文件初始化文件指针辨别指针内容文件结束?是结束否是空格,空白或换否是字母吗否是数字吗否是界符吗行吗是是是将字符参加字符数将字符加入字符数跳过该字符组Word[]将字符组Word[]参加字符数组指向下一字符指向下一字符是Word[]指向下一字符是是字母惑数字辨别指针内容输出word吗为界符回退否是数字吗将word与重点字表key进行匹配否输出word为否般配?输出word指向下一字符一般标示符为常数是输出word为重点字
将字符参加字符数否组Word[]将字符参加字符数组Word[]输出Word内容为不可辨别2、语法剖析器主程序图3、中间代码生成器流程图:四、源程序词法剖析器:#include<>#include<>#include<iostream>usingnamespacestd;typedefstructtable,S1)==0||strcmp(M[p][q].m,S2)==0);printf("%15c-->%s\n",X,str0);;getchar();}}opt3:printf("
请输入要剖析的字符串,且以
#结束:\n");analyse(Vn,Vt);printf("printf("1:printf("2:printf("0:
请选择*\n");输入字符串\n");输入新剖析表\n");退出\n");printf("*\n");opt4:cin>>select;switch(select){case'1':{gotoopt3;break;}case'2':{gotoopt2;}case'0':{break;}default:{printf("输入错误!请从头选择:");gotoopt4;break;}}return0;}运转结果:语法剖析器源程序:#include<>#include<iostream>usingnamespacestd;charprog[100],token[10];charch;intsyn,p,m=0,n,row,sum=0;char*rwtab[20]={"dim","if","do","stop","end","and","begin","bool","case","char","false","for","int","not","or","set","then","true","until","while"};voidscaner(){for(n=0;n<9;n++)token[n]=NULL;ch=prog[p++];while(ch==''){ch=prog[p];p++;}if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){m=0;while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){token[m++]=ch;ch=prog[p++];}token[m++]='\0';p--;syn=21;for(n=0;n<20;n++){if(strcmp(token,rwtab[n])==0){syn=n+1;break;}}}elseif((ch>='0'&&ch<='9')){{sum=0;while((ch>='0'&&ch<='9')){sum=sum*10+ch-'0';ch=prog[p++];}}p--;syn=7+15;if(sum>32767)syn=-1;}elseswitch(ch){case'=':syn=8+15;token[0]=ch;break;case'+':syn=9+15;token[0]=ch;break;case'*':m=0;token[m++]=ch;ch=prog[p++];if(ch=='*'){syn=11+15;token[m++]=ch;}else{syn=10+15;p--;}break;case',':syn=12+15;token[0]=ch;break;case'(':syn=13+15;token[0]=ch;break;case')':syn=14+15;token[0]=ch;break;case'#':syn=0;token[0]=ch;break;case'<':m=0;token[m++]=ch;ch=prog[p++];if(ch=='>'){syn=17+15;token[m++]=ch;}elseif(ch=='='){syn=16+15;token[m++]=ch;}else{syn=15+15;p--;}break;case'>':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=19+15;token[m++]=ch;}else{syn=18+15;p--;}break;case':':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=21+15;token[m++]=ch;}else{syn=20+15;p--;}break;case'/':syn=22+15;token[0]=ch;break;case'-':syn=23+15;token[0]=ch;break;case';':syn=24+15;token[0]=ch;break;default:syn=-1;break;}}voidmain(){p=0;row=1;cout<<endl<<endl<<endl;cout<<"*小型词法剖析器"<<endl<<endl;cout<<"请输入一段程序〔以#结束〕:";do{(ch);prog[p++]=ch;}while(ch!='#');p=0;cout<<endl<<"
词法
剖析结果如
下*"<<endl;cout<<"
种别编码
自己值
"<<endl;do{scaner();switch(syn){case22:cout<<"
("<<syn<<"
,"<<sum<<")"<<endl;break;case-1:cout<<
"
Error
inrow"<<row<<"!"<<endl;break;default:cout<<"
("<<syn<<"
,"<<token<<")"<<endl;break;}}while(syn!=0);}运转结果:}中间代码生成器源程序:表达式生成四元式递归子程序法#include<string>#include<iostream>usingnamespacestd;#defineDEFAULT_SIZE100charEMachine(charw);<<endl;exit(1);}}voidstack::push(conststring&item)<<endl;return;}top++;stacka[top]=item;}stringstack::pop(void)<<endl;exit(1);}stringitem=stacka[top];top--;returnitem;}stringstack::gettop(void)const<<endl;exit(1);}returnstacka[top];}staticstackwordStack;//符号栈staticintnoOfQuet=0;//静态四元式个数记录staticintnoOfT=1;//静态状态个数记录voidmain(){//主函数charyesOrNo;//进行一个循环操作控制do{cout<<"请输入算术表达式:"<<endl;noOfT=1;//每次结束咨询ZMachine();cout<<endl<<"Continue?YesorNot:";cin>>yesOrNo;//输入“Y〞那么持续}while(yesOrNo=='y');//否那么程序结束}boolZMachine(){//Z自动机charw;cin>>w;w=EMachine(w);if(w=='#'){
//
//
调用E自动机碰到“#〞那么结束returntrue;}else{returnfalse;}}charEMachine(charw){//E自动机stringoperate,a,b,c;stringstate[5];w=TMachine(w);//调用T自动机while(w=='+'||w=='-'){//是加或减符号operate=w;cin>>w;//读入下一字符w=TMachine(w);//调用T自动机b=();//字符栈弹出a=();//两个操作字符cout<<"(\""<<operate<<"\","<<a<<","<<b<<",t"<<noOfT<<")"<<endl;c="t"+intToString(noOfT);//输出四元式(c);//新状态压栈noOfT++;//状态计数加一}returnw;}charTMachine(charw){stringoperate,a,b,c;stringstate[5];w=FMachine(w);//调用F自动机while(w=='*'||w=='/'){//是乘除号operate=w;cin>>w;//读取下一字符w=FMachine(w);//调用F自动机b=();//符号栈弹出a=();//两个操作字符cout<<"(\""<<operate<<"\","<<a<<","<<b<<",t"<<noOfT<<")"<<endl;c="t"+intToString(noOfT);//
输出四元式(c);
//新状态压栈noOfT++;
//状态计数加
1}returnw;}charFMachine(charw){stringtheWord;if(w>='a'&&w<='z'||w>='A'&&w<='Z'){theWord=w;//(theWord);//那么压栈
//F
自动机目前字符是字母}elseif(w=='('){//是左括号cin>>w;//那么读取下一字符w=EMachine(w);//调用E自动机if(w!=')'){//不是右括号那么输入有误,报错cerr<<"theinputiswrong!"<<endl;exit(0);}}else{//否那么有误,报错cerr<<"theinputiswrong!"<<endl;exit(0);}cin>>w;//读取下一字符returnw;}stringintToString(inta){
//
整形变字符串形函数stringd;charb
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黔东南市重点中学2025-2026学年初三5月中考模拟考试(一)英语试题含解析
- 河北省唐山市二中学2026届初三下学期3月一模考试语文试题含解析
- 四川省眉山市东坡区东坡区东坡中学2026年初三第二次综合练习英语试题含解析
- 山东省岱岳区马庄中学2026届初三下学期第一次综合检测试题英语试题含解析
- 湖北省咸宁市市级名校2025-2026学年普通高中初三第一次诊断性测试英语试题含解析
- 江苏兴化市顾庄学区三校2025-2026学年高中毕业生学习质量检测试题英语试题含解析
- Clark安适护理模式在终末期肾病中的应用
- 土地合作种植合同
- 2026年研发人员劳动合同(1篇)
- 胃癌护理教案
- 宁波华翔首次覆盖报告:全面拥抱人形机器人产业全球PEEK龙头潜力初显
- 2026山东出版集团有限公司山东出版传媒股份有限公司招聘193人备考题库及答案详解(基础+提升)
- 职业危害事故处置及报告全流程培训
- 中小医院医用布草洗涤服务方案投标文件(技术方案)
- 10 石蜂 课件 2026统编版三年级语文下册
- 《铁路货运技术》课件-项目04 任务三 常见典型货物装载加固
- 躁狂症的课件
- 发票赔偿协议书
- 蜂王浆课件教学课件
- 水源热泵施工方案
- Ansys2025全球仿真大会:Ansys CFD 2025新功能介绍
评论
0/150
提交评论