




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验二:自上而下语法分析一、实验目的:根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对自上而下分析法的理解。二、实验预习提示自下而上分析法的前提改造文法:消除二义性、消除左递归、提取左因子,判断是否为LL(1)文法A递归下降1、递归下降分析法的功能词法分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。2、递归下降分析法实验设计思想及算法为G的每个非终结符号U构造一个递归过程,不妨命名为U。U的产生式的右边指出这个过程的代码结构:(1)
2、若是终结符号,则和向前看符号对照,若匹配则向前进一个符号;否则出错。(2)若是非终结符号,则调用与此非终结符对应的过程。当A的右部有多个产生式时,可用选择结构实现。具体为:(1)对于每个非终结符号U-u1|u2|un处理的方法如下:U( )ch=当前符号;if(ch可能是u1字的开头) 处理u1的程序部分;else if(ch可能是u2字的开头)处理u2的程序部分;else error() (2)对于每个右部u1-x1x2xn的处理架构如下:处理x1的程序;处理x2的程序; 处理xn的程序;(3)如果右部为空,则不处理。(4)对于右部中的每个符号xi如果xi为终结符号:if(xi= = 当前的
3、符号) NextChar(); return; else出错处理如果xi为非终结符号,直接调用相应的过程xi()说明: NextChar为前进一个字符函数。BLL(1)分析法1、LL(1)分析法的功能LL(1)分析法的功能是利用LL(1)控制程序根据显示栈栈顶内容、向前看符号以及LL(1)分析表,对输入符号串自上而下的分析过程。XVN#S进栈,当前输入符送a上托栈顶符号放入X若产生式为X X1X2Xn按逆序即XnX2X1入栈出错X=#XVTX=aMX,a是产生式吗出错X=a读入下一个符号结束是是是是否否否否否是2、LL(1)分析法实验设计思想及算法三、实验过程和指导:(一)准备:1.阅读课本有
4、关章节,2.考虑好设计方案;3.设计出模块结构、测试数据,初步编制好程序。(二)上课上机:将源代码拷贝到机上调试,发现错误,再修改完善。第二次上机调试通过。(三)程序要求:程序输入/输出示例:对下列文法,用两种分析法对任意输入的符号串进行分析:(1)E-TG(2)G-+TG (3)G-(4)T-FS(5)S-*FS(6)S-(7)F-(E)(8)F-i输出的格式如下:(1)递归下降分析程序输入一以#结束的符号串(包括+*/()i#):在此位置输入符号串例如:i+i*i#输出结果:i+i*i#为合法符号串备注:输入一符号串如i+i*#,要求输出为“非法的符号串”。(2)LL(1)分析:输入一以#
5、结束的符号串(包括+*/()i#):在此位置输入符号串例如:i+i*i#输出结果:i+i*i#为合法符号串注意:1.表达式中允许使用运算符(+-*/)、分割符(括号)、字符I,结束符#;2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);3.对学有余力的同学,可以详细的输出推导的过程,即详细列出每一步使用的产生式。分析栈剩余输入串所用产生式Ei+i*i#E-TG4.与读文件有关的函数:FILE *fp; if(fp=fopen(E:222.txt,r)=NULL) /读取文件内容,并返回文件指针,该指针指向文件的第一个字符fprintf(stderr,error opening.
6、n); exit(1); fgetc(fp) 从数据流中区下一个字符fopen 文件打开函数,返回指向文件第一个字符的指针(四)程序思路(仅供参考):递归下降分析法:0.定义部分:定义常量、变量、数据结构。1.初始化:从文件将输入符号串输入到字符缓冲区中。2.利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。LL(1)分析法:模块结构:1、定义部分:定义常量、变量、数据结构。2、初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体等);3、运行程序:让程序分析一个text文件,判断输入的字符串是否符合文法定义的规则;4、利用LL(1)分析算法进行表达式
7、处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示简单的错误提示。部分代码示例:#include#include#include#includestruct Stackchar s30;int top; /*栈顶指针 */S1;char v16=i,+,*,(,),#;/*终结符 */char v25=E,G,T,S,F;/*非终结符 */*用二维数组保存预测分析表,可用符号来代替,注意字符串结束位自动加0 */char table564=“TG”,”,”,”,”TG”,”,void print()/*输出分析栈 */int a;/*指针*/for
8、(a=0;aS1.top;a+)coutS1.sa;coutendl;/*print*/void intialstack() S1.top=0;void push(char ch) S1.sS1.top=ch;S1.top+;char pop( ) S1.top-;return S1.sS1.top; void jinzhan(int hang,int lie) .int iszhongjie(char X ) ./*判断X是否为终结符,返回下标*/bool chabiao(char X,char sym)/*判断X是否为非终结符,sym是否为终结符,若是查找预测表对应表格是否为空白,是则出错
9、,否则进栈*/void main() FILE *fp;char sym,X;bool flag,cuo; if(fp=fopen(E:222.txt,r)=NULL) /读取文件内容,并返回文件指针,该指针指向文件的第一个字符fprintf(stderr,error opening.n); exit(1); initialstack();push(#);push(E);sym=fgetc(fp);/*把第一个输入符号读进sym*/flag=true;cuo=falsewhile (flag&!error) X=pop();if (X=#) .else if iszhongjie(X) els
10、e if(!chabiao(X,sym) cuo=true;(五)练习该实验的目的和思路:需要利用程序设计语言的知识和大量编程技巧,通过这个练习可大大提高软件开发能力。通过练习,掌握函数间相互调用的方法。(六)为了能设计好程序,注意以下事情:1.模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。2.写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。3.编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。五、上交:实验报告:实验名称实验目的和要求(一)实验内容(1)功能描述:该程序具有什么功能?(2)程序结构描述:函数调用格式、参数含义、返回值描述、函数
11、功能;函数之间的调用关系图。(3)程序源代码(二)实验过程记录:出错次数、出错严重程度、解决办法摘要。(三)实验总结:你在编程过程中花时多少?遇到了哪些难题?你是怎么克服的?你的收获有哪些?自上而下分析算法#include#include#define ERROR 0 char sym; /用于临时存储文件中读出的单个字符FILE *fp; /读取文件的指针/非终结符定义的方法 void e();void g();void t();void s();void f();/读取文件中的下一个字符void advance();void main() if(fp=fopen(E:222.txt,r)=
12、NULL)/读取文件内容,并返回文件指针,该指针指向文件的第一个字符 fprintf(stderr,error opening.n); exit(1); e();/对应产生式(1)E-TGvoid e()advance();t();g();if(sym=#)printf(输入的为合法的字符串n);else printf(非法字符串);/对应产生式(2)G-+TG (3)G- 空 :不做任何处理void g()if(sym =+)printf(+);advance(); t();g();/对应产生式 (4)T-FSvoid t()f();s();/ 对应产生式(5)S-*FS (6)S-void
13、 s()if(sym=*)printf(*);advance();f();s();/对应产生式(7)F-(E) (8)F-ivoid f()if(sym=()advance();e(); if(sym=) advance(); else printf(非法字符串); exit(ERROR); else if(sym=i) printf(i);advance();else printf(非法字符串);exit(ERROR);void advance()sym=fgetc(fp);/ 从数据流中区下一个字符预测表分析法#include#include#include#includestruct S
14、tackchar s30;int top; /*栈顶指针 */S1;int num=0;char v16=i,+,*,(,),#;/*终结符 */char v25=E,G,T,S,F;/*非终结符 */*用二维数组保存预测分析表,可用符号来代替,注意字符串结束位自动加0 */char table564=GT,GT,GT+,SF,SF,SF*,i,)E(,;void print()/*输出分析栈 */int a;/*指针*/for(a=0;aS1.top;a+)printf(%c,S1.sa);printf(t);/*print*/void intialstack() S1.top=0;/*初始
15、化栈*/void push(char ch) S1.sS1.top=ch;S1.top+;/*压栈*/char pop( ) S1.top-;return S1.sS1.top; /*出栈*/void jinzhan(int hang,int lie) char *chuan;chuan=tablehanglie;chuan3=0;int i=0;while(chuani!=NULL&chuan0!=) push(chuani);i+;/*进栈操作,将符号串数组压入栈中*/int iszhongjie(char X )for(int i=0;i6;i+)if(X=v1i)return i;re
16、turn -1;/*判断X是否为终结符,返回下标*/int isfzhongjie(char X )for(int i=0;i,X);for(int i=(strlen(tablehanglie)-1);i=0;i-)printf(%c,tablehangliei);printf(n); jinzhan(hang,lie); return true;else printf(错误n);return false;/*判断X是否为非终结符,sym是否为终结符,若是查找预测表对应表格是否为空白,是则出错,否则进栈*/void shuchuchuan()FILE *fp1;char c;int num1
17、=0; if(fp1=fopen(E:222.txt,r)=NULL) /读取文件内容,并返回文件指针,该指针指向文件的第一个字符fprintf(stderr,error opening.n); exit(1); c=fgetc(fp1);while(c!=#)if(num1=num)printf(%c,c);elseprintf( );c=fgetc(fp1);num1+;printf(#t);void main() FILE *fp;char sym,X;bool flag,cuo; if(fp=fopen(E:222.txt,r)=NULL) /读取文件内容,并返回文件指针,该指针指向文件的第一个字符fprintf(stderr,error opening.n); exit(1); intialstack();push(#);push(E);sym=fgetc(fp);/*把第一个输入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年集体土地使用权出让合同
- 2025雇佣注册工程师劳动合同书
- 2025复印机墨盒供应合同范本参考
- 2025国际采购合同范本国际货物采购合同样本
- 2025租赁合同范本汽车租赁合同
- 2025年度合同款项审批与管理流程指南
- 2025合同违约金规定与案例分析
- 未来设计的新趋势探秘试题及答案
- 王牌战士考试试题及答案
- 组织员面试真题及答案
- 2021-2022物理化学试题A
- 二年级看图写话讲评
- GB/T 28162.3-2011自动操作用元器件的包装第3部分:表面安装元器件在连续带上的包装
- 消化性溃疡英文
- 内圣外王的修炼智慧
- 个人分期还款协议书模板(5篇)
- 梯子安全使用PPT
- CNAS-CL01:2018(ISO17025:2017)改版后实验室首次内审及管理评审资料汇总
- 智慧树超星尔雅创新性思维和方法网络通识课题库附答案
- 05G515轻型屋面梯形钢屋架
- 【培训】房地产开发经营业务企业所得税政策解读
评论
0/150
提交评论