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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编译原理实验报告.docx

1、编译原理实验报告程序清单1. 分工:2. 词法分析:#include#include#include#define keywordSum 8char *keywordkeywordSum=if,else,for,while,do,int,read,write;char singleword50=+ - * ( ) ; , :;char doubleword10=!;extern char Scanin300,Scanout300;extern FILE *fin,*fout;int TESTscan() char ch,token40; int es=0,j,n; printf(请输入源程序文

2、件名(包括路径):); scanf(%s,Scanin); printf(请输入词法分析输出文件名(包括路径):); scanf(%s,Scanout); if(fin=fopen(Scanin,r)=NULL) printf(n打开词法分析输入文件出错!n); return(1); if(fout=fopen(Scanout,w)=NULL) printf(n创建词法分析输出文件出错!n); return(2); ch=getc(fin); while(ch!=EOF) while(ch= |ch=n|ch=t) ch=getc(fin); if(isalpha(ch) token0=ch;

3、j=1; ch=getc(fin); while(isalnum(ch) tokenj+=ch; ch=getc(fin); tokenj=0; n=0; while (n=keywordSum) fprintf(fout,%st%sn,ID,token); else fprintf(fout,%st%sn,token,token); else if (isdigit(ch) token0=ch;j=1; ch=getc(fin); while(isdigit(ch) tokenj+=ch; ch=getc(fin); tokenj=0; fprintf(fout,%st%sn,NUM,tok

4、en); else if(strchr(singleword,ch)0) token0=ch;token1=0; ch=getc(fin); fprintf(fout,%st%sn,token,token); else if (strchr(doubleword,ch)0) token0=ch; ch=getc(fin); if(token0=!) if (ch = =) token1=ch; token2=0; ch = getc(fin); fprintf(fout,%st%sn,token,token); else token1=0; es=1; fprintf(fout,%st%sn,

5、ERROR,token); else if (ch = =) token1=ch; token2=0; ch = getc(fin); else token1=0; fprintf(fout,%st%sn,token,token); else if (ch=/) ch = getc(fin); if(ch =*) char ch1; ch1=getc(fin); do ch=ch1; ch1=getc(fin); while(ch!=* | ch1!=/) & ch1!=EOF); ch = getc(fin); else if(ch=/) do ch=getc(fin); while(ch!

6、=n & ch!=EOF); ch=getc(fin); else token0=/; token1=0; fprintf(fout,%st%sn,token,token); else token0=ch; token1=0; ch=getc(fin); es = 3; fprintf(fout,%st%sn,ERROR,token); fclose(fin); fclose(fout); return (es);3. 语法分析:#include#include#include#includeint TESTparse();int program();int compound_Stat();i

7、nt statement();/int expression_Stat();int expression_stat();int expression();int bool_expr();int additive_expr();int term();int factor();int if_stat();int while_stat();int for_stat();int write_stat();int read_stat();int declaration_stat();int declaration_list();int statement_list();int compound_stat

8、();char token20, token140; /token保存单词符号,token1保存单词值extern char Scanout300; /保存词法分析输出文件名FILE * fp; /用于指向输入文件的指针#define keywordSum 8char *keywordkeywordSum=if,else,for,while,do,int,read,write;char singleword50=+ - * ( ) ; , :;char doubleword10=!;extern char Scanin300,Scanout300;extern FILE *fin,*fout;

9、/语法分析程序int TESTparse() int es = 0; if (fp=fopen(Scanout,r)=NULL) printf(n打开%s错误!n,Scanout); es = 0; if (es=0) es=program(); printf(=语法分析结果!=n); switch(es) case 0: printf(语法分析成功!n); break; case 10: printf(打开文件%s失败!n); break; case 1: printf(缺少!n); break; case 2: printf(缺少!n); break; case 3: printf(缺少标

10、识符!n); break; case 4: printf(少分号!n); break; case 5: printf(缺少(!n); break; case 6: printf(缺少)!n); break; case 7: printf(缺少操作数!n); break; fclose(fp); return(es);/:=int program() int es = 0; fscanf(fp, %s%sn,token,token1); printf(%s%sn,token,token1); if(strcmp(token,) /判断是否为 es = 1; return (es); fscanf

11、(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es = declaration_list(); if(es0) return (es); es = statement_list(); if(strcmp(token, ) /判断是否为 es = 2; return (es); return(es);/:=|空int declaration_list() int es=0; while(strcmp(token,int)=0) es=declaration_stat(); if(es0) return (es); return (e

12、s);/:=int ;int declaration_stat() int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); if(strcmp(token,ID) return (es=3); /不是标识符 fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); if(strcmp(token,;) return (es=4); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1

13、); return (es);/:=|空int statement_list() int es=0; while(strcmp(token,) es=statement(); if(es0) return (es); return (es);/:=|/ |int statement() int es=0; if(es=0 & strcmp(token,if)=0) es=if_stat(); / if(es=0 & strcmp(token,while)=0) es=while_stat(); / if(es=0 & strcmp(token,for)=0) es=for_stat(); /

14、/可在此处添加do语句调用 if(es=0 & strcmp(token,read)=0) es=read_stat(); / if(es=0 & strcmp(token,write)=0) es=write_stat(); / if(es=0 & strcmp(token,)=0) es=compound_stat(); / if(es=0 & strcmp(token,ID)=0 | strcmp(token,NUM)=0) es=expression_stat(); /表达式语句 return (es);/:=if()|elseint if_stat() int es=0; fscan

15、f(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); if(strcmp(token,() return (es=5); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=statement(); if(es0) return(es); if(strcmp(token,) return(es=6); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=statement(); if(e

16、s0) return(es); if(strcmp(token,else)=0) fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=statement(); if(es0) return(es); return(es);/:=while()int while_stat() int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); if(strcmp(token,() return (es=5); fscanf(fp,%s%sn,&to

17、ken,&token1); printf(%s%sn,token,token1); es=expression(); if(es0) return(es); if(strcmp(token,) return(es=6); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es = statement(); return(es);/:=for(;)int for_stat() int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); if(s

18、trcmp(token,() return (es=5); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=expression(); if(es0) return(es); if(strcmp(token,;) return (es=4); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=expression(); if(es0) return(es); if(strcmp(token,;) return (es=4); fscanf

19、(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=expression(); if(es0) return(es); if(strcmp(token,) return (es=6); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=expression(); return (es);/:=write;int write_stat() int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,tok

20、en,token1); es=expression(); if(es0) return(es); if(strcmp(token,;) return (es=4); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); return(es);/:=read;int read_stat() int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); if(strcmp(token,ID) return (es=3); fscanf(fp,%s%sn

21、,&token,&token1); printf(%s%sn,token,token1); if(strcmp(token,;) return (es=4); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); return(es);/:=int compound_stat() /复合语句函数 int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=statement_list(); return (es);/:=;|;int exp

22、ression_stat() int es=0; if(strcmp(token,;)=0) fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); return (es); es=expression(); if(es0) return(es); if(es=0 & strcmp(token,;)=0) fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); return (es); else es=4; return (es); /少分号 /:=|int ex

23、pression() int es=0, fileadd; char token220, token340; if(strcmp(token,ID)=0) fileadd=ftell(fp); /记住问件当前位置 fscanf(fp,%s%sn,&token2,&token3); printf(%s%sn,token2,token3); es=bool_expr(); if(es0) return(es); if(strcmp(token2,=)=0) /= fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); else fs

24、eek(fp,fileadd,0); /若非=则文件指针回到=前边的标识符 printf(%s%sn,token,token1); es=bool_expr(); if(es0) return(es); else es=bool_expr(); return (es);/:=|(|=|=|=|!=) /int bool_expr() int es=0; es=additive_expr(); if(es0) return(es); if(strcmp(token,)=0 | strcmp(token,=)=0 | strcmp(token,)=0 | strcmp(token,0) return(es); return (es);/:=(+|-)int additive_expr() int es=0; es=term(); if(es0) return(es); while(strcmp(token,+)=0 | strcmp(token,-)=0) fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=term(); if(es0) return(es); return (es);/:=(*|/)int term() int es=0

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

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