1、 课程名称 编译原理 设计题目 递归下降语法分析 一、一、 设计目的设计目的 通过设计、编制、调试一个具体的语法分析程序,加深对 语法分析原理的理解,加深对语法及语义分析原理的理解,并 实现对文法的判断, 是算符优先文法的对其进行 FirstVT 集及 LastVT 集的分析,并对输入的字符串进行规约输出规约结果 成功或失败。 二、二、 设计设计内容及步骤内容及步骤 内容:在 C+ 6.0 中编写程序代码实现语法分析功能,调试得到相 应文法的判断结果:是算符优先或不是。若是,则输出各非终结符的 FirstVT 与 LastVT 集的结果,还可进行字符串的规约,输出详细的规 约步骤,程序自动判别
2、规约成功与失败。 步骤:1.看书,找资料,了解语法分析器的工作过程与原理 2.分析题目,列出基本的设计思路 1定义栈,进栈,出栈函数 2栈为空时的处理 3构造函数判断文法是否是算符文法,算符优先文法 4构造 FirstVT 和 LastVT 函数对文法的非终结符进行分析 5是算符优先文法时,构造函数对其可以进行输入待规约 串,输出规约结果 6构造主函数,对过程进行分析 3.上机实践编码,将设计的思路转换成 C+语言编码,编译运 行 4.测试,输入不同的文法,观察运行结果 三、三、 详细的算法描述详细的算法描述 详细设计伪代码如下:详细设计伪代码如下: 首先要声明变量,然后定义各个函数 1.vo
3、id Initstack(charstack s.top=-1; 2. void push(charstack s.bases.top.E=w.E; s.bases.top.e=w.e; 3. void pop(charstack w.e=s.bases.top.e; s.top-; 4. int IsEmpty(charstack s) /判断栈是否为空 if(s.top=-1) return 1; else return 0; 5.int IsLetter(char ch) /判断是否为非终结符 if(ch=A else return 0; 6.int judge1(int n) /jud
4、ge1 是判断是否是算符文法:若产生式中含有两个相继的 非终结符则不是算符文法 7. void judge2(int n) /judge2 是判断文法 G 是否为算符优先文法:若不是算符文法或 若文法中含空字或终结符的优先级不唯一则不是算符优先文法 8.int search1(char r,int kk,char a) /search1是查看存放终结符的数组r中是否含有重复的终结符 9.void createF(int n) /createF 函数是用 F 数组存放每个终结符与非终结符和组合, 并且值每队的标志位为 0;F 数组是一个结构体 10.void search(charLode w) /search 函数是将在 F 数组中寻找到的终结符与非终结符对的 标志位值为 1 分情况讨论:/产生式的后选式的第一个字符就是终结符的情况 /产生式的后选式的第一个字符是非终结符的情况 11.void LastVT(int n