课 程 设 计 报 告课程名称 编译原理 实验项目 设计与实现一个词法分析器 实验仪器 PC 机 北京信息科技大学信息管理学院(课程上机)实验报告1.实验目的:结合讲授内容,进一步培育学生编译器设计的思想,加深对编译原理和应用程序的理解,针对编译过程的重点和难点内容进行编程,独立完成有一定工作量的语法分析程序设计任务,同时强调好的程序设计风格。2.实验内容:对输入的文法判定是否为 LL(1)文法,若是 LL(1)文法,则构造 LL(1)分析表,输入一个句子,依据 LL(1)分析表输出与句子对应的语法树。设计 LL(1)文法的词法分析器。3.实验要求:(1)输入一个文法 G(如:测试数据 1);(2)编写求 FIRST 集的算法;输出文法 G 的 First 集;(3)编写求 FOLLOW 集的算法;输出文法 G 的 FOLLOW 集;(4)编写求 SELECT 的算法,输出文法 G 的 SELECT 集;(5)判定是否为 LL(1)文法,若是,则编写构造 LL(1)分析表的算法,并输出预测分析表(6)编写表驱动的预测分析算法;(7) 给出输入一个句子(如:测试数据 2)的预测分析步骤; (8)输出依据句子构对应的语法树的过程; (9)构造文法 G 的递归子程序;(选作)测试数据 1:(若用其它测试数据,请替换下面内容)输入文法 G:S->aHH->aMd|dM->Ab|@A->aM|e测试数据 2:输入句子: aaabd#4.实验准备:5.实验过程:#include#include#include/*******************************************/int count=0; /*分解的产生式的个数*/int number; /*所有终结符和非终结符的总数*/char start; /*开始符号*/char termin[50]; /*终结符号*/char non_ter[50]; /*非终结符号*/char v[50]; /*所有符号*/char left[50]; /*左部*/char right[50][50]; /*右部*/char first[50][50],follow[50][50]; /* 各 产 生 式 右 部 的 FIRST 和 左 部 的FOLLOW 集合*/char first1[50][50]; /*所有单个符号的 FIRST 集合*/char select[50][50]; /*各单个产生式的 SELECT 集合*/char f[50],F[50]; /*记录各符号的 FIRST 和 FOLLOW 是否已求过*/char empty[20]; /*记录可直接推出@的符号*/char TEMP[50]; /*求 FOLLOW 时存放某一符号串的 FIRST 集合*/int validity=1; /*表示输入文法是否有效*/int ll=1; /*表示输入文法是否为 LL(1)文法*/int M[20][20]; /*分析表*/...