计算机13-3班实验报告超_第1页
计算机13-3班实验报告超_第2页
计算机13-3班实验报告超_第3页
计算机13-3班实验报告超_第4页
计算机13-3班实验报告超_第5页
免费预览已结束,剩余29页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译原理实专业班级:计算机科学与技术13-3课程教学班号0002 任课教编译原理实专业班级:计算机科学与技术13-3课程教学班号0002 任课教师实验指导教师实验地点20142015表示表示5)6)IsKey判断是否是关键字,返回true或false IsLetter 判断是否是字母,返回true 或false函数IsDigit 判断是否是数字,返回true 或函数IsFloat判断是否是小数,返回true或函数IsOptr判断是否是算数运算符,返回true或IsSeparator判断是否是分界符,返回true 或#include #include usingstring keywords8=

2、do,end,for,if,prstring optr4=+,-,*,/;stringseparator6=,;,(,); bool IsKey(string ss) returntrue; return false;returntrue; return false;bool IsLetter(char c) returntrue; return false;bool IsDigit(char c) returntrue; return false;boolIsFloat(stringss)k = m=0;m1)returntrue; else return false;boolIsOptr(

3、stringss)return true ;returnboolIsSeparator(stringssreturn true;returnstringcc=123; num = 0;num+=(ccy- 0) stringcc=123; num = 0;num+=(ccy- 0) coutpleaseinputaprogramendwith#endl; char a;charinstring100; string= ) / elseif(instringj=n)else /关键字else while(IsDigit(instringj)|instringjelse while(IsDigit

4、(instringj)|instringj=识符num= hinum+=(sty- 0)常数t(line,row) 分界符else coutt(,4)tt 关系case 关系运关系运算符关系运elsecoutt(,4)tt 关系else coutt(,4)tt 关系case 关系运关系运算符关系运elsecoutt(,4)t+TG|(3)G-(5)S-(6)S-(7)F-(8)F-LL(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量LL(1)LL(1)分析表对表达式符号串进行堆栈(LL(1)语法分析程序的编程,初步理解了语法分析器的作用,了解了语法分析usingstringLL(

5、1)语法分析程序的编程,初步理解了语法分析器的作用,了解了语法分析usingstringcharcharv120=i,+,-char j=0,b=0,top=0,l;/*Ltypedefstructtype/*产生式类型定义charorigin;/*大写字符 chararray7;/*typee,t,g,g0,g1,s,s0,s1,f,f1;/*结构体变量 type void()/*输出分析栈 voidvoidf( );char ch,x;typecha;/* coutpleastinputaprogramendwith#endl; =#; f(步骤ttttt所用产生式tx=Atop-;/*x

6、为当前栈顶字符*/ cout分析成功!endl;/*/ cout分析成功!endl;/*/ f(%c匹配 ss= if(cha.arraym!=ss= if(cha.arraym!=ss+= if(ss!=else return 0;LR(1)LR(1)分析法实LR(1)LR(1)分析法实验设(1)总控程序,也可以称为驱动程序。对所有的LR 分析器总控程序都是相同的。 (2)分析表或分析函数,不同的文法分析表将不同,同一个文法采用的LR 分析器(ACTION(3)分析栈,包括文法符号栈和相应的状态栈,它们均是先进后出栈LR其中:SP 为栈指针,Si为状其中:SP 为栈指针,Si为状态栈,Xi为

7、文法符号栈。状态转换表用 GOTOi,X=j表示,规定当栈顶状态为i,遇到当前文法符号为X时应转向状态j,X 为终结符或非终结符。ACTIONi,a规定了栈顶状态为 i 时遇到输入符号a 应执行。动作有四(1)移进actioni,aSj:状态j移入到状态栈,把a移入到文法符号栈,其中i,j表归约actioni,a=rkA,即文法中有AB的产生式,若B的长度为R(即|B|=R),则从状态栈和文法符号栈中自顶向下去掉R 个符号,即栈指针SP R,并把A 移入文法符号栈内, j=GOTOi,A移进状态栈,其中i 为修改指针后的栈顶状态。接受当归约到文法符号栈中只剩文法的开始符号S报错LR分析法是一个

8、有效的自下而上的分析技术,是可用于一类上下无关文法我认为都比较难。通过对LR分析器的编写,可以更好的理解LRLR分析法是一个有效的自下而上的分析技术,是可用于一类上下无关文法我认为都比较难。通过对LR分析器的编写,可以更好的理解LR分析法,理解 LR的一些基本概念,基本原理,action以及goto表的建立,分析的过程等,我action 表的动作,还是goto 表的状态转化,都要相应的掌握,LR分,掌握LRusingMaxLen=20; Length = 20; char ch;charbool flag = true;step=classcount = bool if(count=retur

9、ntrue; return false;bool if(countif(count=returntrue; return false;bool if(count=MaxLen) return true;returnboolget_top(char&c)const/获取栈顶符号 returnc = returnboolpush(constcharc)/压栈 returndount+ = returnboolpop()/出栈 returnfalse; returnvoid out()/void count;/chardataMaxLen;/void out()/void count;/charda

10、taMaxLen;/stackS,X;/void i,char*c)/void if(i=i,charif(c= cout,GOTO(0,E)=1入栈elseif(c = elseif(c = cout,GOTO(0,T)=2入栈elseif(c = cout,GOTO(0,F)=3 入栈flag=else if(i = 4) if(c=E)cout,GOTO(4,E)=8入栈elseif(c = cout,GOTO(4,T)=2入栈elseif(c = cout,GOTO(4,F)=3 入栈flag=else if(i = 6) if(c=T)cout,GOTO(6,T)入栈else if(

11、c = cout,GOTO(6,F)=3 入栈cout,GOTO(6,T)入栈else if(c = cout,GOTO(6,F)=3 入栈flag=elsecout,GOTO(7,F)=10 入栈flag=voidAction_0()/0 if(ch = i)coutACTION0,i=S5,5入栈endl; ch= else if(ch = () coutACTION0,(=S4,4入栈endl; ch= else if(ch = () coutACTION0,(=S4,4入栈endl; ch= flag=voidAction_1()/1 if(ch = +)coutACTION0,+=S

12、6,6入栈endl; ch= elseif(ch=#) flag = false;coutAcc:分析成功flag=voidAction_2()/2 if(ch = *)coutAcc:分析成功flag=voidAction_2()/2 if(ch = *)coutACTION2,*=S7,7入栈endl; ch= elseif(ch=+|ch=)|ch=#) coutT规约; flag=voidAction_3()/if(ch = + | ch = * | ch=)|ch=#) flag=voidAction_3()/if(ch = + | ch = * | ch=)|ch=#) flag=

13、voidif(ch=coutx,i=S5,5入栈endl; ch= else if(ch = () coutx,(=S4,4入栈ch= else if(ch = () coutx,(=S4,4入栈endl; ch= flag=voidAction_5()/if(ch=+)|(ch=*)|(ch=)|(ch=#) couti规约; flag=voidAction_8()/8 if(ch = +)coutACTION8,+=S6,6flag=voidAction_8()/8 if(ch = +)coutACTION8,+=S6,6入栈endl; ch= else if(ch = ) ch= flag=voidAction_9()/9 if(ch = *)coutACTION9,*=S7,7入栈endl; voidAction_9()/9 if(ch = *)coutACTION9,*=S7,7入栈endl; ch= elseif(ch=+)|(ch=)|(ch= #) coutE+T规约; flag=voidAction_10()/if(ch=+) |(chvoidActi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论