天津理工大学编译原理实验2:语法分析

上传人:壹****1 文档编号:563193202 上传时间:2023-06-13 格式:DOCX 页数:12 大小:58.43KB
返回 下载 相关 举报
天津理工大学编译原理实验2:语法分析_第1页
第1页 / 共12页
天津理工大学编译原理实验2:语法分析_第2页
第2页 / 共12页
天津理工大学编译原理实验2:语法分析_第3页
第3页 / 共12页
天津理工大学编译原理实验2:语法分析_第4页
第4页 / 共12页
天津理工大学编译原理实验2:语法分析_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《天津理工大学编译原理实验2:语法分析》由会员分享,可在线阅读,更多相关《天津理工大学编译原理实验2:语法分析(12页珍藏版)》请在金锄头文库上搜索。

1、人捧诲犬学实验报告学院(系)名称:计算机与通信工程学院姓名学号专业班级实验项目实验二:语法分析课程名称编译原理课程代码实验时间2016年4月21日第1、2节2016年4月26日第3、4节2016年4月28日第1、2节实验地点计算机软件实验室7-220批改意见成绩教师签字:实验内容:可选择LL1分析法、算符优先分析法、LR分析法之一,实现如下表达式文法的语法分析器:(1) EE+T I E-T I T(2) TT*F I T/F I F(3) FPAF I P(4) P(E) I i实验目的:1.掌握语法分析的基本概念和基本方法;2正确理解LL1分析法、算符优先分析法、LR分析法的设计与使用方法

2、。实验要求:1.按要求设计实现能识别上述文法所表示语言的语法分析器,并要求输出全部分析过程;2要求详细描述所选分析方法针对上述文法的分析表构造过程;3. 完成对所设计语法分析器的功能测试,并给出测试数据和实验结果;4. 为增加程序可读性,请在程序中进行适当注释说明;5. 整理上机步骤,总结经验和体会;6认真完成并按时提交实验报告。实验过程记录(源程序、测试用例、测试结果及心得体会等)】 使用的是LL(1)分析法,其分析表的构造方法和构造过程如下: 实验源代码:#include #include #define size 1024 using namespace std; int getLeng

3、th(char strsize) int 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

4、 pushstack(char *stack,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;caseA.return 4; case ):return 5; case #:return 6; case (:return

5、 7; case i:return 8;default:coutvvError! This character string is not this grammers sentence.vvendl; 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=-l;指向栈

6、顶的指针 int length=0;记录字符串长度 int index=0;记录输入字符串char top;int i,j;/i表示行,j表示列string production; bool match=false;string table79=/* E */ +-*/人)#(ierror, error, error, error, error, error, error, TX, TX,/* X */+TX, -TX, error, error, error, empty, empty, error, error,/* T */error,error,error,error,error,er

7、ror,error,FY,FY,/* Y */empty,empty,*FY,/FY,error,empty,empty,error,error,/* F */error,error,error,error,error,error,error,PZ,PZ,/* Z */empty,empty,empty,empty,AF,empty,empty,error,error,/* P */error,error,error,error,error,error,error,(E),i;coutstr;length=getLength(str);strlength=#;strlength+1=0;/ c

8、outlengthendl;/ couttable00;/已验证可以实现coutvv符号栈t当前符号t输入串tttt说明vvendl;pointer+;stackpointer=#;pointer+;stackpointer=E;初始化栈,使栈底是#Ewhile(strindex!=0)top=gettop(stack,pointer); switch(top)case E:i=0;第1行 j=getcol(strindex);production=tableij;if(production=error)coutvvError! This character string is not thi

9、s grammers sentence.vvendl; return 0;else if(production=empty)coutvvn;show(stack,-1); coutvvtvvstrindexvvt; 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:

10、i=l;第2行j=getcol(strindex);production=tableij; if(production=error)coutvvError! This character string is not this grammers sentence.vvendl; return 0;else if(production=empty)coutn; show(stack,-l);couttstrindext; show(str,index);popstack(stack,&pointer);else/说明可以进行分解非终结符coutn; show(stack,-l);couttstri

11、ndext; show(str,index);popstack(stack,&pointer); 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); couttstr

12、indext; show(str,index); popstack(stack,&pointer);else/说明可以进行分解非终结符 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)coutvvError! This character string is

13、 not this grammers sentence.vvendl; 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 F:i=4;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号