




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告学院(系)名称:计算机与通信工程学院姓名学号专业班级实验项目实验二:语法分析课程名称编译原理课程代码实验时间2016年4月21日 第1、2节2016年4月26日 第3、4节2016年4月28日 第1、2节实验地点计算机软件实验室7-220批改意见成绩教师签字: 实验内容: 可选择LL1分析法、算符优先分析法、LR分析法之一,实现如下表达式文法的语法分析器:(1)EE+T | E-T | T(2)TT*F | T/F | F(3)FPF | P(4)P(E) | i实验目的:1掌握语法分析的基本概念和基本方法;2正确理解LL1分析法、算符优先分析法、LR分析法的设计与使用方法。实验要求:
2、1按要求设计实现能识别上述文法所表示语言的语法分析器,并要求输出全部分析过程;2要求详细描述所选分析方法针对上述文法的分析表构造过程;3完成对所设计语法分析器的功能测试,并给出测试数据和实验结果;4为增加程序可读性,请在程序中进行适当注释说明;5整理上机步骤,总结经验和体会;6认真完成并按时提交实验报告。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】使用的是LL(1)分析法,其分析表的构造方法和构造过程如下:实验源代码:#include#include#define size 1024using namespace std;int getLength(char strsize)in
3、t i=0;while(stri!=0)i+;return i; int getstringLength(string str)int i=0;while(stri!=0)i+;return i; char gettop(char stacksize,int top)if(stacktop!=0)return stacktop;elsereturn #;void popstack(char *stack,int *pointer)int p=*pointer;couttPopup stackp out!;stackp=0;(*pointer)-;void pushstack(char *sta
4、ck,int *pointer,string str)int i=0;int length=getstringLength(str);cout push str=0;i-)(*pointer)+;stack(*pointer)=stri;int getcol(char top)switch(top)case +:return 0;case -:return 1;case *:return 2;case /:return 3;case :return 4;case ):return 5;case #:return 6;case (:return 7;case i:return 8;default
5、:coutError! This character string is not this grammers sentence.endl;return -1;void show(char strsize,int index)int length=getLength(str);if(index!=-1)coutt;for(int i=index+1;ilength;i+)coutstri;int main()char strsize;/接受字符串的数组 char stacksize;/进行比对的栈 int pointer=-1;/指向栈顶的指针 int length=0;/记录字符串长度 int
6、 index=0;/记录输入字符串 char top;int i,j;/i表示行,j表示列 string production;bool match=false;string table79=/ + - * / ) # ( i/* E */error, error, error, error, error, error, error, TX, TX,/* X */+TX, -TX, error, error, error, empty, empty, error, error,/* T */error,error,error,error,error,error,error,FY,FY,/* Y
7、 */empty,empty,*FY,/FY,error,empty,empty,error,error,/* F */error,error,error,error,error,error,error,PZ,PZ,/* Z */empty,empty,empty,empty,F,empty,empty,error,error,/* P */error,error,error,error,error,error,error,(E),i;coutstr;length=getLength(str);strlength=#;strlength+1=0;/coutlengthendl;/couttab
8、le00; /已验证可以实现 cout符号栈t当前符号t输入串tttt说明endl; pointer+;stackpointer=#;pointer+;stackpointer=E;/初始化栈,使栈底是 #E while(strindex!=0)top=gettop(stack,pointer);switch(top)case E:i=0;/第1行 j=getcol(strindex);production=tableij;if(production=error)coutError! This character string is not this grammers sentence.end
9、l;return 0;else if(production=empty)coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);else/说明可以进行分解非终结符 coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production); break;case X:i=1;/第2行 j=getcol(strindex);production=ta
10、bleij;if(production=error)coutError! This character string is not this grammers sentence.endl;return 0;else if(production=empty)coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);else/说明可以进行分解非终结符 coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);
11、pushstack(stack,&pointer,production); break;case T:i=2;/第3行 j=getcol(strindex);production=tableij;if(production=error)coutError! This character string is not this grammers sentence.endl;return 0;else if(production=empty)coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);els
12、e/说明可以进行分解非终结符 coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production); break;case Y:i=3;/第4行 j=getcol(strindex);production=tableij;if(production=error)coutError! This character string is not this grammers sentence.endl;return 0;else if(produ
13、ction=empty)coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);else/说明可以进行分解非终结符 coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production); break;case F:i=4;/第5行 j=getcol(strindex);production=tableij;if(production=erro
14、r)coutError! This character string is not this grammers sentence.endl;return 0;else if(production=empty)coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);else/说明可以进行分解非终结符 coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer
15、,production); break;case Z:i=5;/第6行 j=getcol(strindex);production=tableij;if(production=error)coutError! This character string is not this grammers sentence.endl;return 0;else if(production=empty)coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);else/说明可以进行分解非终结符 coutn;sho
16、w(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production); break;case P:i=6;/第7行 j=getcol(strindex);production=tableij;if(production=error)coutError! This character string is not this grammers sentence.endl;return 0;else if(production=empty)coutn;show(s
17、tack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);else/说明可以进行分解非终结符 coutn;show(stack,-1);couttstrindext;show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production); break;case +:switch(strindex)case +:coutn;show(stack,-1);couttstrindext;show(str,index);couttMatch + !
18、 ;/ Popup + and next char in.endl;popstack(stack,&pointer);match=true;break;default:coutError! This character string is not this grammers sentence.endl;return 0;break;case -:switch(strindex)case -:coutn;show(stack,-1);couttstrindext;show(str,index);couttMatch - ! ;/Popup - and next char in.endl;pops
19、tack(stack,&pointer);match=true;break;default:coutError! This character string is not this grammers sentence.endl;return 0;break;case *:switch(strindex)case *:coutn;show(stack,-1);couttstrindext;show(str,index);couttMatch * ! ;/Popup * and next char in.endl;popstack(stack,&pointer);match=true;break;
20、default:coutError! This character string is not this grammers sentence.endl;return 0;break;case /:switch(strindex)case /:coutn;show(stack,-1);couttstrindext;show(str,index);couttMatch / ! ;/Popup / and next char in.endl;popstack(stack,&pointer);match=true;break;default:coutError! This character stri
21、ng is not this grammers sentence.endl;return 0;break;case (:switch(strindex)case (:coutn;show(stack,-1);couttstrindext;show(str,index);couttMatch ( ! ;/Popup ( and next char in.endl;popstack(stack,&pointer);match=true;break;default:coutError! This character string is not this grammers sentence.endl;
22、return 0;break;case ):switch(strindex)case ):coutn;show(stack,-1);couttstrindext;show(str,index);couttMatch ) ! ;/Popup ) and next char in.endl;popstack(stack,&pointer);match=true;break;default:coutError! This character string is not this grammers sentence.endl;return 0;break;case :switch(strindex)case :coutn;show(stack,-1);couttstrindext;show(str,index);couttMa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2.1 节点的计算说课稿-2025-2026学年中职基础课-加工制造专题-高教版(2021)-(数学)-51
- 9.2 法律保障生活 教学设计- 2023-2024学年统编版道德与法治七年级下册
- 第三课 三种基本结构教学设计初中信息技术(信息科技)九年级浙教版(广西、宁波)
- 2025年气焊高级焊工考试题库及答案
- 2025年CDFI医师上岗证考试试题及答案
- 2025年9月机器人三级理论综合考试试题及答案
- 2025煤矿开采安全试题及答案
- 消防设备维护保养方案
- 2023九年级物理上册 第八章 电磁相互作用及应用8.3 电话和传感器说课稿 (新版)教科版
- Unit 4 第1课时 Section A (1a-2f)新教材七年级英语上册同步说课稿(人教版2024)河北专版
- 医院中医科常见病症诊疗规范
- 《电子商务概论》(第6版) 教案 第11、12章 农村电商;跨境电商
- 2025年电气工程及其自动化专业考试试卷及答案
- 大象牙膏教学课件
- 颅脑创伤急性期凝血功能障碍诊治专家共识(2024版)解读
- 2025至2030年中国健康保险市场运行态势及行业发展前景预测报告
- 沙棘采摘协议书
- 2026版创新设计高考总复习数学(人教B版)-学生答案一~五章
- 资产评估学教程(第八版)习题及答案
- 工业设计课件全套
- 道路运输企业安全生产责任制度
评论
0/150
提交评论