LL1分析法实验报告二.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验二 LL(1)分析法 一、实验目的 通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培养适应社会多方面需要的能力。 二、实验内容 根据某一文法编制调试 LL ( 1 )分析程序,以便对任意输入的符号串进行分析。 构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。 分析法的功能是利用LL(1)控制程序根据显示栈栈顶内容、向前看符号以及LL(1)分析表,对输入符号串自上而下的分析过程。 三、 LL(1)分析法实验设计思想及算法 模块结构: (1)定义部分:定义常量、变量、数据结构。 (2)初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等); (3)控制部分:从键盘输入一个表达式符号串; (4)利用LL(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。 四、实验要求 1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。 2、如果遇到错误的表达式,应输出错误提示信息。 3、对下列文法,用LL(1)分析法对任意输入的符号串进行分析: (1)E-TG(2)G-+TG|—TG(3)G-ε(4)T-FS(5)S-*FS|/FS (6)S-ε(7)F-(E)(8)F-i 五、实验步骤 1、根据流程图编写出各个模块的源程序代码上机调试。 LL(1)分析法的实验源程序代码如下: #includeiostream.h #include stdio.h #includestdlib.h #includestring.h char A[20]; /*分析栈*/ char B[20]; /*剩余串*/ char v1[20]={i,+,*,(,),#}; /*终结符*/ char v2[20]={E,G,T,S,F}; /*非终结符*/ int j=0,b=0,top=0,l; /*L为输入串长度*/ void print1() /*输出剩余串*/ { int j; for(j=0;jb;j++) /*输出对齐符*/ cout ; for(j=b;j=l;j++) coutB[j]; cout\t\t\t; } do/*读入分析串*/ { cinch; if ((ch!=i) (ch!=+) (ch!=*)(ch!=()(ch!=))(ch!=#)) { cout输入串中有非法字符\n; exit(1); //强制退出程序 } B[j]=ch; j++; }while(ch!=#); l=j;/*分析串长度*/ ch=B[0];/*当前分析字符*/ A[top]=#; A[++top]=E;/*#,E进栈*/ cout步骤\t\t分析栈 \t\t剩余字符 \t\t所用产生式 \n; do { x=A[top--];/*x为当前栈顶字符*/ coutk++; cout\t\t; for(j=0;j=5;j++)/*判断是否为终结符*/ if(x==v1[j]) { flag=1; break; } if(flag==1)/*如果是终结符*/ { if(x==#) { finish=1;/*结束标记*/ coutacc!\n;/*接受 */ getchar(); getchar(); exit(1); //退出程序 }/*if*/ if(x==ch) { print(); print1(); cout匹配\nch; ch=B[++b];/*下一个输

文档评论(0)

有志者事竟成 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7114163151000053

1亿VIP精品文档

相关文档