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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(实验三预测分析.docx)为本站会员(HR专家)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

实验三预测分析.docx

1、个人资料整理,仅供个人学习使用实验三:预测分析1.实验目的:掌握预测分析程序的分析、设计与实现的基本技术与一般方法。2.实验题目:编写并上机调试完成识别由下列文法所定义的表达式的预测分析程序。-T | T3.实验步骤分析消除左递归文法转化为:E-TE E- +T E |-TE | -FT T-*FT |/FT -(E)|iF 矚慫润厲钐瘗睞枥庑赖賃軔朧。2,判断是否为LL(1) 文法:(1) 求 First() , Follow(),Select() 集First(E)=(,iFollow(E)=),#First(E )=+,- Follow(E )=),#First(T)=(,i Follo

2、w(T)=+,-,),#First(T )=*,/, Follow(T )=+,-,),#First(F)=(,i Follow(F)=*,/,+,-,),#Select(E-TE )=(,i Select(E -+T E )=+Select(E -T E )=-Select(E - ) = ,),#Select(T-FT )=(,i Select(T -*FT )=*Select(T -/FT )=/Select(T - )= ,+,),#Select(F-(E)=(Select(F-i)=i由上可知,相同的左部产生式的Select 集的交集为空,所以为LL(1) 文法由 Select 集构

3、造预测分析表i+-*/()#E-TE 0-TE 5E- +T E 11 - - TE 12-T-FT 20-FT 25T-*FT 33 -/FT 34-F-i40-(E)45(2) 设计算法流程框图:1 / 6个人资料整理,仅供个人学习使用程序参考源码/*/*程序名称:LL(1) 文法分析程序*/*程序用途:编译原理实验 (三 )*/*编写日期:20XX 年 11 月 9 日*/*实验题目:识别下列表达式*/*E-E+T|E-T|T*/*T-T*F|T/F|F*/*F-(E)|i*/*程序版本:1.0 Final*/*程序作者:黄记瑶 B0226047*/*作者邮箱:*/*/*/*程序相关说明

4、*/*A=EB=T*/*0=E 1=E 2=T 3=T 4=F*/*0=i 1=+ 2=- 3=* 4=/ 5=( 6=) 7=#*/*/#include stdio.h#include malloc.hstruct Lcharchar char_ch;struct Lchar *next;Lchar,*p,*h,*temp,*top,*base;char curchar;/ 存储当前待比较字符char curtocmp;/ 存储当前栈顶字符2 / 6个人资料整理,仅供个人学习使用int right;/ 定义开关项int table58=1,0,0,0,0,1,0,0,0,1,1,0,0,0,

5、1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,0,1,0,0;/存储预测分析表,1 为有产生式,0 为没有int i,j;void push(char pchar)/ 入栈函数temp=malloc(sizeof(Lchar);temp-char_ch=pchar;temp-next=top;top=temp;void pop(void) / 出栈函数curtocmp=top-char_ch;if(top-char_ch!=#)top=top-next;void doforpush(int t)/ 根据数组下标计算的值产生式入栈switch(t)cas

6、e 0:push(A);push(T);break;case 5:push(A);push(T);break;case 11:push(A);push(T);push(+);break;case 12:push(A);push(T);push(-);break;case 20:push(B);push(F);break;case 25:push(B);push(F);break;case 33:push(B);push(F);push(*);break;case 34:push(B);push(F);push(/);break;case 40:push(i);break;case 45:pus

7、h();push(E);push();void changchartoint()/ 根据 curchar,curtocmp 转为数字以判断是否有产生式聞創沟燴鐺險爱氇谴净祸測樅。switch(curtocmp)case A:i=1;break;case B:i=3;break;case E:i=0;break;3 / 6个人资料整理,仅供个人学习使用case T:i=2;break;case F:i=4;switch(curchar)case i:j=0;break;case +:j=1;break;case -:j=2;break;case *:j=3;break;case /:j=4;br

8、eak;case (:j=5;break;case ):j=6;break;case #:j=7;void dosome(void)/ 算法函数int t;for(;)pop();curchar=h-char_ch;printf(n%ct%cn,curchar,curtocmp);if(curtocmp=# & curchar=#)break;if(curtocmp=A|curtocmp=B|curtocmp=E|curtocmp=T|curtocmp=F)残骛楼諍锩瀨濟溆塹籟婭骒東。/当前字符为非终结符if(curtocmp!=#)/ 当前比较字符不为 #changchartoint();i

9、f(tableij)/有产生式t=10*i+j; / 计算产生式在数组中的位置doforpush(t);continue;Else/没有产生式right=0; / 出错break;4 / 6个人资料整理,仅供个人学习使用else/当前比较字符为 #if(curtocmp!=curchar)right=0; / 出错break;elsebreak;/正确Else/当前字符为终结符if(curtocmp!=curchar)right=0;/ 出错break;elseh=h-next;/ 读取下一个字符continue;void main(void)char ch;right=1;/ 开关项为1ba

10、se=malloc(sizeof(Lchar);/ 初始化堆栈base-next=NULL;base-char_ch=#;temp=malloc(sizeof(Lchar);temp-next=base;temp-char_ch=E;top=temp;/ 初始化堆栈h=malloc(sizeof(Lchar);h-next=NULL;p=h;do/ 初始化字符串ch=getch();putch(ch);if(ch=i|ch=+|ch=-|ch=*|ch=/|ch=(|ch=)|ch=#)/输入合法字符酽锕极額閉镇桧猪訣锥顧荭钯。temp=malloc(sizeof(Lchar);temp-ne

11、xt=NULL;5 / 6个人资料整理,仅供个人学习使用temp-char_ch=ch;h-next=temp;h=h-next;Else/输入不合法字符temp=p-next;printf(nInput a wrong char!Input again:n);for(;) / 打印当前字符串if (temp!=NULL)printf(%c,temp-char_ch);elsebreak;temp=temp-next;while(ch!=#); /初始化字符串p=p-next;h=p;dosome(); /开始识别if(right)/ 如果开关项为1printf(nOK!n);elseprintf(nError!n);getch();6 / 6

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报