编译原理是计算机毕业设计专业中最难的一门课程,在理论上它要求学生掌握有关形势语言和自动机的抽象概念,在技术上要求学生能够熟练地利用各种数据结构进行编程。尤其对于向前看集的算法实现,我觉得是最难的一部分,因为涉及到的情况太多,循环和选择句型的嵌套使用如果不仔细分析就容易出现错误。在数据的处理上我采用各模块全数组操作,并且将最终结果通过字符串方式保存,通过字符串来向其他模块传送数据,这种新的尝试也让我的程序带有个人的风格,让我对编程的多样化有了更深的了解和认识。
通过《编译原理语法分析器的设计与实现》的使用,希望在提高教学质量的同时,也能对同学们在编译原理的学习中起到帮助,让大家更好的了解LL(1)算法的整个过程。
毕业设计课题目标
一个编译原理语法分析器的设计与实现
1.主要通过文本方式获取相关文法,并实现以下相关操作:
2.判断文法是否符合LL(1)的要求
3.获取文法的终结符和非终结符
4.求文法的select集(其中包括first集和follow集的求解)并判断select集是否符合LL(1)算法的要求
5.根据文法和select集构造文法分析表
6.根据文法分析表判断输入的句子是否符合文法
一个编译原理语法分析器的设计与实现主要分为四个模块:
1.文件读取模块
文件读取模块主要完成将记事本中的待分析文法读入到内存中的功能。其中包括了对可能出现的文法BNF表示法的判断以及对文法中是否存在直接左递归规则的判断。
2.算法分析模块
算法分析模块是《一个编译原理语法分析器的设计与实现》
中的关键模块。本模块包含了LL(1)算法中的大部分重要数据和信息,其中包括获取输入文法的终结符集和非终结符集,对文法中每一条规则求select集(select集的求解又包括求first集或者follow集),以及对select集合法性的判断,即同一非终结符所对应的不同规则的select集中不能有相同的终结符。
3.分析表构造模块
分析表构造模块的主要功能是将算法分析模块所求解出的符合LL(1)算法规则的文法的select集转化成文法分析表,以便下一模块的调用。
4.句子分析模块
句子分析模块是整个《一个编译原理语法分析器的设计与实现》的主体演示模块,包括句子读取、句子合法性判断、句子分析等部分。其中句子合法性的判断又分为句子中是否有文法终结符以外的符号和句子是否符合文法规则的判断。下面将对以上四个模块的具体实现技术、数据结构及关键程序片段进行详细的说明。