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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验五SLR语法分析器.docx

1、实验五SLR语法分析器编译原理实验报告实验序号: 05实验项目名称: SLR语法分析器学号姓名专业、班实验地点指导教师实验时间一、实验目的及要求 利用SLR文法的原理,掌握非递归预测分析的编程方法。二、实验设备(环境)及要求 确定开发工具,如TC、VC、VC+、Delphi等;花一周时间熟悉开发工具。花一周时间确定被处理的语言的语法特点(初步确定,也可使用现成语言如Pascal、C等)。写好实验报告,编好程序。三、实验内容与步骤 利用c语言实现以下SLR文法的分析程序。 文法的开始符号为: E-E+TE-TT-T*FT-FF-(E)F-id实验步骤1、建立该文法的分析表;2、编程实现LR分析程

2、序。 四、实验结果与数据处理 1文法分析表:2.程序分析:实验源程序:#include #include int Action126= 105,0,0,104,0,0, 0,106,0,0,0,-1, 0,52,107,0,52,52, 0,54,54,0,54,54, 105,0,0,104,0,0, 0,56,56,0,56,56, 105,0,0,104,0,0, 105,0,0,104,0,0, 0,106,0,0,111,0, 0,51,107,0,51,51, 0,53,53,0,53,53, 0,55,55,0,55,55; int Goto123= 1,2,3, 0,0,0,

3、0,0,0, 0,0,0, 8,2,3, 0,0,0, 0,9,3, 0,0,10, 0,0,0, 0,0,0, 0,0,0, 0,0,0 ; char Grammar2010=0; char VT10,VN10; char AVT6=i,+,*,(,),#; char GVN3=E,T,F; int vnNum,vtNum,stateNum=12; int VNum10; int grammarNum; typedef struct char *base; char *top; SymbolStack; typedef struct int *base; int *top; StateSta

4、ck; StateStack state; SymbolStack symbol; int ScanGrammar() FILE *fp=fopen(SLR文法.txt,r); FILE *tp; char singleChar,nextChar; int i=0,j=0,k,count; while(!feof(fp) fscanf(fp,%c,&singleChar); if(singleChar=?) Grammarij=0; break; if(singleChar=n) Grammarij=0; i+; j=0; continue; if(singleChar=-) tp=fp; f

5、scanf(tp,%c,&nextChar); if(nextChar=) fp=tp; continue; if(singleChar=|) Grammari+10=Grammari0; Grammarij=0; i+; j=1; continue; Grammarij=singleChar; if(singleChar=A&singleChar=Z) count=0; while(VNcount!=singleChar&VNcount!=0) count+; if(VNcount=0) vnNum=count+1; if(singleChar=S) j+; continue; VNcoun

6、t=singleChar; vnNum=count+1; else count=0; while(VTcount!=singleChar&VTcount!=0) count+; if(VTcount=0) VTcount=singleChar; vtNum=count+1; j+; printf(输入的文法:n); for(k=0;k); printf(%c,Grammarkj); j+; printf(n); count=0; printf(VT:); while(VTcount!=0) printf(%3c,VTcount); count+; VTcount=#; vtNum=count+

7、1; printf(%3c,VTcount); printf(nVN:); count=0; while(VNcount!=0) printf(%3c,VNcount); count+; printf(n); / printf(n%d %dn,vtNum,vnNum); fclose(fp); grammarNum=i+1; return i; int vNumCount() int i,j; for(i=0;igrammarNum;i+) j=1; while(Grammarij!=0) j+; VNumi=j; / printf(%3d,VNumi); printf(n); return

8、0; void InitStack() state.base=(int *)malloc(100*sizeof(int); if(!state.base)exit(1); state.top=state.base; *state.top=0; symbol.base=(char *)malloc(100*sizeof(char); if(!symbol.base)exit(1); symbol.top=symbol.base; *symbol.top=#; int Judge(int stateTop,char inputChar) int i,j; for(i=0;istateNum;i+)

9、 if(stateTop=i)break; for(j=0;jvtNum;j+) if(inputChar=AVTj)break; return Actionij; int GetGoto(int stateTop,char inputChar) int i,j; for(i=0;istateNum;i+) if(stateTop=i)break; for(j=0;jvnNum;j+) if(inputChar=GVNj)break; return Gotoij; int print(int count,int i,char Input,int action,int gt,int sign)

10、int *p=state.base,stateNum; int j,jj; char *q=symbol.base,symbolNum; printf(%dt,count); while(p!=state.top+1) stateNum=*p; printf(%d,stateNum); p+; printf(t); while(q!=symbol.top+1) symbolNum=*q; printf(%c,symbolNum); q+; printf(t); j=i; jj=0; while(jj=A&Inputi=100) sign=1; action=ssValue-100; state

11、.top+; *state.top=action; symbol.top+; *symbol.top=Inputi; i+; print(count,i,Input,action,0,sign); count+; if(ssValue=50&ssValue100) sign=2; action=ssValue-50; gt=Pop(action); print(count,i,Input,action,gt,sign); count+; return 0; int main() ScanGrammar(); vNumCount(); InitStack(); Reduction(); return 0; 五、分析与讨论通过此次试验我学会了:掌握非递归预测分析的编程方法。成绩

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

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