递归下降分析器,实验报告(共8篇)

上传人:bin****86 文档编号:60357106 上传时间:2018-11-15 格式:DOCX 页数:26 大小:25.18KB
返回 下载 相关 举报
递归下降分析器,实验报告(共8篇)_第1页
第1页 / 共26页
递归下降分析器,实验报告(共8篇)_第2页
第2页 / 共26页
递归下降分析器,实验报告(共8篇)_第3页
第3页 / 共26页
递归下降分析器,实验报告(共8篇)_第4页
第4页 / 共26页
递归下降分析器,实验报告(共8篇)_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《递归下降分析器,实验报告(共8篇)》由会员分享,可在线阅读,更多相关《递归下降分析器,实验报告(共8篇)(26页珍藏版)》请在金锄头文库上搜索。

1、为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划递归下降分析器,实验报告(共8篇)实习二递归下降分析一、实验目的:根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。二、实验预习提示1、递归下降分析法的功能词法分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。2、递归下降分析法的前提改造文法:消除二义性、消除左递归、提取左因子,判断是否为LL文法,3、递归下降分析法实验设计思想及算法为G的每个非终结符号U构造一个递归过程,不妨命名为U。U的产生式的右

2、边指出这个过程的代码结构:(1)若是终结符号,则和向前看符号对照,若匹配则向前进一个符号;否则出错。(2)若是非终结符号,则调用与此非终结符对应的过程。当A的右部有多个产生式时,可用选择结构实现。具体为:对于每个非终结符号U-u1|u2|?|un处理的方法如下:U()ch=当前符号;if(ch可能是u1字的开头)处理u1的程序部分;elseif(ch可能是u2字的开头)处理u2的程序部分;?elseerror()对于每个右部u1-x1x2?xn的处理架构如下:处理x1的程序;处理x2的程序;?处理xn的程序;如果右部为空,则不处理。对于右部中的每个符号xi如果xi为终结符号:if(xi=当前的

3、符号)NextChar();/%NextChar为前进一个字符函数。%/return;else出错处理如果xi为非终结符号,直接调用相应的过程xi()三、实验要求程序输入/输出示例:对下列文法,用递归下降分析法对任意输入的符号串进行分析:E-TGG-+TG|TG|T-FSS-*FS|/FS|F-(E)|i输出的格式如下:(1)输入一以#结束的符号串(包括+*/i#)(2)备注:输入一符号串如i+i*#,要求输出为“非法的符号串”。注意:1.表达式中允许使用运算符、分割符、字符I,结束符#;2.如果遇到错误的表达式,应输出错误提示信息;3.学有余力的同学,可以详细的输出推导的过程,即详细列出每一

4、步使用的产生式。四、实验内容功能描述这个程序是一个递归下降分析程序,能够判定输入的一个字符串是否属于给定的文法。如果不是,则会给出一定的出错信息,并且列出每一步使用的产生式。全局变量及其定义chara50;/-存储输入的字符串charch;/-暂时存储输入的字符chard200;/-记录当前堆栈中的产生式intn1;/-输入字符串的长度chartoken;/-当前待分析字符模块设计intE();/-E过程,对应产生式E-TGintT();/-T过程,对应产生式T-FSintG();/-G过程,对应产生式G-+TG|-TG|intS();/-S过程,对应产生式S-*FS|/FS|intF();/

5、-F过程,对应产生式F-(E)|ivoidoutput();/-输出已分析字符串和当前字符voidinput1();/-输出剩余字符程序流程图图1主函数main流程图图2E函数流程图图3T函数流程图图4G函数流程图图5F函数流程图图6S函数流程图五、核心代码清单:函数功能描述:根据文法E-TG,先从主函数开始调入第一个非终结符函数执行,并且显示调用产生式,根据程序的状态,调用非终结符函数T或G,进行递归向下分析。intE()intf,t;printf(E-TGt);e0=E;e1=;e2=;e3=T;e4=G;e5=#;output();flag=1;编译原理实验报告实验3递归下降分析器的设计

6、姓名学号班级计科1001班时间:XX/4/15地点:文波同组人:无指导教师:朱少林实验目的使用递归子程序法设计一个语法分析程序,理解自顶向下分析方法的原理,掌握手工编写递归下降语法分析程序的方法。实验内容a.运用所学知识,编程实现递归下降语法分析程序。使用递归下降分析算法分析表达式是否符合下文法:expexpaddopterm|termAddop+|-termtermmulopfactor|factormulop*|/factor(exp)|id|number其中number可以是多位的十进制数字串,因此这里还需要一个小的词法分析器来得到id和number的值。b.从数据文件中读出符号串,输出

7、表达式并给出其正误评判。实验数据文件中应该有多个表达式,可能有正确的也应该有错误的表达式;表达式有形式简单的也应该有复杂的。每个表达式写在一行,以回车结束。实验环境软件:VC+实验前准备1、方案设计:准备模拟数据:本实验中使用“work.cpp”程序思想:为了使用递归向下的分析,为每个非终结符根据其产生式写一个分析程序,由于写入读出的操作频繁。所以程序中还有一个match(chart)函数,该函数是将字符写入文件打印输出同时从文件中读取下一个字符,而由于id和number可能是多个字符构成,故写了number()和id来分析数字和标识符,它们的功能仅仅是把整个number或id完整的读取出来并

8、写入文件,打印输出。由于分析的文件中可能出现非法字符,而一旦发现非法字符就无需再接着分析,所以在每次读取一个字符时调用islegal函数判断是否是合法字符,并返回0或1.在main()函数中,while(lookahead=n|lookahead=)&lookahead!=EOF)fscanf(resource,%c,&lookahead);是为了忽略分析文件中的换行或空格,之后进入分析阶段,根据返回值判断是否是合法的表达式。在该程序中只有发现了非法字符才会返回0,否则就返回1,而对于合法的表达式,递归程序最后分析的字符就是换行符,不合法的表达式在未分析到换行符就会停止分析,所以根据最后分析的

9、字符是否为换行符进一步确定是否为合法的表达式。实验步骤首先将上述文法改写成LL文法消除左递归:exptermtexptexpaddoptermtexp|Addop+|-termfactorttermttermmulopfactortterm|mulop*|/factor(exp)|id|number求出每个非终结符的FIRST集合和FOLLOW集合:FIRST(exp)=FIRST(term)=FIRST(factor)=id,number,(FIRST(texp)=,+,-FIRST(Addop)=+,-FIRST(tterm)=,*,/FIRST(mulop)=*,/求出每个非终结符的FO

10、LLOW集合:FOLLOW(exp)=FOLLOW(texp)=#,)FOLLOW(Addop)=FOLLOW(mulop)=id,number,(FOLLOW(term)=FOLLOW(tterm)=+,-,#,)FOLLOW(factor)=*,/,+,-,#,)对于texpaddoptermtexp|:FIRSTFOLLOW(texp)=;对于ttermmulopfactortterm|:FIRST(mulopfactortterm)FOLLOW(tterm)=;而Addop+|-mulop*|/factor(exp)|id|number显然也是符合LL文法要求的,所以改写后的文法符合L

11、L文法,可以用自上而下的递归分析方法。为每个非终结符根据其产生式写一个分析子程序;编写数字和字母识别程序,以便分离数字和标识符。;主函数调用递归程序进行分析,根据分析结果判断是否是合法表达式,并将所有识别到的表达式输出。程序设计:#include#includenumber();id();intexp();inttexp();intaddop();intterm();inttterm();intmulop();intfactor();intislegal();voidmatch(chart);FILE*resource;/测试文件FILE*result;/结果文件charlookahead;/

12、全局变量voidmatch(chart)/写入result文件,打印输出,并读取下一个fprintf(result,%c,lookahead);/向result写入printf(%c,lookahead);fscanf(resource,%c,&lookahead);/读数据number()/识别数字,如果遇到数字就一直接着读直到不是数字while(0=a)|(lookahead=A&lookahead=a)|(lookahead=A&lookahead=0&lookahead)了解语法分析器的内部工作原理,通过在本次实验中运用一定的编程技巧,掌握对表达式进行处理的一种方法。二、实验原理算术表

13、达式的文法可以是:EE+E|E-E|E*E|E/E|(E)|i根据递归下降分析法或预测分析法,对表达式进行语法分析,判断一个表达式是否正确。三、实验步骤(1)准备:1.阅读课本有关章节,确定算术表达式的文法;2.考虑好设计方案;3.设计出模块结构、测试数据,初步编制好程序。(2)上机调试,发现错误,分析错误,再修改完善。教师根据学生的设计方案与学生进行探讨,以修改方案和代码。(3)改造后的文法:EE+T|E-T|TTT*F|T/F|FFF|PPc|id|(E)四、实验环境计算机VC+软件五、实验程序#include#include#include#include#includevoiderror();voidterror();voidScanner();charsym=;inti=0;charstrToken30=;FILE*in;voidE();voidE1();voidF();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号