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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

SLR分析器设计实验报告.docx

1、SLR分析器设计实验报告 编译原理实验报告 题目: SLR(1)分析器的设计 学 院 计算机科学及技术 专 业 xxxxxxxxxxxxxxxxx 学 号 xxxxxxxxxxxxx 姓 名 宁剑 指导教师 xx 20xx年xx月xx日SLR(1)分析器的设计一、实验目的 构造LR(1)分析程序,利用它进行语法分析,判断给出的符号串是否为该文法识别的句子,了解LR(K)分析方法是严格的从左向右扫描,和自底向上的语法分析方法。二、实验原理 对下列文法,用LR(1)分析法对任意输入的符号串进行分析:S-EE-E+TE-TT-T*FT-FF-(E)F-i三、实验步骤1.总控程序,也可以称为驱动程序。

2、对所有的LR分析器总控程序都是相同的。2.分析表或分析函数,不同的文法分析表将不同,同一个文法采用的LR分析器不同时,分析表将不同,分析表又可以分为动作表(ACTION)和状态转换(GOTO)表两个部分,它们都可用二维数组表示。3.分析栈,包括文法符号栈和相应的状态栈,它们均是先进后出栈。分析器的动作就是由栈顶状态和当前输入符号所决定。LR分析器由三个部分组成:其中:SP为栈指针,Si为状态栈,Xi为文法符号栈。状态转换表用GOTOi,X=j表示,规定当栈顶状态为i,遇到当前文法符号为X时应转向状态j,X为终结符或非终结符。ACTIONi,a规定了栈顶状态为i时遇到输入符号a应执行。动作有四种

3、可能:(1)移进:actioni,a=Sj:状态j移入到状态栈,把a移入到文法符号栈,其中i,j表示状态号。(2)归约:actioni,a=rk:当在栈顶形成句柄时,则归约为相应的非终结符A,即文法中有A-B的产生式,若B的长度为R(即|B|=R),则从状态栈和文法符号栈中自顶向下去掉R个符号,即栈指针SP减去R,并把A移入文法符号栈内,j=GOTOi,A移进状态栈,其中i为修改指针后的栈顶状态。 (3)接受acc:当归约到文法符号栈中只剩文法的开始符号S时,并且输入符号串已结束即当前输入符是#,则为分析成功。 (4)报错: 当遇到状态栈顶为某一状态下出现不该遇到的文法符号时,则报错,说明输入

4、端不是该文法能接受的符号串。 【实验要求】 1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。2、如果遇到错误的表达式,应输出错误提示信息。3、程序输入/输出实例:输入一以#结束的符号串(包括+*/()i#):在此位置输入符号串 输出过程如下: 步骤 状态栈 符号栈 剩余输入串 动 作 1 0 # i+i*i#四、实验环境计算机 DEV C+软件五、实验程序#include#includeint 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

5、,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, 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,state

6、Num=12;int VNum10;int grammarNum;typedef struct char *base; char *top;SymbolStack;typedef struct int *base; int *top;StateStack;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,&si

7、ngleChar); if(singleChar=?) Grammarij=0; break; if(singleChar=n) Grammarij=0; i+; j=0; continue; if(singleChar=-) tp=fp; fscanf(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)

8、 count=0; while(VNcount!=singleChar&VNcount!=0) count+; if(VNcount=0) vnNum=count+1; if(singleChar=S) j+; continue; VNcount=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(

9、%c,Grammarkj); j+; printf(n); count=0; printf(VT:); while(VTcount!=0) printf(%3c,VTcount); count+; VTcount=#; vtNum=count+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 v

10、NumCount() int i,j; for(i=0;igrammarNum;i+) j=1; while(Grammarij!=0) j+; VNumi=j; /?printf(%3d,VNumi); printf(n); return 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.b

11、ase) exit(1); symbol.top=symbol.base; *symbol.top=#;int Judge(int stateTop,char inputChar) int i,j; for(i=0;istateNum;i+) 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; f

12、or(j=0;jvnNum;j+) if(inputChar=GVNj) break; return Gotoij;int print(int count,int i,char Input,int action,int gt,int sign) 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.to

13、p+1) symbolNum=*q; printf(%c,symbolNum); q+; printf(t); j=i; jj=0; while(jj=A&Inputi=100) sign=1; action=ssValue-100; state.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(); system(pause); return 0;【运行结果】 【程序如图】

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

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