(自顶向下语法分析方法)ppt.pptVIP

  • 22
  • 0
  • 约9.44千字
  • 约 72页
  • 2017-03-08 发布于重庆
  • 举报
(自顶向下语法分析方法)ppt

1. 由于相同左部的产生式的右部FIRST集交集不为空引起回溯。 例.文法G[S] :S→xAy A→ab|a 2. 由于相同左部非终结符的右部能 ε 且该非终结符FOLLOW集中含有其右部FIRST集的元素。 例. 设文法G[S] : S→aAS A→bAS S→b A→ε 3. 由于文法含有左递归而引起回溯。 例. 已知文法G[S]: S→Sa S→b 5.5 确定的自顶向下分析方法 1. 递归子程序法 实现思想:对文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选时能够按LL 1 形式可唯一地确定选择某个候选进行推导。 限制:对文法要求高,必须满足LL 1 文法;由于递归调用多,速度慢,占用空间多。 2.预测分析法 预测分析器: 预测分析程序(P93) 先进后出栈 预测分析表 分析过程见教材P94 图5.11 预测分析表的构造 例. 已知表达式文法为: E →E+T | T T →T*F | F F → i | E 构造过程 1.判断文法是否为LL 1 文法 先消除左递归: 可推出 ε 的非终结符表: E →TE E → +TE | ε T →FT T → *FT | ε F → i | E 各非终结符的FIRST集和FOLLOW集: FIRST E , i FIRST E + , ε FIRST T , i FIRST T * , ε FIRST F , i FOLLOW E , # FOLLOW E , # FOLLOW T + , , # FOLLOW T + , , # FOLLOW F * , + , , # 各产生式的SELECT集: SELECT E →TE , i SELECT E → +TE + SELECT E → ε ε, , # SELECT T →FT , i SELECT T → *FT * SELECT T → ε ε, + , , # SELECT F → E SELECT F → i i 2. 构造预测分析表 运行: 我们通过对一个实例的分析来详细说明。 E →E+T | T T →T*F | F F → i | E E →TE E → +TE | ε T →FT T → *FT | ε F → i | E 否 是 否 是 否 F T T E E E →TE E → +TE | ε T →FT T → *FT | ε F → i | E 该文法是LL 1 文法。 任一符号串的first集合的计算方法: 如果文法符号串??V*, ? X1X2…Xn, 1. 当X1?ε,则first ? first X1 2. 当对任何j(1≤j≤i-1,2 ≤i ≤n),ε?first Xj 则first ? first X1 - ε ∪ first X2 - ε ∪…∪ first Xi-1 - ε ∪first Xi 3. 当first Xj 都含有ε时 1 ≤ j ≤ n ,则first ? first X1 ∪first X2 ∪…∪first Xj ∪ ε * 根据上述规则,每个产生式的右部符号串开始符号集合为: first AB first A ∪first B ∪ ε a, b, ε first bC b first ε ε first aD a first AD first A - ε ∪first D a,b,c first b b first aS a first c c 算法如下: 1 设S为开始符号,则#?follow S ; 2 若A→αBβ是一个产生式,则把FIRST β 或 ? 加至FOLLOW B 中; 3 若A→αB是一个产生式,或A→αBβ是一个产生式而β ? 即??FIRST β ),则把 FOLLOW(A)加至FOLLOW(B)中. 即:Follow A 是所有句型中出现在紧接A之后的终结符或“#”。 3. 计算Follow 集: 方法一:根据定义计算 * ? S ?AB ?B ?Bb ?A ?AaD Follow S # Follow A a,#,c Follow B # Follow C # Follow D # 文法为: S ? AB | bC A ?ε | b B ?ε | aD C ?AD | b D ?aS | c S为开始符号,#加入follow S 中。 S ?AB ?A

文档评论(0)

1亿VIP精品文档

相关文档