聊城大学编译原理实验二语法分析器

上传人:新** 文档编号:512825824 上传时间:2024-01-25 格式:DOC 页数:12 大小:5.05MB
返回 下载 相关 举报
聊城大学编译原理实验二语法分析器_第1页
第1页 / 共12页
聊城大学编译原理实验二语法分析器_第2页
第2页 / 共12页
聊城大学编译原理实验二语法分析器_第3页
第3页 / 共12页
聊城大学编译原理实验二语法分析器_第4页
第4页 / 共12页
聊城大学编译原理实验二语法分析器_第5页
第5页 / 共12页
点击查看更多>>
资源描述

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

1、 LIAOCHENG UNIVERSITY计算机学院实验报告【 2016 2017学年第2学期】【一、基本信息】【实验课程】编译原理【设课形式】独立 非独立【课程学分】4【实验项目】实验二语法分析器的设计【项目类型】基础 综合 设计 研究创新 其它 【项目学时】4【学生姓名】【学 号】【系别专业】软件开发【实验班组】级 班 组 台【同组学生】【实验室名】综合实验楼【实验日期】【报告日期】【二、实验教师对报告的最终评价及处理意见】实验成绩:(涂改无效) 指导教师签名: 年 月 日注:要将实验项目、实验课程的成绩评定及课程考核办法明确告知学生,并报实验管理中心备案 / 【三、实验预习】实验目的和要

2、求:1. 掌握自上而下语法分析的基本思想;2. 掌握利用预测分析法进行语法分析的原理和过程;3. 熟悉文法的机内表示;4. 掌握语法分析器的设计与调试,提高编程能力、动手能力以及独立分析问题、解决问题的能力和综合运用所学知识的能力。实验内容和原理或涉及的知识点(综合性实验):1. 输入任意文法,改写文法使其成为LL(1)文法。 2. 构造文法的预测分析表;3. 设计堆栈和预测分析表的机内表示;4. 设计并书写语法分析程序;5. 调试并运行语法分析程序;6. 实验结果分析l 分析程序中文法存储所采用的数据结构l 分析结果并写出自己的心得体会提示: 对于所选定的分析方法,如有需要,应选择一种合适的

3、数据结构,以构造所给文法的机内表示。 实验条件(实验设备、软件、材料等):1. 装有Codeblocks的电脑一台。2. 实验环境:WINDOWS下,工具为Turbo C2.0或Visual C 6.0。实验考核方式:1. 提交实验报告2. 演示程序和答辩(抽查)实验预习实验设计方案(实验方法、步骤、操作过程、设计型实验、实验数据记录表格):实验预习成绩(涂改无效)合格不合格【四、实验过程、数据和实验结果记录】实验方法、步骤、操作过程的记录描述或程序代码。实验过程中输入/输出数据、程序运行结果的记录。(可加附页)1. 输入任意文法,改写文法使其成为LL(1)文法。答: 输入文法GE: E T|

4、EAT T F|TMF F( E ) | i A+| -M* | /(1) 改写文法。对形如:UUx|y的产生式(其中x,y V+ ,y不以U开头),引入一个新的非终结符U后,可以等价地改写成为: UyUUx U| 显然改写后,U和U都不是左递归的非终结符。因此文法GE按上述方法消去左递归后可等价地写成: ETPPAT P | TFW| WMFW| F( E ) | i M* | /2. 构造文法的预测分析表;i+-+/()#EE-TEE-TEEE-ATEE-ATEE-E-TT-FTT-FTTT-T-T-MFTT-MFTT-T-FF-iF-(E)AA-+A-MM-*M-/3. 设计堆栈和预测分

5、析表的机内表示;堆栈表示:预测分析表的机内表示:4. 设计并书写语法分析程序;语法分析程序代码:#include#include#include#includechar A20;char B20;char v120=i,+,*,(,),#;char v220=E,G,T,S,F;int j=0,b=0,top=0,l;typedef struct type char origin; char array5; int length;type;type e,t,g,g1,s,s1,f,f1;type C1010;void print() int a; for(a=0;a=top+1;a+) pri

6、ntf(%c,Aa); printf(tt);void print1() int j; for(j=0;jb;j+) printf( ); for(j=b;j=l;j+) printf(%c,Bj); printf(ttt);void main() int m,n,k=0,flag=0,finish=0; char ch,x; type cha; e.origin=E; strcpy(e.array,TG); e.length=2; t.origin=T; strcpy(t.array,FS); t.length=2; g.origin=G; strcpy(g.array,+TG); g.le

7、ngth=3; g1.origin=G; g1.array0=; g1.length=1; s.origin=S; strcpy(s.array,*FS); s.length=3; s1.origin=S; s1.array0=; s1.length=1; f.origin=F; strcpy(f.array,(E); f.length=3; f1.origin=F; f1.array0=i; f1.length=1; for(m=0;m=4;m+) for(n=0;n=5;n+) Cmn.origin=N; C00=e;C03=e; C11=g;C14=g1;C15=g1; C20=t;C2

8、3=t; C31=s1;C32=s;C34=C35=s1; C40=f1;C43=f; printf(提示:本程序只能对由i,+,*,(,)构成的以#结束的字符串进行分析,n); printf(请输入要分析的字符串:); do scanf(%c,&ch); if (ch!=i) &(ch!=+) &(ch!=*)&(ch!=()&(ch!=)&(ch!=#) printf(输入串中有非法字符n); exit(1); Bj=ch; j+; while(ch!=#); l=j; ch=B0; Atop=#; A+top=E; printf(步骤tt分析栈 tt剩余字符 tt所用产生式 n); do x=Atop-; printf(%d,k+); printf(tt); for(j=0;j=5;j+) if(x=v1j) flag=1; break; if(flag=1) if(x=#) finish=1; printf(acc!n); getchar(); getchar(); exit(1); if(x=ch) print(); print1(); printf(%c匹配n,ch); ch=B+b; flag=0; else print(); print1(); printf(%c出错n,ch); exit(1); else

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

当前位置:首页 > 资格认证/考试 > 自考

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