compiler实验二语法分析实验指导.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
compiler实验二语法分析实验指导

实验二 语法分析程序设计 [实验目的]:了解法分析的主要任务熟悉编译程序的编制。[实验内容]:根据文法,构造一程序。出[实验要求]:G[表达式]:表达式→表达式+项|表达式-项项→项*因式|项/因式因式→标识符|无号|(表达式)编写分析程序实现基本的分析器,能够分析。实验报告中要说明使用方法。生成并输出[实验步骤]:写出写出’ G→+TG|∧ ∧为ε T→FS S为T’ S→*FS|∧ F→i|(E) 编写程序结果分析 [实验]:#include stdio.h #include dos.h #include stdlib.h #include string.h char a[50],b[50],d[200],e[10];/*数组a存输入串,数组d存推导式,*/ char ch; int n1,i1=0,flag=1,n=5; /*flag=1处理非终结符,flag=0处理终结符*/ int total=0; /*步骤计数器*/ int E(); int E1(); int T(); int G();/*E’*/ int S();/*T’*/ int F(); void input(); void input1(); void output(); void main() /*递归分析*/ { int f,p,j=0; char x; d[0]=E; d[1]==; d[2]=; d[3]=T; d[4]=G; d[5]=#; printf(请输入字符串(长度50,以#号结束)\n); do { scanf(%c,ch); a[j]=ch; j++; }while(ch!=#); n1=j;/* n1输入串实际长度 */ ch=b[0]=a[0]; printf(步骤\t文法\t分析串\t\t分析字符\t剩余串\n); f=E1(); if (f==0) return; /*有语法错误,失败退出*/ if (ch==#) { printf(accept\n); /*输入串是文法的句子*/ p=0; x=d[p]; while(x!=#) { printf(%c,x); p=p+1; x=d[p]; /*输出推导式*/ } } else { printf(error\n); printf(回车返回\n); getchar(); getchar(); return; } printf(\n); printf(回车返回\n); getchar(); getchar(); } int E1()/* 有语法错误函数返回值为0,否则为1* / { int f,t; printf(%d\tE--TG\t,total); total++; flag=1; input(); input1(); f=T(); if (f==0) return(0); t=G(); if (t==0) return(0); else return(1); } int E() { int f,t; printf(%d\tE--TG\t,total); total++; e[0]=E; e[1]==; e[2]=; e[3]=T; e[4]=G; e[5]=#; 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(%d\tT--FS\t,total); total++; e[0]=T; e[1]==; e[2]=; e[3]=F; e[4]=S; e[5]=#; output(); flag=1; input(); input1(); f=F(); if (f==0) return(0); t=S(); if (t==0) return(0); else return(1); } int G() { int f; if(ch==+) { b[i1]=ch; printf(%d\tG--+TG\t,total); total++; e[0]=G; e[1]==; e[2]=; e[3]=+; e[4]=T; e[5]=G; e[6]=#; output(); flag=0; input(); input1(); ch

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档