编译原理实验报告compile递归下降分析法.doc

编译原理实验报告compile递归下降分析法

编译原理实验报告 —-递归下降分析法程序 一、实验目的 1. 根据某一文法编制递归下降分析程序,以便对任意输入的符号串进行分析。 2. 本次实验的目的是加深对递归下降分析法的理解。 二、实验平台 Windows + VC + Win32 Console 三、实验内容 对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E→TG (2)G→+TG|-TG (3)G→ε (4)T→FS (5)S→*FS|/FS (6)S→ε (7)F→(E) (8)F→i 程序输入/输出示例: 程序现有功能: 输入: 一个以 # 结束的符号串(包括 + * ( )i # ): 例如:i+i*i# 输出: (1) 详细的分析步骤, 包括 每一步使用的产生式、已分析过的串、当前分析字符、剩余串, (2) 分析结果:accept 或者 error (3) 推导序列 需要完善的功能: (1)示例程序只能完成 + 、* 、(、)的语法分析, 请加入 - 和 / 的语法分析 (2)请将示例程序输出的推导序列中的推导符号由 = 改为 = 下面是我们的成果演示 下面我们针对实现的所有功能对一个具体的文法进行分析:S=i/i-i*i+i# 第一步,产生分析树的根节点E,即文法的开始符号。 选用文法的文法规则(1) E→TG去延伸分析树。如图 E T G 图(1) 输入串S= i/i-i*i+i# 从左至右图(1)的分析树叶节点匹配,分析书的最左第一个节点为T,不等于输入串S中的i,即不匹配。 第二步,对当前不匹配的分析树叶节点T,选用文法的规则(4)T→FS去延伸分析树E ,对输入串的当前分析字符i与分析树左边起第一个叶节点F不匹配, 匹配失败 。 T G F S 第三步,对当前不匹配的分析树的叶节点F,选用文法的规则(8)去延伸分析树E ,对输入串的当前分析字符i与分析树左边起第一个叶节点i匹配,匹配 成功,接着考察分析树的最左第二个叶节点S与未匹配过的剩余输入串 T G 。匹配失败。 F S i 第四步,对当前不匹配的分析树的叶节点S,选用文法的规则(5)去延伸分析树 E ,对输入剩余串的扫描指针标识与最左第二个叶节点匹配,匹配成功。 接着考察分析树的最左第三个叶节点F与未匹配过的输入串,匹 T G 配失败。 F S i / F S 第五步,对当前不匹配的分析树的叶节点F,选用文法的规则(8)去延伸分析树E, 对输入剩余串的扫描指针标识与最左第三个叶节点匹配,匹配成功。 接着考察分析树的最左第四个叶节点 T G与未匹配过的剩余输入串,匹配失败。 F S i/ F S i 第六步,对当前不匹配的分析树的叶节点S,选用文法的规则(6)I ε 失败。 第七步,对当前不匹配的分析树的叶节点G,选用文法的规则(2)去延伸分析树E ,对输入剩余串的扫描指针标识与最左第五个节点匹配成功,接着考察 对输入剩余串的扫描指针标识与最左第六个节点T与未匹配过的剩余 T G 输入串,匹配失败。 T G 第八步,对当前不匹配的分析树的叶节点T。选用文法规则(4)去延伸分析树 T G,对输入剩余串的扫描指针标识与最左第六个叶节点匹配成功,接着 考察对输入剩余串的扫描指针标识与最左第七个节点与未匹配过的 F S 剩余输入串,匹配失败。 第九步,对当前不匹配的分析树的叶节点F,选用文法规则(8)去延伸分析树 T G ,输入剩余串的扫描指针标识与最左第七个叶节点匹配不成功。 F S i 第十步,对当前不匹配的分析树叶节点S,选用文法规则(5)去延伸分析树 T G ,输入剩余串的扫描指针标识与最左第七个叶节点匹配成功,接着 考察分析树的最左第八个叶节点F与未匹过的剩余输入串,匹 F S 配失败。 i* F S 第十一步,对当前不匹配的分析树叶节点F,选用文法规则(8),去延伸分析树 * F S ,输入剩余串的扫描指针标识与最左第八个叶节点匹配成功,接着 考察分析树的最左第九个叶节点S与未匹配过的剩余输入串,匹配 i 失败。 第十二步,对当前不匹配的分析树叶节点S,选用文法规则(6)

文档评论(0)

1亿VIP精品文档

相关文档