ImageVerifierCode 换一换
格式:PDF , 页数:35 ,大小:602.19KB ,
资源ID:6509249      下载积分:15 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(语法分析程序实验报告.pdf)为本站上传会员【曲****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

语法分析程序实验报告.pdf

1、1.设计规定(1)对输入文法,它能判断与否为LL(1)文法,若是,则转(2);否则报错并终止;(2)输入已知文法,由程序自动生成它日勺LL(1)分析表;(3)对于给定时输入串,应能判断识别该串与否为给定文法日勺句型。2.分析该程序可分为如下几步:(1)读入文法(2)判断正误(3)若无误,判断与否为LL(1)文法(4)若是,构造分析表;(5)由总控算法判断输入符号串与否为该文法日勺句型。3.流程图是4.源程序语法分析程序作者:龚勋刘栋罗晓波学号:31500342 31500350 31500351计科系13班#include#include#includeint count=0;/*分解时产生式

2、的个数*/int number;/*所有终止符和非终止符的总数*/char start;/*开始符号*/char termin50;/*终止符号*/char non_ter50;/*非终止符号*/char v50;/*所有符号*/*左部*/char left50;char right50 50;/*右部*/charfirst5050,follow5050;/*各产生式右部的 FIRST 和左部的 FOLLOW 集合*/char firstl5050;/*所有单个符号的FIRST集合*/char select5050;/*各单个产生式的SELECT集合*/char f50,F50;/*记录各符号

3、的FIRST和FOLLOW与否已求过*/char empty 20;/*记录可直接推出八时符号*/char TEMP50;/*求FOLLOW时寄存某一符号串的FIRST集合*/int validity=l;/*表达输入文法与否有效*/int 11=1;/*表达输入文法与否为LL(1)文法*/intM2020;/*分析表*/char choose;/*顾客输入时使用*/char empt20;/*求_emp()时使用*/char fo20;/*求FOLLOW 集合时使用*/判断一种字符与否在指定字符串中int in(char c,char*p)(int i;if(strlen(p)=O)retu

4、rn(O);for(i=0;i+)if(pi=c)return(l);/*若在,返回1*/if(i=strlen(p)return(O);/*若不在,返回 0*/)得到一种不是非终止符日勺符号char c()|char c-A;while(in(c,non_ter)=1)C+;return(c);)分解具有左递归日勺产生式void recur(char*point)/*完整时产生式在point口中*/int j,m=0,n=3,k;char temp20,ch;ch=c();/*得到一种非终止符*/k=strlen(non_ter);non_terk=ch;non_terk+l=0;for(j

5、0;j=strlen(point)-l;j+)(if(pointn=point0)/*假如I后的首符号和左部相似*/for(j=n+l;j=strlen(point)-1;j+)|while(pointj!=T&pointj!=0)temp m+=point+;leftcount=ch;memcpy(rightcount,temp,m);rightcount m=ch;right count m+1-0;m=0;count+;if(point|j=T)(n=j+1;break;)else/*假如T后的首符号和左部不一样*/leftcount=ch;rightcount 0=A,;rightc

6、ount 1=0;count+;for(j=n;j=strlen(point)-1;j+)(if(pointj!=T)tempm+=pointj;else(leftcount=point0;memcpy(rightcount,temp,m);rightcount m=ch;rightcount m+l=O;printf(count=%d,count);m=0;count+;)leftcount=point0;memcpy(rightcount,temp,m);rightcount m=ch;right count m+1=0;count+;m=0;分解不具有左递归日勺产生式void non_r

7、e(char*point)|int m=0,j;char temp 20;for(j=3;j=strlen(point)-1;j+)(if(pointU!=T)tempm+=pointj;else|leftcount=point0;memcpy(right count,temp,m);rightcount m=0;m=0;count+;)leftcount=point0;memcpy(rightcount,temp,m);rightcountm=0;count+;m=0;)读入一种文法char grammer(char*t,char*n,char*left,char right5050)(ch

8、ar vn50,vt50;char s;charp5050;int i,j,k;printf(”n请输入文法的非终止符号串:);scanf(%sn,vn);getchar();i=strlen(vn);memcpy(n,vn,i);ni=0;printf(”请输入文法的终止符号串:);scanf(%s,vt);getchar();i=strlen(vt);memcpy(t,vt,i);ti=0;printf(请输入文法时开始符号:);scanf(%c,&s);getchar();printf(请输入文法产生式的条数:);scanf(%d,&i);getchar();for(j=l;j=i;j+

9、)(printf(请输入文法的第d条(共d条)产生式:scanf(%s,pj-l);getchar();)for(j=0;j=i-l;j+)if(P 皿 皿 2!=少)printf(ninput error!1);validity=O;return(0);/*检测输入错误*/for(k=0;k=i-l;k+)/*分解输入时各产生式*/if(pk3=pkO)recur(pk);elsenon_re(pk);retum(s);将单个符号或符号串并入另一符号串void merge(char*d,char*s,int type)/*d是目日勺符号串,s是源串,type=l,源串中日勺八一并并入目串;t

10、ype=2,源串中的八不并入目串*/int i,j;for(i=0;i=strlen(s)-1;i+)(if(type=2&si=A)else|for(j=0;j+)(if(jstrlen(d)&si=dj)break;if(j=strlen(d)|dj=si;dj+l=O;break;求所有能直接推出八时符号void emp(char c)/*即求所有由八推出的符号*/char temp 10;int i;for(i=0;i=count-1;i+)if(righti 0=c&strlen(righti)=1)temp0=lefti;templ-0;merge(empty,temp,1);em

11、p(lefti);求某一符号能否推出八int _emp(char c)/*若能推出,返回I;否则,返回0*/int i,j,k,result=l,mark=0;char temp 20;temp0=c;tempfl-0;merge(empt,temp,1);if(in(c,empty)=1)return(l);for(i=0;i+)(if(i=count)return(O);if(lefti=c)/*找一种左部为c的产生式*/(j=strlen(righti);/*j 为右部的长度*/if(j=1&in(righti 0,empty)=1)retum(l);else if(j=1&in(rig

12、htiO,termin)=1)return(O);else(for(k=0;k=j-l;k+)if(in(rightik,empt)=1)mark=l;if(mark=l)continue;else|for(k=0;k=j-1;k+)|result*=_emp(righti k);temp0=righti k;templ=0;merge(empt,temp,1);)if(result=0&icount)continue;else if(result=1&icount)return(l);判断读入的文法与否对时int judge()int i,j;for(i=0;i=count-1;i+)if(

13、in(lefti,non_ter)=0)/*若左部不在非终止符中,报错*/printf(nerrorl!);validity=0;return(O);for(j=0;j 0;)else if(in(c,non_ter)=1)/*若为非终止符*/(for(j=0;j=count-1;j+)(if(leftj=c)(if(in(rightj 0,termin)=1|rightj0=A,)(temp0=rightj0;templ-0;merge(first li,temp,l);)else if(in(rightj 0,non_ter)=1)if(rightj0=c)continue;for(k=0

14、k+)if(vk=right 皿 0)break;if(fk=O)(first2(k);fk=T;merge(firstli,firstlk,2);for(k=0;k=strlen(rightj)-l;k+)|empt0=0;if(_emp(rightj k)=1&k=0)(firstiO=,A,;firstil=O;)else(TEMPO=,A,;TEMPl=fO;)else(for(j=0;j+)if(vj=pO)break;if(i=0)(memcpy(first i,first 1 j,strlen(firstl j);firstistrlen(firstl j)=,0,;elsem

15、emcpy(TEMP,fir st 1 j,strlen(firstl j);TEMPstrlen(firstl j)=0;else/*假如右部为符号串*/(for(j=0;j+)if(vj=p)break;if(i=0)merge(firsti,firstl j,2);elsemerge(TEMP,fir st 1 j,2);for(k=0;k=length-1;k+)|emptO=O;if(_emp(pk)=1&k=0)merge(firsti,first 1 m,2);elsemerge(TEMP,first 1 m,2);else if(_emp(pk)=l&k=length-1)te

16、mp0-A,;templ=O;if(i=0)merge(firsti,temp,1);elsemerge(TEMP,temp,1);else if(_emp(p k)=0)break;求各产生式左部的FOLLOWvoid FOLLOW(int i)int j,k,m,n,result=1;char c,temp 20;c=non_teri;/*c为待求时非终止符*/tempO=c;templ-O;merge(fo,temp,l);if(c=start)/*若为开始符号*/tempO=#;templ=O;merge(follow i,temp,l);)for(j=0;j=count-l;j+)i

17、f(in(c,right用)=1)/*找一种右部具有c的产生式*/(for(k=0;k+)if(rightjk=c)break;/*k为c在该产生式右部的序号*/for(m=0;m+)if(vm=leftj)break;/*m为产生式左部非终止符在所有符号中的序号*/if(k=strlen(rightj)-1)/*假如c在产生式右部的最终*/if(in(vm,fo)1)merge(follow i,follow m,l);continue;if(Fm=O)|FOLLOW(m);)merge(follow i,follow)else/*假如c不在产生式右部的最终*/for(n=k+l;n=str

18、len(right(j)-1;n+)|empt0=0;result*=_emp(rightj n);)if(result=l)/*假如右部c背面日勺符号串能推出八*/if(in(vm,fo)-1)/*防止循环递归*/merge(follow i,follow continue;)if(Fm=O)FOLLOW(m);merge(follow i,follow m,1);for(n=k+l;n=strlen(rightj)-l;n+)temp n-k-1=right。n;tempstrlen(rightj)-k-l=O;FIRST(-l,temp);merge(followi,TEMP,2);)判

19、断读入文法与否为一种LL(1)文法int 111()|int i,j,length,result=l;char temp 50;for(j=0;j=49;j+)/*初始化*/firstjO=O;follow j0=0;firstljO=O;selectjO=O;TEMP|j=0;tempj=O;FJ=O;)for(j=0;j=strlen(v)-1;j+)first2(j);/*求单个符号的FIRST集合*/printf(nfirstl:);for(j=0;j=strlen(v)-l;j+)printf(%c:%s n,vj,firstly);printf(nempty:%s,empty);p

20、rintf(n:n_emp:);for(j=0;j=strlen(v)-1;j+)printf(%d,_emp(vj);for(i=0;i=count-1;i+)FIRST(i,righti);/*求 FIRST*/printf(n);for(j=0;j=strlen(non_ter)-1;j+)/*求 FOLLOW*/if(fo-=0)fo0=0;FOLLOW(j);printf(nfirst:);for(i=0;i=count-1;i+)printf(n%s,firsti);printf(nfollow:);fbr(i=0;i=strlen(non_ter)-1;i+)printf(n%s

21、 followi);for(i=0;i=count-1;i+)/*求每一产生式的SELECT集合*/memcpy(selecti,firsti,strlen(firsti);selectistrlen(firsti)=O;for(j=0;j=strlen(righti)-l;j+)result*=_emp(righti j);if(strlen(righti)=1&righti 0=A,)result=l;if(result=l)|for(j=0;j+)if(vj=lefti)break;merge(select i,folio wj,l);)printf(nselect:);for(i=0;

22、i=count-1;i+)printf(%s,selecti);memcpy(temp,selectO,strlen(selectO);tempstrlen(select 0)=0;for(i=1;i=count-l;i+)/*判断输入文法与否为LL文法*/length=strlen(temp);if(lefti=lefti-l)|merge(temp,selecti,l);if(strlen(temp)length+strlen(selecti)return(O);)elsetemp0=0;memcpy(temp,selecti,strlen(selecti);tempstrlen(sele

23、cti)=O;)return(l);)构造分析表Mvoid MM()(intfor(i=0;i=19;i+)for(j=0;j=19;j+)i=strlen(termin);termini=#;/*将#加入终止符数组*/termini+l=O;for(i=0;i=count-1;i+)(for(m=0;m+)if(non_term lefti)break;/*m为产生式左部非终止符的序号*/for(j=0;j=O;n-)Sp+=rightmn;S q+strlen(rightm)=0;printf(nS:%s str:,S);for(p=j;p=strlen(str)-l;p+)printf(

24、c,strp);printf();一种顾客调用函数void menu()syntax();printf(n 与否继续?(y or n):);scanf(%c,&choose);getchar();while(choose=y)menu();主函数void main()|int i,j;start=grammer(termin,non_ter,left,right);printf(count=%d,count);printf(nstart:%c,start);strcpy(v,non_ter);strcat(v,termin);printf(nv:%s,v);printf(nnon_ter:%

25、s,non_ter);printf(ntermin:%s,termin);printf(nright:);for(i=0;i=count-1;i+)printf(%s,righti);printf(nleft:);for(i=0;i=count-1;i+)printf(%c,lefti);if(validity=l)validity 二judge。;printf(nvalidity=%d,validity);if(validity=l)/*读入一种文法*/printf n文法有效)IMHO;printf(nll=%d,ll);if(ll=O)printf(n该文法不是一种LL1文法!);els

26、e|MM();printf(n);for(i=0;i=19;i+)for(j=0;j=0)printf(M%d%d=%d,i,j,Mi|j);printf(n);menu();5.执行成果(i)输入一种文法(2)输入一种符号串I C、D:Turboc2Debugsyirtax.exe,陶晶莹-太委屈EOT 回 x|请输入该文法的句型:S:ttAT str:i*#S:ttABF str:i*tt S:ttABi str:i*#S:ttAB str:*tt S:#ABF*str:*tt S:ttABF str:tt S:1tABE str:#S:ttABE str:i+itt S:ttABAT str:i+i#S:ttABABF str:i+i#str:i+ittS:ttABAB str:+i#S:ttABA str:+i#S:ttABAT*str:+i#S:ttABAT str:i#S:ttABABF str:itt str:ittS:ttABAB str:tt S:ttABA str:tt S:ttAB str:#S:ttAB str:#S:ttA str:tt S:tt str:#该符号串是文法的句型.是否继续?。or n:3J(3)再次输入一种符号串,然后退出程序

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服