语法分析实验报告
一. 题目:语法分析程序的设计与实现
二. 设计目的:
(1)了解语法分析器的生成工具和编译器的设计。
(2)了解自上而下语法分析器的构造过程。
(3). 理解和掌握LL(1)语法分析方法的基本原理;根据给出的LL(1)文法,掌握LL(1)分析表的构造及分析过程的实现。
(4)掌握预测分析程序如何使用分析表和栈联合控制实现LL(1)分析。
模块化设计的目的
三.实验内容:编写语法分析程序,实现对算术表达式的语法分析,要求所分析算数表达式由如下的文法产生:
E->E+T|E-T|T
T->T/F|T*F|F
F->i|n|(E)
三. 实验要求:
编写LL(1)语法分析程序,要求如下:
(1) 编程实现算法4.2,为给定文法自动构造预测分析表。
(2) 编程实现算法4.1,构造LL(1)的算法预测程序。
五.算法流程分析
程序可分为如下几步:
(1)读入文法
(2)判断正误
(3)若无误,判断是否为LL(1)文法
(4)若是,构造分析表;
(5)由总控算法判断输入符号串是否
   
六.算法设计
该语法分析程序课细化为以下18个函数。
1.首先定义各种需要用到的常量和变量;
2. 判断一个字符是否在指定字符串中;
3. 得到一个不是非终结符的符号;
4. 分解含有左递归的产生式;
5. 分解不含有左递归的产生式;
6. 读入一个文法;
7. 将单个符号或符号串并入另一符号串;
8. 求所有能直接推出^的符号;
9. 求某一符号能否推出‘ ^ ’;
10. 判断读入的文法是否正确;
11.求单个符号的FIRST;
12. 求各产生式右部的FIRST;
13.求各产生式左部的FOLLOW;
14. 判断读入文法是否为一个LL(1)文法;
15. 构造分析表M;
16. 总控算法;
17. 一个用户调用函数;
18. 主函数;
七. 输入输出。
输入:文法的终结符和非终结符都只能用单个字符。
输出:LL(1)句型分析过程。
源程序已另交。
八.实验结果
输入句子为:i*n+(i*i)
得到如下的运行结果:
九、实验总结
 
通过这次程序设计,更加清楚透彻的明白了LL(1)分析法的过程,从而也比较熟练掌握了自上而下语法分析的基本思想,此外,巩固了所学的数据结构的知识,自己所学的知识能够联系起来,使得知识自成系统。在实现和调试时次采取模块化的思想,使得本次课程设计比较顺利,增强了自己的信心,提高了自己的编程能力和动手能力以及独立分析问题、解决问题的能力和综合运用所学知识的能力。