语法分析器得设计实验报告一、实验内容语法分析程序用 LL(1)语法分析方法。首先输入定义好得文法书写文件(所用得文法可以用 LL(1)分析),先求出所输入得文法得每个非终结符就是否能推出空,再分别计算非终结符号得 FIRST 集合,每个非终结符号得 FOLLOW 集合,以及每个规则得 SELECT 集合,并推断任意一个非终结符号得任意两个规则得 SELECT 集得交集就是不就是都为空,假如就是,则输入文法符合 LL(1)文法,可以进行分析。对于文法:G[E]:E>E+T|TT>T*F|FF>i|(E)分析句子 i+i*i 就是否符合文法。二、基本思想1、语法分析器实现语法分析就是编译过程得核心部分,它得主要任务就是根据程序得语法规则,从由词法分析输出得源程序符号串中识别出各类语法成分,同时进行词法检查,为语义分析与代码生成作准备。这里采纳自顶向下得 LL(1)分析方法。语法分析程序得流程图如图 54 所示。该程序可分为如下几步:(1)读入文法 (2)推断正误 (3)若无误,推断就是否为 LL(1)文法 (4)若就是,构造分析表;(5)由句型判别算法推断输入符号串就是为该文法得句型。三、核心思想该分析程序有 15 部分组成:(1)首先定义各种需要用到得常量与变量;(2)推断一个字符就是否在指定字符串中;(3)读入一个文法;(4)将单个符号或符号串并入另一符号串;(5)求所有能直接推出&得符号;开始读入文法有效?推断句型报错结束语法分析程序流程图就 是 LL(1) 文法?(6)求某一符号能否推出‘ & ’;(7)推断读入得文法就是否正确;(8)求单个符号得 FIRST;(9)求各产生式右部得 FIRST;(10)求各产生式左部得 FOLLOW;(11)推断读入文法就是否为一个 LL(1)文法;(12)构造分析表 M;(13)句型判别算法;(14)一个用户调用函数;(15)主函数;下面就是其中几部分程序段得算法思想:1、求能推出空得非终结符集Ⅰ、实例中求直接推出空得 empty 集得算法描述如下:void emp(char c){ 参数 c 为空符号 char temp[10];定义临时数组int i;for(i=0;i<=count1;i++)从文法得第一个产生式开始查找{if 产生式右部第一个符号就是空符号并且右部长度为 1,then 将该条产生式左部符号保存在临时数组 temp 中将临时数组中得元素合并到记录可推出&符号得数组 empty 中。}Ⅱ、求某一符号能否推出'&'int _emp(char c){ //若能推出&,返回 1;否则,返回 0int i,j,k,result=1,mark=0;char temp[20];temp[0]=c;temp[1]='\0';存放到一个临时数组 empt 里,标识此字符已查找其就是否可推出空字 假如...