还剩1页未读,继续阅读
文本内容:
评分点1:实验方案分析A对实验方案有深刻的对比、分析B对实验方案有较为深刻的对比、分析C对实验方案有合理的对比、分析教D对实验方案有比较合理的对比、分析师E对实验方案没有对比、分析评评分点2实验结果的记录和分析分A能用图、表等完整地记录实验结果,并有深刻的分析B能用图、表等比较完整地记录实验结果,并有合理的分析C能用图、表等记录实验结果,并有一定的分析D对实验记录不完整,对实验结果分析很少E对实验记录非常不完整,对实验结果没有分析实验目的1•理解和掌握算术表达式的文法构造,熟悉常用的语法分析方法•理解和掌握布尔表达式的文法构造,熟悉常用的语法分析方法实验内容2•根据Sample语言的语法规则判定输入的一串单词能否构成一个正确的算术表达式•根据Sample语言的语法规则判定输入的一串单词能否构成一个正确的布尔表达式实验方案3方案描述
3.1递归下降分析法的原理是利用函数之间的递归调用模拟语法树自上而下的构造过程,具体实现方法概述如下1)每个非终结符对应一个解析函数;2)产生式右侧为该产生式左侧非终结符所对应解析函数的“函数体”;3)产生式右侧终结符对应从输入串中“消耗”该终结符的操作;4)产生式中的T对应函数体中的“if-else»语句;5)对于扩展的BNF文法,产生式中的,{},对应函数体中的“while”语句构造文法〈程序〉一〈声明语句〉main〈复合语句><函数块,〈函数块〉一〈函数定义><函数块>|£<语句>f<声明语句>|〈执行语句〉〈声明语句>f<值声明>|〈函数声明〉|£v值声明>一<常量声明>|〈变量声明〉〈常量声明〉一const<常量类型,〈常量声明表》〈常量类型〉f int|char|floatv常量声明表,一v标识符>=〈常量>;|<标识符>=<常量,,<常量声明表,〈变量声明>f<变量类型,〈变量声明表,〈变量声明表,一〈单变量声明〉;I(单变量声明>,<变量声明表,〈单变量声明>一<变量>1<变量>=〈表达式〉〈变量类型,f intlchar|float〈执行语句〉一〈数据处理语句〉|〈控制语句>1〈复合语句〉〈数据处理语句〉一〈赋值语句〉|<函数调用语句,〈赋值语句〉一〈赋值表达式,;<控制语句〉f<if语句>|<fbr语句>|<while语句>|<do while语句>|<return语句,〈复合语句>f{〈语句表〉}<语句表〉f v语句>|<语句><语句表><if语句,f if(v表达式〉)v语句〉|if(<表达式>)<语句>else<语句,<for语句,f for(v表达式>;<表达式>;<表达式>)<循环语句><while语句》f while(v表达式>)<循环语句,<do while语句〉f do<循环用复合语句,while(v表达式>);<retum语句》f return;|return〈表达〈算术表达式〉一<项>+<算术表达式>|<项>-<算术表达式>|<项><项>-><因子〉*<项〉|〈因子〉/<项〉|<因子>%<项>|<因子,<因子>一(〈算术表达式>)1(常量>1〈变量>1〈函数调用〉(常量>一<数值型常量>1〈字符型常量〉〈变量〉标识符,〈关系表达式>一v算术表达式,〈关系运算符><算术表达式,〈关系运算符>f>|<|>=|<=|==|!=〈布尔表达式>一<布尔项>||〈布尔表达式>|<布尔项〉〈布尔项〉f〈布尔因子,<布尔项>1v布尔因子,〈布尔因子>一<算术表达式>|〈关系表达式>]!〈布尔表达式>V赋值表达式Af V标识符>=<表达式>方案分析
3.2递归分析程序的优点
1.实现思想简单明了程序结构和语法规则直接对应
2.因为每个过程表示一个非终结符号的处理,添加语义加工工作比较方便
3.需要书写程序的语言支持递归调用如果递归调用机制是高效的,那么分析程序也是高效的缺点对文法要求高,必须是LL
(1)文法,同时由于递归调用较多,影响分析器的效率实验测试4设计测试数据一共5组,如表1所示表测试数据1测试数据组数测试数据预期结果实际结果1ttinclude stdio.报错h2a+b+c报错第行错误:后面缺少对象11布尔赋值语句正确算术赋值语句正确1实验结论及分析5本次实验完成得不是很好,对语法分析不够完整,最终也没有画出实验结果的语法分析树通过这次实验,使我对递归下降分析过程有了更进一步的了解,递归下降实现的思想简单明了,程序结构和语法规则直接对应因为每一个过程表示一个非终结符号的处理,添加语义加工工作比较方便需要书写程序的语言支持递归调用语法分析器的实验比词法分析复杂很多,通过网课和资料的查找,艰难完成了本次实验,然而最后的实验结果不够好虽然基本实现了逻辑表达式以及算术表达式的语法分析,但是还有很多句型以及没有考虑到的情况需要完善,难以应多各种复杂情况,还需要更多的测试以及完善。
个人认证
优秀文档
获得点赞 0