实验二:递归下降分析法 一、实验内容 (1)功能描述:该程序具有什么功能? 1、递归下降分析法的功能 词法分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。 2、递归下降分析法的前提 改造文法:消除二义性、消除左递归、提取左因子,判断是否为LL(1)文法, 3、递归下降分析法实验设计思想及算法 为 G 的每个非终结符号 U 构造一个递归过程,不妨命名为 U。 U 的产生式的右边指出这个过程的代码结构: (a)若是终结符号,则和向前看符号对照, 若匹配则向前进一个符号;否则出错。 (b)若是非终结符号,则调用与此非终结符对应的过程。当 A 的右部有多个产生式时,可用选择结构实现。 具体为: (a)对于每个非终结符号 U->u1|u2|… |un 处理的方法如下: U( ) { ch=当前符号; if(ch 可能是u1 字的开头) 处理u1 的程序部分; else if(ch 可能是u2 字的开头)处理u2 的程序部分; … else error() } (b)对于每个右部u1->x1x2… xn 的处理架构如下: 处理x1 的程序; 处理x2 的程序; … 处理xn 的程序; (c)如果右部为空,则不处理。 (d)对于右部中的每个符号xi ①如果 xi 为终结符号: if(xi= = 当前的符号) { NextChar(); return; } else 出错处理 ②如果xi 为非终结符号,直接调用相应的过程xi() 说明: NextChar 为前进一个字符函数。 (2)实验目的: 需要利用程序设计语言的知识和大量编程技巧,递归下降分析法是一种较实用的分析法,通过这个练习可大大提高软件开发能力。通过练习,掌握函数间相互调用的方法 (3)程序思路: 0.定义部分:定义常量、变量、数据结构。 1.初始化:从文件将输入符号串输入到字符缓冲区中。 2.利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。 (4)程序要求: 程序输入/输出示例: 对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E->TG (2)G->+TG|—TG (3)G->ε (4)T->FS (5)S->*FS|/FS (6)S->ε (7)F->(E) (8)F->i 输出的格式如下: (1)递归下降分析程序,编制人:姓名,学号,班级 (2)输入一以#结束的符号串(包括+—*/()i#): (a) i+i# (b)i+i*i# (c)i+i)# (d)((i/i+i)# (3)输出结果: (a) i+i#为合法符号串 (b)i+i*i#为合法符号串 (c)i+i)# 为不合法符号串 (d)((i/i+i)# 为不合法符号串 (5)程...