1 / 109

5 自下而上分析

5 自下而上分析. 5.1 归约 例 S  aABe A  Abc | b B  d abbcde aAbcde aAde aABe S S  rm aABe  rm aAde  rm aAbcde  rm abbcde. 5 自下而上分析. 5.1 句柄 句型的 句柄 是和某产生式右部匹配的子串,并且,把它归约成该产生式左部的非终结符代表了最右推导过程的逆过程的一步。 S  aABe A  Abc | b B  d

trey
Download Presentation

5 自下而上分析

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 5自下而上分析 5.1归约 例 S aABe A Abc | b B d abbcde aAbcde aAde aABe S S rm aABe rm aAde rm aAbcde rm abbcde

  2. 5自下而上分析 5.1句柄 句型的句柄是和某产生式右部匹配的子串,并且,把它归约成该产生式左部的非终结符代表了最右推导过程的逆过程的一步。 S aABe A Abc | b B d S rm aABerm aAde rm aAbcde rm abbcde 句柄的右边仅含终结符。 如果文法二义,那么句柄可能不唯一。

  3. 5自下而上分析 例 E  E + E | E * E | (E ) | id E rm E * E Erm E + E rm E *E + E rm E + id3 rm E * E + id3 rm E * E+ id3 rm E *id2 + id3rm E *id2 + id3 rmid1* id2 + id3rmid1* id2 + id3 在句型E * E + id3中,句柄不唯一。

  4. 5自下而上分析 5.1 用栈实现移进归约分析 先通过 移进归约分析器在分析输入串id1* id2 + id3时的动作序列 来了解移进归约分析的工作方式。

  5. 5自下而上分析

  6. 5自下而上分析 使用移进归约的方式,有两个问题必须解决 • 确定右句型中将要归约的子串 • 如何确定选择哪一个产生式

  7. 5自下而上分析 5.1移进归约分析的冲突 移进归约冲突 例 stmt if expr then stmt | if expr then stmt else stmt | other 如果移进归约分析器处于格局 栈输入 …if expr then stmt else … $

  8. 5自下而上分析 归约归约冲突 stmt  id (parameter_list) | expr := expr parameter_listparameter_list, parameter | parameter parameter id expr id (expr_list) | id expr_listexpr_list, expr | expr 由A(I, J)开始的语句 栈 输入 …id ( id , id )…

  9. 5自下而上分析 归约归约冲突 stmt  id (parameter_list) | expr := expr parameter_listparameter_list, parameter | parameter parameter id expr id (expr_list) | id expr_listexpr_list, expr | expr 由A(I, J)开始的语句 栈 输入 …procid ( id , id )…

  10. 5.3LR分析器 本节介绍LR(k)分析技术 • 特点 • 适用于一大类上下文无关文法 • 效率高 • 主要介绍构造LR分析表的三种技术 • 简单的LR方法(简称SLR) • 规范的LR方法 • 向前看的LR方法(简称LALR)

  11. $ … ai … an 输入 a1 LR分析程序 输出 栈 action goto LR分析器的模型 sm Xm sm-1 Xm-1 … s0 5.3LR分析器 5.3.1LR分析算法

  12. 5.3LR分析器 例 E E + T | E T T T * F |T E F  (E ) | F  id

  13. 5.3LR分析器

  14. 5.3LR分析器 5.3.2 LR文法和LR分析方法的特点 概念 活前缀:右句型的前缀,该前缀不超过最右句柄的右端 S*rm  A wrm  w 的任何前缀(包括和本身)都是一个活前缀。

  15. 5.3LR分析器 5.3.2 LR文法和LR分析方法的特点 概念 活前缀:右句型的前缀,该前缀不超过最右句柄的右端 定义 LR文法:我们能为之构造出所有条目都唯一的LR分析表

  16. 5.3LR分析器 LR分析方法的特点 • 栈中的文法符号总是形成一个活前缀。

  17. 5.3LR分析器

  18. 5.3LR分析器 LR分析方法的特点 • 栈中的文法符号总是形成一个活前缀。 • 分析表的转移函数本质上是识别活前缀的DFA。

  19. 5.3LR分析器 例 E E + T | E T T T * F |T E F  (E ) | F  id

  20. 5.3LR分析器 LR分析方法的特点 • 栈中的文法符号总是形成一个活前缀。 • 分析表的转移函数本质上是识别活前缀的DFA。 • 栈顶的状态符号包含了确定句柄所需要的一切信息。 • 是已知的最一般的无回溯的移进归约方法。 • 能分析的文法类是预测分析法能分析的文法类的真超集。 • 能及时发现语法错误。 • 手工构造分析表的工作量太大。

  21. 5.3LR分析器 LR分析方法和LL分析方法的比较

  22. 5.3LR分析器 LR分析方法和LL分析方法的比较 在下面的推导中,最后一步用的是Al S rm…rm A b w rm l  b w LR(1)决定用该 产生式的位置 LL(1)决定用该 产生式的位置

  23. 5.3LR分析器 LR分析方法和LL分析方法的比较

  24. 5.3LR分析器 LR分析方法和LL分析方法的比较

  25. 5.3LR分析器 LR分析方法和LL分析方法的比较

  26. 5.3LR分析器 5.3.3 构造SLR分析表 LR(0)项目(简称项目) 在右部的某个地方加点的产生式 例:AXYZ对应有四个项目 A  ·XYZ A  X·YZ A  XY·Z A  XYZ· 例:A只有一个项目和它对应 A  ·

  27. 5.3LR分析器 构造SLR分析表的两大步骤 • 从文法构造识别活前缀的DFA • 从上述DFA构造分析表

  28. 5.3LR分析器 从文法构造识别活前缀的DFA 1. 拓广文法 E  E + T | T T T * F | F F ( E ) | id

  29. 5.3LR分析器 从文法构造识别活前缀的DFA 1. 拓广文法 E   E E  E + T | T T T * F | F F ( E ) | id

  30. 5.3LR分析器 从文法构造识别活前缀的DFA 2. 构造LR(0)项目集规范族 I0: E  ·E

  31. 5.3LR分析器 从文法构造识别活前缀的DFA 2. 构造LR(0)项目集规范族 I0: E  ·E E  ·E + T E  ·T

  32. 5.3LR分析器 从文法构造识别活前缀的DFA 2. 构造LR(0)项目集规范族 I0: E  ·E E  ·E + T E  ·T T  ·T * F T  ·F

  33. 5.3LR分析器 从文法构造识别活前缀的DFA 2. 构造LR(0)项目集规范族 I0: E  ·E E  ·E + T E  ·T T  ·T *F T  ·F F  ·(E) F  ·id

  34. 5.3LR分析器 从文法构造识别活前缀的DFA 2. 构造LR(0)项目集规范族 I0: E  ·E (核心项目) E  ·E + T E  ·T (非核心项目, T  ·T *F 通过对核心项目求闭包 T  ·F 而获得) F  ·(E) F  ·id

  35. 5.3LR分析器 从文法构造识别活前缀的DFA 2. 构造LR(0)项目集规范族 I0: I1: E  ·E E   E· E  ·E + T E  E· + T E  ·T T  ·T * F T  ·F F  ·(E) F  ·id

  36. 5.3LR分析器 从文法构造识别活前缀的DFA 2. 构造LR(0)项目集规范族 I0: I1: E  ·E E   E· E  ·E + T E  E· + T E  ·T T  ·T *F I1 := goto ( I0, E ) T  ·F F  ·(E) F  ·id

  37. 5.3LR分析器 从文法构造识别活前缀的DFA 2. 构造LR(0)项目集规范族 I0: I1: E  ·E E   E· E  ·E + T E  E· + T E  ·T T  ·T *F I2: T  ·F E T· F  ·(E) T T·*F F  ·id

  38. 5.3LR分析器 从文法构造识别活前缀的DFA 2. 构造LR(0)项目集规范族 I0: I1: E  ·E E   E· E  ·E + T E  E· + T E  ·T T  ·T *F I2: T  ·F E T· F  ·(E) T T·*F F  ·id I3: T  F·

  39. 5.3LR分析器 I0: I4: E  ·E F  (·E ) E  ·E + T E  ·T T  ·T *F T  ·F F  ·(E) F  ·id

  40. 5.3LR分析器 I0: I4: E  ·E F  (·E ) E  ·E + T E  ·E + T E  ·T E  ·T T  ·T *F T  ·T *F T  ·F T  ·F F  ·(E) F  ·(E) F  ·id F  ·id

  41. 5.3LR分析器 I0: I4: E  ·E F  (·E ) E  ·E + T E  ·E + T E  ·T E  ·T T  ·T *F T  ·T *F T  ·F T  ·F F  ·(E) F  ·(E) F  ·id F  ·id I5: F id·

  42. E I1 I0 T I2 F I3 ( I4 id I5 5.3LR分析器

  43. E I1 I0 T I2 F I3 ( I4 id I5 5.3LR分析器 I1: E   E· E  E·+ T

  44. E I1 I0 T I2 F I3 ( I4 id I5 5.3LR分析器 I1: E   E· E  E·+ T I6: EE + ·T T ·T * F T ·F F ·(E) F ·id

  45. E I1 I0 T I2 F I3 ( I4 id I5 5.3LR分析器 I1: I2: E   E· E T· E  E·+ T TT·*F I6: EE + ·T T ·T * F T ·F F ·(E) F ·id

  46. E I1 I0 T I2 F I3 ( I4 id I5 5.3LR分析器 I1: I2: E   E· E T· E  E·+ T TT·*F I6: I7: EE + ·T TT*·F T ·T * FF ·(E) T ·FF ·id F ·(E) F ·id

  47. E I1 I0 T I2 F I3 ( I4 id I5 5.3LR分析器 I3: T F·

  48. E I1 I0 T I2 F I3 ( I4 id I5 5.3LR分析器 I4: F (·E ) E  ·E + T E  ·T T  ·T *F T ·F F  ·( E ) F  ·id

  49. E I1 I0 T I2 F I3 ( I4 id I5 5.3LR分析器 I4: I8: F (·E ) F (E·) E  ·E + T E  E·+ T E  ·T T  ·T *F T ·F F  ·( E ) F  ·id

  50. E I1 I0 T I2 F I3 ( I4 id I5 5.3LR分析器 I4: I8: F (·E ) F (E·) E  ·E + T E  E·+ T E  ·T T  ·T *F I2: T ·F E T· F  ·( E ) TT·*F F  ·id

More Related