ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:52.07KB ,
资源ID:18282080      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-18282080.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理上机三.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

编译原理上机三.docx

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(Ui)SELECT(Uj)=(ij,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。五、附录:关键代码/*LL(1)分析法源程序,只能在VC+中运行 */#inc

4、lude#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,f,f1;/*结构体变量 */type C1010;

5、/*预测分析表 */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;/*用来接受Cmn*/ /*把文法产生式

6、赋值结构体*/ =E; strcpy,TG); =2; =T; strcpy,FS); =2; =G; strcpy,+TG); =3; =G; 0=; =1; =S; strcpy,*FS); =3; =S; 0=; =1; =F; strcpy,(E); =3; =F; 0=i; =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

7、;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;/*#,E进栈*/ printf(步骤tt分析栈 tt剩余字符 tt所用产生式 n); d

8、o x=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;/*结束标记*/ printf(acc!n);/*接受 */ getchar(); getchar(); exit(1); /*if*/ if(x=ch) print(); print1(); printf(%c匹配n,ch); ch=B+b;/*下一个输入字符*/ flag=0;/*恢复标记*/ /*if*/ el

9、se/*出错处理*/ 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,;/*输出产生式*/ for(j=0;j=0;j-)/*产生式逆序入栈*/ A+top=j; if(Atop=)/*为空则不进栈*/ top-; /*if*/ else/*出错处理*/ print(); print1(); printf(%c出错n,x);/*输出出错非终结符*/ exit(1); /*else*/ /*else*/ while(finish=0);/*main*/六、实验者自评 在LL(1)分析器的编写中我只达到了最低要求,就是自己手动输入的select集,first集,follow集然后通过程序将预测分析表构造出来了,并且没有做出对输入串的分析。通过本次试验,我能够设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。并且有能力选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2