编译原理5.3.5-LALR分析表的构造(1).pptVIP

  • 2
  • 0
  • 约5.4千字
  • 约 20页
  • 2019-05-28 发布于江苏
  • 举报
5.3.5 LALR分析表的构造 对 LR(1) ☆来说, 存在着某些状态, 这些状态除向前搜索符不同外, 其核心部分都是相同的. 同心集: 两个LR(1)项目集具有相同的心, 即除去搜索符之后, 这两个集合是相同的。 能否将核心部分相同的诸状态合并为一个状态? 这种合并是否会产生冲突? LALR方法 : 在LR(1)项目集规范族基础上, 合并同心集. 合并同心集 构造 LALR(1)分析表算法 (3) 从C? 构造ACTION表 ①若[A→α·aB, b]∈Jk ,且GO(Jk, a)= Jj, 则置ACTION[k, a]为 sj ②若[A→α·, a]∈Jk,j是产生式A→α的编号 则置ACTION[k, a]为 rj, ③若[S→S·, # ]∈Jk,则置ACTION[k, #]为 acc (4) GOTO表的构造 若GO(Jk, A)=Ji,则置GOTO[k, A] = i (5) 分析表中凡不能用(3)、(4)填入信息的空白格均填上“出错标志”。 经上述步骤构造的分析表若不存在冲突,则称它为文法的LALR分析表 存在这种分析表的文法称为LALR文法 对于同一个文法,LALR分析表和LR(0)以及SLR分析表永远具有相同数目的状态。 例:写出输入符号串 #aab# 的LR分析过程和LALR分析过程 LR分析小结 LR分析过程是__________________ 符号栈中的符号串是________________ 分析决策依据_________________________ 为构造LR分析表,可先构造________________DFA LR分析器的关键是_______________ LR(0) 、SLR(1) 、 LALR(1) 、 LR(1) 功能________ 四种LR类型的文法是________关系 LR类型文法是____二义的 * 能 可能 图5.10 LR(1)项目集和GO函数 p116 (0)S? S (1)S ? BB (2)B ? aB (3)B ? b 该文法产生的是语言 a*ba*b S I 0 :S →·S, # S →·BB, # B →·aB, a/b B →·b, a/b ′ B I 2 :S →B·B, # B →·aB, # B →·b, # I 4 :B →b·, a/b b I 3 :B →a·B, a/b B →·aB, a/b B →·b, a/b b b I 7 :B →b·, # I 8 :B →aB·, a/b a B I 5 :S →BB·, # I 6 :B →a·B, # B →·aB, # B →·b, # B a a I 9 :B →aB·, # b a B I 1 :S →S· , # ′ 例5.13 I 4 :B →b·, a/b I 3 :B →a·B, a/b B →·aB, a/b B →·b, a/b I 7 :B →b·, # I 8 :B →aB·, a/b I 6 :B →a·B, # B →·aB, # B →·b, # I 9 :B →aB·, # I47: B→b· , a/b/# I89: B→aB· , a/b/# I36: B→a·B , a/b/# B→·aB , a/b/# B→·b , a/b/# 表5.5 例5.13 ☆的 LR分析表 p116 r2 9 r2 r2 8 r3 7 9 s7 s6 6 r1 5 r3 r3 4 8 s4 s3 3 5 s7 s6 2 acc 1 2 1 s4 s3 0 B S # b a GOTO ACTION 状 态 5 s7 s6 2 acc 1 2 1 s4 s3 0 B S # b a GOTO ACTION 状 态 表5.6 例5.13 的 LALR分析表 p119 合并同心集 36 47 5 89 s36 s47 s36 s47 s36 s47 89 r3 r3 r3 r1 r2 r2 r2 是否会产生冲突? 1、合并GOTO表 例如:设 Im和In 同心 同心集遇某文法符号X进行状态转换后, 仍然同心. 所以合并GOTO表的过程中不会出现冲突 Im: A???X?, a In: A???X?, b Im? : A??X??, a In?

文档评论(0)

1亿VIP精品文档

相关文档