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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编译原理实验报告.docx

1、编译原理实验报告编译原理实验报告系 别专 业班级学号姓 名XXX指导教师2010年 12 月 27 月实验一:词法分析程序的设计与实现目的:设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解。要求:(1)通过对PL/0词法分析程序(GETSYM)的分析,认真研读描述PL/0语法规则的语法图或EBNF,并在此基础上按照PL/0的语法,编制一个词法分析程序。此程序应具有如下功能:(a)输入为字符串(待进行词法分析的源程序),输出为单词串,即由(单词,类别)所组成的二元组序列。(b)有一定检查错误的能力,例如能发现2A这类不能作为单词的字符串。实验代码:#include #includ

2、e #include #include #include #define NULL 0FILE *fp;char cbuffer;char *key8=if,else,for,while,do,return,break,continue;char *border6=,;,(,);char *arithmetic4=+,-,*,/;char *relation6=,=,;char *consts20;char *label20;int constnum=0,labelnum=0;int search(char searchchar,int wordtype) int i=0; switch(wo

3、rdtype) case 1:for(i=0;i=7;i+) if(strcmp(keyi,searchchar)=0) return(i+1); case 2:for(i=0;i=5;i+) if(strcmp(borderi,searchchar)=0) return(i+1); return(0); case 3:for(i=0;i=3;i+) if(strcmp(arithmetici,searchchar)=0) return (i+1); return(0); case 4:for(i=0;i=5;i+) if(strcmp(relationi,searchchar)=0) ret

4、urn(i+1); return (0); case 5:for(i=0;i=constnum;i+) if(strcmp(constsi,searchchar)=0) return (i+1); constsi-1=(char *)malloc(sizeof(searchchar); strcpy(constsi-1,searchchar); constnum+; return(i); case 6:for(i=0;i=labelnum;i+) if(strcmp(labeli,searchchar)=0) return(i+1); labeli-1=(char *)malloc(sizeo

5、f(searchchar); strcpy(labeli-1,searchchar); labelnum+; return(i); char alphaprocess(char buffer) int atype; int i=-1; char alphatp20; while(isalpha(buffer)|(isdigit(buffer) alphatp+i=buffer; buffer=fgetc(fp); alphatpi+1=0; if(atype=search(alphatp,1) printf(%s (1,%d)n,alphatp,atype-1); else atype=sea

6、rch(alphatp,6); printf(%s (6,%d)n,alphatp,atype-1); return(buffer);char digitprocess(char buffer) int i=-1; char digittp20; int dtype; while(isdigit(buffer) digittp+i=buffer; buffer=fgetc(fp); digittpi+1=0; dtype=search(digittp,5); printf(%s (5,%d)n,digittp,dtype-1); return (buffer);char otherproces

7、s(char buffer) int i=-1; char othertp20; int otype,otypetp; othertp0=buffer; othertp1=0; if(otype=search(othertp,3) printf(%s (3,%d)n,othertp,otype-1); buffer=fgetc(fp); goto out; if(otype=search(othertp,4) buffer=fgetc(fp); othertp1=buffer; othertp2=0; if(otypetp=search(othertp,4) printf(%s (4,%d)n

8、,othertp,otypetp-1); goto out; else othertp1=0; printf(%s (4,%d)n,othertp,otype-1); goto out; if(buffer=:) buffer=fgetc(fp); if(buffer=) printf(:=(2,2)n); buffer=fgetc(fp); goto out; else if(otype=search(othertp,2) printf(%s (2,%d)n,othertp,otype-1); buffer=fgetc(fp); goto out; if(buffer!=n)&(buffer

9、!= ) printf(%c error,not a wordn,buffer); buffer=fgetc(fp);out: return (buffer);void main() int i; for(i=0;i=20;i+) labeli=NULL; constsi=NULL; if(fp=fopen(example.c,r)=NULL) printf(errorn); else cbuffer=fgetc(fp); while(cbuffer!=EOF) if(isalpha(cbuffer) cbuffer=alphaprocess(cbuffer); else if(isdigit

10、(cbuffer) cbuffer=digitprocess(cbuffer); else cbuffer=otherprocess(cbuffer); printf(overn); getchar(); 截图如下:实验二:递归子程序法语法分析程序的设计与实现目的:设计、编制、调试一个典型的语法分析程序,实现对如下文法的递归子程序语法分析,进一步掌握常用的语法分析方法。要求:程序的输入是任意符号串,输出是本次输入的符号串是否是该文法的句子的结论。实验代码:#include #include#include#includechar a50,b50,d200,e10;char ch;int n1,

11、i1=0,flag=1,n=5;int E();int E1();int T();int G();int S();int F();void input();void input1();void output();void main() int f,p,j=0; char x; d0=E; d1=; d2=; d3=T; d4=G; d5=#; printf(请输入字符串(长度50,以#号结束)n); do scanf(%c,&ch); aj=ch; j+; while(ch!=#); n1=j; ch=b0=a0; printf(文法t分析串tt分析字符t剩余串n); f=E1(); if(f

12、=0) return; if(ch=#) printf(acceptn); p=0; x=dp; while(x!=#) printf(%c,x); p=p+1; x=dp; /*输出推导式*/ else printf(errorn); printf(回车返回n); getchar();getchar(); return; printf(n); printf(回车返回n); getchar(); getchar();int E1() int f,t; printf(ETGt); flag=1; input(); input1(); f=T(); if (f=0) return(0); t=G(

13、); if (t=0) return(0); else return(1);int E() int f,t; printf(ETGt); e0=E; e1=; e2=; e3=T; e4=G; e5=#; output(); flag=1; input(); input1(); f=T(); if (f=0) return(0); t=G(); if (t=0) return(0); else return(1);int T() int f,t; printf(TFSt); e0=T; e1=; e2=; e3=F; e4=S; e5=#; output(); flag=1; input();

14、 input1(); f=F(); if (f=0) return(0); t=S(); if (t=0) return(0); else return(1);int G() int f; if(ch=+) bi1=ch; printf(G+TGt); e0=G; e1=; e2=; e3=+; e4=T; e5=G; e6=#; output(); flag=0; input(); input1(); ch=a+i1; f=T(); if (f=0) return(0); G(); return(1); printf(Gt); e0=G; e1=; e2=; e3=; e4=#; outpu

15、t(); flag=1; input(); input1(); return(1);int S() int f,t; if(ch=*) bi1=ch; printf(S*FSt); e0=S;e1=;e2=;e3=*; e4=F;e5=S;e6=#; output(); flag=0; input();input1(); ch=a+i1; f=F(); if(f=0) return(0); t=S(); if(t=0) return(0); else return(1); printf(St); e0=S;e1=;e2=;e3=;e4=#; output(); flag=1; ai1=ch;

16、input();input1(); return(1);int F() int f; if(ch=() bi1=ch; printf(F(E)t); e0=F;e1=;e2=;e3=(; e4=E;e5=);e6=#; output(); flag=0; input();input1(); ch=a+i1; f=E(); if(f=0) return(0); if(ch=) bi1=ch; printf(F(E)t); flag=0; input();input1(); ch=a+i1; else printf(errorn); return(0); else if(ch=i) bi1=ch;

17、 printf(Fit); e0=F;e1=;e2=;e3=i;e4=#; output(); flag=0; input();input1(); ch=a+i1; else printf(errorn); return(0); return(1);void input() int j=0; for(;j=i1-flag;j+) printf(%c,bj); printf(tt); printf(%ctt,ch);void input1() int j; for(j=i1+1-flag;j;dn+2=#;n=n+2;i=n; i=i-2; while(di!=&i!=0)i=i-1; i=i+1; while(di!=e0)i=i+1; q=i; m=q; k=q; while(dm!=) m=m-1; m=m+1; while(m!=q) dn=dm;m=m+1;n=n+1; dn=#; for(j=3;ej!=#;j+) dn=ej; n=n+1; k=k+1; while(dk!=) dn=dk; n=n+1; k=k+1; dn=#;实验截图:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1