LL语法分析程序实验报告_第1页
LL语法分析程序实验报告_第2页
LL语法分析程序实验报告_第3页
LL语法分析程序实验报告_第4页
LL语法分析程序实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、LL1实验报告1.设计原理所谓的LL(1)分析方法是指从左到右扫描输入字符串(源程序),同时采用最左边的派生,对于每个直接派生只向前看一个输入符号来确定当前选择的规则。实现L1(1)分析的程序也称为L1(1)分析程序或LL1(1)分析器。我们知道,如果一个语法能够执行LL(1)分析,那么这个语法应该满足以下要求:没有歧义,没有左递归,没有左公共因子。在语法满足条件后,分别构造语法的每个非末端的第一和跟随集,然后根据第一和跟随集构造LL(1)分析表,最后利用分析表根据LL(1)语法分析构造分析器。LL(1)语法分析程序由三部分组成,即通用控制程序、预测分析表函数和先进先出语法分析堆栈。这个程序使

2、用相同的方法进行语法分析。该程序用C语言编写,其逻辑结构图如下:L1(1)预测分析程序的通用控制程序在任何时候根据堆栈顶部符号X和当前输入符号A执行哪个过程。对于任何(x,a),主控制程序每次都执行以下三种可能的操作之一:(1)如果X=a=# # ,则表明分析成功,分析过程停止。(2)如果X=a # # ,则X将从堆栈顶部弹出,并指向下一个输入符号。(3)如果x是非终止符,检查预测分析表M。如果MA,a存储了一个关于x的生产公式,则首先从堆栈顶部弹出x,然后生产公式的右符号串以相反的顺序一个接一个地从堆栈中弹出(如果右符号是,则没有任何东西被推入堆栈)。如果“错误标志”存储在MA,a中,则调用

3、错误诊断程序错误。事实上,对LL(1)的分析是根据语法构建的,它反映了相应语法所定义的语言的固定特征。因此,在L1(1)分析器中,实际上使用L1(1)分析表来代替相应的分析方法。2.分析LL (1)分析表是一个二维表。其表列符号是当前符号,包括语法的所有终止和自定义。句子结束符号#,其表格行符号是可能出现在语法符号堆栈SYN中的所有符号,包括所有非终止符、出现在产品右侧且不在第一个位置的所有终止符,以及自定义句子结束符号#表格条目。当前堆栈符号与当前符号匹配后所需的堆栈操作和输入操作。该条目指示语法的终结器和非终结器是否可以满足。其中,堆栈操作包括两种,一种是玩堆栈;第二,堆叠后,符号串ABc

4、被反转并堆叠。输入操作包括两种类型,一种是读取下一个符号,另一种是保持当前符号不变。具体算法是171。(1)让A和B是语法的非终结符,C是由语法的终结符和非终结符组成的字符串,A是语法的终结符,将所有生成的表达式分成四类:6)A-aB,然后项(A,A)被填充为(B被推回堆栈,下一个字符被读入):(ii)A-A;A-a,将项目(A,A)填写为(炸弹堆栈,读取下一个字符):(iii)A-BC,将项目(A,选择(A-BC)填写为(向后推BC,保持当前字符未读取):(iv)A-N,将项目(A,跟随(A)填写为(炸弹堆栈,保持当前字符未读取)。(2)循环表格行和列中的所有字符;(3)如果当前表行的字符是

5、非终止符,它必须具有生产类型。根据该生产类型的类型,填写表格项目。(4)如果当前表列中的字符不在此生产公式的选择集中,则此项目将被填写为Eror。(5)填写项目(#、#)为“确定”;(6)如果当前表行字符是终止符,只有当它与表列字符相同时,它才会被填充为(弹出堆栈,读入下一个字符),否则它将被填充为Eror。有效吗?阅读语法开始3.流程图是是LL(1)语法吗?目标报告错误判断句型是数据结构#包括 iostream.h #包括“stdio.h”#包括 malloc.h #包括“conio.h”结构Lcharchar char _ ch结构Lchar *下一步;Lchar,*p,*h,*temp,

6、*top,* basechar curcharchar curtocmpint rightint表58=1,0,0,1,0,0,0,1,0,0,1,11,0,0,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0 ;int i,j;空隙推进(char pchar)temp=(struct Lchar *)malloc(sizeof(Lchar);temp-char _ ch=pchar;temp-next=顶部;顶部=温度;无效弹出(无效)curtocmp=top-char _ ch;if(top-char_ch!=#)top=top-next;void doforpush(int t

7、)开关(t)案件0:推(一);推动(T);休息;案件5:推(一);推动(T);休息;案例11:推(一);推动(T);push();休息;案例20:推(二);推动(F);休息;案例23:推(二);推动(F);休息;案例32:推(二);推动(F);推送(*;休息;案例40:推(一);休息;case 43: push();推动(五);推送();void changchartoint()开关(curtocmp)案例a : I=1;休息;情况b : I=3;休息;案例e : I=0;休息;情况t : I=2;休息;情况:华氏度=4;开关(curchar)案例I :j=0;休息;案例:j=1;休息;cas

8、e * :j=2;休息;案例(:j=3;休息;病例):j=4;休息;案例# :j=5;空隙剂量(空隙)int t;用于(;)pop();cur char=h-char _ ch;printf(n%ct%c ,curchar,curto CMP);if(curtocmp=# curchar=#)休息;如果(简略的ocmp=A | |简略的ocmp=B | |简略的ocmp=E | |简略的ocmp=T | |简略的ocmp=F)如果(curtocmp!=#)Chang chart point();如果(表ij)t=10*i j .doforbush(t);继续;其他right=0;休息;其他如果

9、(curtocmp!=curchar)right=0;休息;其他休息;其他如果(curtocmp!=curchar)right=0;休息;其他h=h-下一个;继续;空隙总管(空隙)char chcout*文件名称: 语法分析下一个=空;base-char _ ch=#;temp=(struct Lchar *)malloc(sizeof(Lchar);temp-next=base;温度-char _ ch=E;顶部=温度;h=(struct Lchar *)malloc(sizeof(Lchar);下一个=空;p=h .做ch=getch();putch(ch);if(ch=I | | ch=| | ch=-| | ch=* | | ch=/| | ch=(| | ch=)| | ch=#)temp=(struct Lchar *)malloc(sizeof(Lchar);temp-next=空;temp-char _ ch=ch;h-下一个=温度;h=h-下一个;其他temp=p-next;printf( n输入错误的字符!再次输入: n

温馨提示

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

评论

0/150

提交评论