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

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上LL(1)语法分析实验报告一、实验目的通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,检查语法错误,进一步掌握常用的语法分析方法。二、实验内容构造LL(1)语法分析程序,任意输入一个文法符号串,并判断它是否为文法的一个句子。程序要求为该文法构造预测分析表,并按照预测分析算法对输入串进行语法分析,判别程序是否符合已知的语法规则,如果不符合则输出错误信息。消除递归前的文法            

2、60;      消除递归后的等价文法    EE+T                        ETE    ET           

3、0;           E+TE|    TT*F                        TFT    TF        

4、60;              T*FT|    F(E)|i                      F(E)|i根据已建立的分析表,对下列输入串:i+i*i进行语法分析,判断其是否符合文法。三、实验要求1.根据已由的文法规

5、则建立LL(1)分析表;2.输出分析过程。请输入待分析的字符串: i+i*i    符号栈         输入串          所用产生式        #E         i+i*i#    

6、0;     ETE       #ET         i+i*i#          TFT      #ETF         i+i*i#    

7、60;     Fi      #ETi         i+i*i#           #ET          +i*i#          T

8、        #E          +i*i#          E+TE      #ET+          +i*i#       #ET&

9、#160;          i*i#          TFT      #ETF           i*i#          Fi   

10、60;  #ETi           i*i#       #ET           *i#          T*FT     #ETF*    

11、0;       *i#      #ETF            i#          Fi     #ETi            i

12、#     #ET             #          T       #E            #     

13、0;    E        #            #四、程序思路模块结构:1、定义部分:定义常量、变量、数据结构。2、初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体等);3、运行程序:让程序分析一个text文件,判断输入的字符串是否符合文法定义的规则;4、利用LL(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误

14、则显示简单的错误提示。五、程序流程图输入要分析的串判断输入串是否正确判断分析句型是否完全匹配?成功失败否是是否 八、程序调试与测试结果运行后结果如下:九、实验心得递归下降分析法是确定的自上而下分析法,这种分析法要求文法是LL(1)文法。它的基本思想是,对文法中的每个终结符编写一个函数(或子程序),每个函数(或子程序)的功能是识别由该非终结符所表示的语法成分。由于描述语言的文法常常是递归定义的,因此相应的这组函数(或子程序)必然以相互递归的方式进行调用。当然实验中我也发现了自己的不足之处,我会在今后的学习生活中努力提高自己的编程水平.附件:程序清单:/* 程序名称: LL(1)文法分析

15、程序 */* E->E+T|T */* T->T*F|F */* F->(E)|i */ /* 程序相关说明 */* A=E B=T */* 0=E 1=E 2=T 3=T 4=F */* 0=i 1=+  2=*  3=( 6=) 4=# */#include"iostream.h"#include "stdio.h"#include "malloc.h"#include "conio.h"struct Lcharchar char_ch;struct Lchar

16、*next;Lchar,*p,*h,*temp,*top,*base;char curchar;char curtocmp;int right;int table58=1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0;int i,j;void push(char pchar)temp=(struct Lchar*)malloc(sizeof(Lchar);temp->char_ch=pchar;temp->next=top;top=temp;void pop(void)curtocmp=top->char_

17、ch;if(top->char_ch!='#')top=top->next;void doforpush(int t)switch(t)case 0:push('A');push('T');break;case 5:push('A');push('T');break;case 11:push('A');push('T');push('+');break;case 20:push('B');push('F');break;ca

18、se 23:push('B');push('F');break;case 32:push('B');push('F');push('*');break;case 40:push('i');break;case 43:push(')');push('E');push('(');void changchartoint()switch(curtocmp)case 'A':i=1;break;case 'B':i=3;break

19、;case 'E':i=0;break;case 'T':i=2;break;case 'F':i=4;switch(curchar)case 'i':j=0;break;case '+':j=1;break;case '*':j=2;break;case '(':j=3;break;case ')':j=4;break;case '#':j=5;void dosome(void)int t;for(;)pop();curchar=h->char

20、_ch;printf("n%ct%c",curchar,curtocmp);if(curtocmp='#' && curchar='#')break;if(curtocmp='A'|curtocmp='B'|curtocmp='E'|curtocmp='T'|curtocmp='F')if(curtocmp!='#')changchartoint();if(tableij)t=10*i+j;doforpush(t);continue

21、;elseright=0;break;elseif(curtocmp!=curchar)right=0;break;elsebreak;elseif(curtocmp!=curchar)right=0;break;elseh=h->next;continue;void main(void)char ch;cout<<"* 文件名称: 语法分析"<<endl;cout<<"   "<<endl;cout<<"/* 程序相关说明 */"<<e

22、ndl;       cout<<"-"<<endl;       cout<<"-/* A=E B=T */"<<endl;   cout<<"-* 目的:对输入LL(1)文法字符串,本程序能自动判断所给字符串是 -"<<endl;   cout<<"-*否为所给文法的句子

23、,并能给出分析过程。  -"<<endl;   cout<<"-*-"<<endl;       cout<<"表达式文法为:"<<endl;       cout<<" E->E+T|T"<<endl;       cout<<"T->T*F|F"<<endl;       cout<<"F->(E)|i"<<endl;       cout<<"请在下行输入要分析的串(#号结束):"<<endl;right=1;b

温馨提示

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

最新文档

评论

0/150

提交评论