



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学号成绩编译原理上机报告上机题目编写语法分析分析器上机时间11月 18日学院信息与控制工程学院专业计算机科学与技术班级计算机 1301 班姓名周砚豪一、实验目的通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。1、选择最有代表性的语法分析方法,如LL(1)语法分析程序、算符优先分析程序和LR分析分析程序,并至少完成两个题目。2、选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。二、实验过程(一)根据分析法总控制流程图, 编写一个分析对象的语法分析程序。可
2、根据自己的能力选择以下三项(由易到难)之一作为分析算法中的输入:1. 直接输入根据已知文法人工构造的分析表M。2. 输入已知文法的集合 FIRST(x)和 FOLLOW(U),由程序自动生成该文法的分析表 M。3. 输入已知文法,由程序自动生成该文法分析表 M。?(二)程序具有通用性,即所编制的 LL(1)语法分析程序能够适用于不同文法以及各种 ?输入单词串,并能判断该文法是否为算符文法和算符优先文法。 ?(三)有运行实例。对于输入的一个文法和一个单词串,所编制的语法分析程序应能正确地判断,此单词串是否为该文法的句子,并要求输出分析过程。 ?三、实验结果四、讨论与分析LL(1)文法的判定:对于
3、文法 G的每一个非终结符 U的产生式: U1| 2| | n。如果文法 G 是一个 LL(1) 文法,则有 SELECT(U i) SELECT(Uj)= (i j ,i ,j=1 ,2, , n) 。SELECT集的构造: SELECT(U )=?FIRST( ) ,当 不空 FIRST( ) FOLLOW(U),否则 LL(1)分析表构造算法: ?对于每个产生式 U,执行下一步骤:1、对于每个终结符号: aFIRST() ,MU,a=? ?;?2、如果eFIRST(?) ,对于每个终结符号:bFOLLOW(U),MU,b=? ?;?3 、将其它未定义的分析元素置为ERROR。五、附录:关键
4、代码/*LL(1) 分析法源程序,只能在 VC+中运行 */ #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;/*L为输入串长度typedef struct type/*产生式类型定义终结符非终结符*/*/*/*/char origin;/*大写字符*/char array5;/*产生式右边字符*/int length;/*字符个数*/type;type e,t,g,g1,s,s1
5、,f,f1;/*结构体变量type C1010;/*预测分析表*/*/void print()/*输出分析栈*/int a;/*指针 */for(a=0;a=top+1;a+)printf(%c,Aa);printf(tt);/*print*/void print1()/*输出剩余串*/int j;for(j=0;jb;j+)/*输出对齐符 */printf( );for(j=b;j=l;j+)printf(%c,Bj);printf(ttt);/*print1*/void main()int m,n,k=0,flag=0,finish=0;char ch,x;type cha;/*用来接受
6、Cmn*/* 把文法产生式赋值结构体*/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.length=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.
7、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;C23=t;C31=s1;C32=s;C34=C35=s1;C40=f1;C43=f;printf(提示:本程序只能对由i,+,*,(,)构成的以# 结束的字符串进行分析 ,n);printf(请输入要分析的字符串do/*读入分析串 */:);scanf(%c,&ch);if(ch!=i)&(ch!=*)&(
8、ch!=()&(ch!=)&(ch!=#)&(ch!=+)printf(输入串中有非法字符n);exit(1);Bj=ch;j+;while(ch!=#);l=j;/*分析串长度 */ch=B0;/*当前分析字符*/Atop=#; A+top=E;/*#,Eprintf(步骤 tt分析栈tt进栈 */ 剩余字符tt所用产生式n);dox=Atop-;/*x为当前栈顶字符*/printf(%d,k+);printf(tt);for(j=0;j=5;j+)/*判断是否为终结符*/if(x=v1j)flag=1;break;if(flag=1)/*如果是终结符*/if(x=#)finish=1;/*
9、结束标记 */printf(acc!n);/*接受 */getchar();getchar();exit(1);/*if*/if(x=ch)print();print1();printf(%c匹配 n,ch);ch=B+b;/*下一个输入字符 */flag=0;/*恢复标记 */*if*/else/*出错处理 */print();print1();printf(%c 出错 n,ch);/* 输出出错终结符 */ exit(1);/*else*/*if*/else/*非终结符处理 */for(j=0;j=4;j+)if(x=v2j)m=j;/* 行号 */break;for(j=0;j,cha.origin);/* 输出产生式 */ for(j=0;j=0;j-)/*产生式逆序入栈*/A+top=cha.arrayj;if(Atop=)/*为空则不进栈 */top-;/*if*/else/* 出错处理 */print();print1();printf(%c 出错 n,x);/* 输出出错非终结符 */ exit(1);/*else*/*else*/while(finish=0);/*main*/六、实验者自评在 LL(1)分析器的编写中我只达到了最低要求,就是自己手动输入的 select 集, first 集, follow 集然后通过程序将预测分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国军标考试试题及答案
- 深入探讨2025年多媒体应用设计师的试题及答案
- 串联电路试题及答案
- 2025年未签订合同员工遭解雇获得赔偿
- 冬奥会奖牌考试题及答案
- 突破难关的系统分析师试题及答案
- 计算机二级Msoffice复习的最佳途径试题及答案
- 软件评测师考试职场技能的提升策略试题及答案
- 车间主任考核试题及答案
- MS PowerPoint多媒体演示技巧及2025年考试试题及答案
- 项目volume3修改版-旧20.commissioning servicing manualFMZ5000火灾探测和灭火系统控制盘安装调试维保手册
- 消防安全常识二十条系列挂图清晰版
- GB/T 3672.1-2002橡胶制品的公差第1部分:尺寸公差
- GB/T 23227-2018卷烟纸、成形纸、接装纸、具有间断或连续透气区的材料以及具有不同透气带的材料透气度的测定
- GB/T 18049-2017热环境的人类工效学通过计算PMV和PPD指数与局部热舒适准则对热舒适进行分析测定与解释
- 烟草专卖管理师岗位技能标准(2023版)
- 半条被子(红军长征时期故事) PPT
- 公司车辆驾驶扣分违章处理证明 模板
- 一次性赔偿协议书模板
- (中职)车削加工技术全册实训课教案完整版
- 幼儿园绘本故事:《漏》
评论
0/150
提交评论