版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LL(1)语法分析实验报告一、实验目的通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,检查语法错误,进一步掌握常用的语法分析方法。二、实验内容构造LL(1)语法分析程序,任意输入一个文法符号串,并判断它是否为文法的一个句子。程序要求为该文法构造预测分析表,并按照预测分析算法对输入串进行语法分析,判别程序是否符合已知的语法规则,如果不符合则输出错误信息。消除递归前的文法
2、0; 消除递归后的等价文法 EE+T ETE ET
3、; E+TE| TT*F TFT TF
4、0; T*FT| F(E)|i F(E)|i根据已建立的分析表,对下列输入串:i+i*i进行语法分析,判断其是否符合文法。三、实验要求1.根据已由的文法规则建立LL(1)分析表;2
5、.输出分析过程。请输入待分析的字符串: i+i*i 符号栈 输入串 所用产生式 #E i+i*i#
6、; ETE #ET i+i*i# TFT #ETF i+i*i#
7、0; Fi #ETi i+i*i# #ET +i*i# T &
8、#160; #E +i*i# E+TE #ET+ +i*i# #ET
9、160; i*i# TFT #ETF i*i# Fi #ET
10、i i*i# #ET *i# T*FT #ETF*
11、; *i# #ETF i# Fi #ETi i#
12、 #ET # T #E #
13、; E # #四、程序思路模块结构:1、定义部分:定义常量、变量、数据结构。2、初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体等);3、运行程序:让程序分析一个text文件,判断输入的字符串是否符合文法定义的规则;4、利用LL(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示简单的错误提示。五、
14、程序流程图输入要分析的串判断输入串是否正确判断分析句型是否完全匹配?成功失败否是是否 八、程序调试与测试结果运行后结果如下:九、实验心得递归下降分析法是确定的自上而下分析法,这种分析法要求文法是LL(1)文法。它的基本思想是,对文法中的每个终结符编写一个函数(或子程序),每个函数(或子程序)的功能是识别由该非终结符所表示的语法成分。由于描述语言的文法常常是递归定义的,因此相应的这组函数(或子程序)必然以相互递归的方式进行调用。当然实验中我也发现了自己的不足之处,我会在今后的学习生活中努力提高自己的编程水平.附件:程序清单:/* 程序名称: LL(1)文法分析程序 */* E->
15、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 *next;Lchar,*
16、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_ch;if(top->
17、;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;case 23:push(
18、39;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;case 'E&
19、#39;: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_ch;printf(&q
20、uot;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;elseright=0;
21、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<<"/* 程序相关说明 */"<<endl;
22、60; cout<<"-"<<endl; cout<<"-/* A=E B=T */"<<endl; cout<<"-* 目的:对输入LL(1)文法字符串,本程序能自动判断所给字符串是 -"<<endl; cout<<"-*否为所给文法的句子,并能给出分析过程。
23、60; -"<<endl; cout<<"-*-"<<endl; cout<<"表达式文法为:"<<endl; cout<<" E->E+T|T"<<endl; cout<<"T->T*F|F"<<endl; cout<<"F->(E)|i"<<endl; cout<<"请在下行输入要分析的串(#号结束):"<<endl;rig
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 糖尿病病例在航空医学中的应用
- 农业科技进展:蔬菜病虫害防治
- 温胆汤在妇产科疾病治疗中的应用
- 老年糖尿病的皮肤护理
- 购房智能家居房合同
- 农业知识:月季病虫害防治全解析
- 小学二年级数学100以内三数加减混合运算综合监控模拟题大全附答案
- 100以内加减法竖式计算同步测验口算题
- 公园环境保护与治理
- 糖尿病营养补充:保健品选择
- 服装和纺织品制造行业网络安全与威胁防护
- 初中英语课堂教学中的师生互动研究
- 电力工业技术监督工作规定
- 全国职业院校教学能力比赛教学设计
- 图书馆运营管理服务投标方案
- 同济大学信纸
- 专题训练:填空题 教科版小学科学六年级下册(含答案)
- 水库安全鉴定报告
- 2023年高考化学全国新课标卷试题解读及答案讲解课件(精编)
- 2023学年完整公开课版日晷
- 2023年天津市和平区中考二模语文试题(解析版)
评论
0/150
提交评论