1 / 13

简单优先分析方法

简单优先分析方法. 一种 shift-reduce 分析方法 根据文法符号的优先关系确定句柄 文法符号的优先关系的确定. 简单优先分析中的三种关系. X  Y : 当且仅当存在一个产生式 A→ … XY … X ⊳ Y : 当且仅当存在一个产生式 A→ … XB … 并有 B  + Y … 。 X ⊲ Y : 当且仅当存在一个产生式 A→ … BC … 并有 B  + … X,C  * Y … 。 文法 G 为 简单优先文法 如果满足:  对于任意两个语法符号 X 和 Y, 至多成立一种

clio
Download Presentation

简单优先分析方法

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. 简单优先分析方法 • 一种shift-reduce分析方法 • 根据文法符号的优先关系确定句柄 • 文法符号的优先关系的确定

  2. 简单优先分析中的三种关系 • X  Y :当且仅当存在一个产生式A→…XY… • X ⊳ Y :当且仅当存在一个产生式A→…XB… 并有B+Y…。 • X ⊲ Y :当且仅当存在一个产生式A→…BC… 并有B+…X,C*Y…。 • 文法G为简单优先文法如果满足:  对于任意两个语法符号X和Y,至多成立一种 优先关系;  任意两个产生式都具有不同的右部。

  3. 文法优先关系的确定 • FIRST(W) ={S | W + S…,S(VNVT)} • LAST(W) ={S | W + …S,S(VN VT)} • 若有U…SiSj…: 则有Si  Sj ; • 若有U…SiW…:任SjFIRST(W),有Si⊳ Sj • 若有U…VW…:任SiLAST(V), Sj(FIRST(W) {W})则有Si ⊲Sj 输入流的结束标志 ‘#’,文法的开始符为Z, • SFIRST(Z),有#⊳S,; 且#⊳Z • SLAST(Z),有S⊲#,; 且Z⊲#

  4. Z M L FIRST b a ( M ( a LAST b aL ) ) Z M L b ( a ) # Z M L b ( a ) # • 例: Z  bMb M  a M  (L L  Ma) ⊲   ⊲ ⊲  ⊳ ⊳ ⊲  ⊳ ⊳ ⊳  ⊲ ⊲ ⊲ ⊲ ⊳ ⊳

  5. 简单优先分析算法要点 • 找第一个使Sj⊲Sj+1的Sj • 从Sj开始往前(左)找第一个使Si-1⊳Si的Si • 用SiSi+1…Sj去查产生式的右部,并用相应的左部符号代替句柄SiSi+1…Sj (归约)。 • 重复上述过程,直至输入符结束。如果归约出文法的开始符号则成功。否则失败。

  6. 符号栈 关系 输入流 # ⊳b ( a a ) b # # b ⊳ ( a a ) b # # b ( ⊳ a a ) b # # b ( a ⊲ a ) b # # b ( M  a ) b # # b ( M a  ) b # # b ( M a ) ⊲ b # # b ( L ⊲ b # # b M  b # # b M b ⊲ # # Z ⊲ # 简单优先分析实例

  7. 二义性文法的处理 • 任何语法分析方法都拒绝二义性,会引 起分析动作的不确定。 • 解决二义性的方法: 改变文法,消除二义性。 增加额外的规则 • 利用二义性简化语法分析

  8. 例条件语句定义: [i] S  if E then S else S [j] S  if E then S • 表达式文法: E  E + E E  E * E E  id E  ( E )

  9. 第四章总结 • 上下文无关文法(CFG) : (VN,VT,S,P) • 语法分析树:二义性文法,句柄 • 文法分析算法:三个集合的定义及求法 • 语法分析作用:目的是判定输入串是否为文法所接受的语言

  10. 语法分析方法 • 自顶向下分析: 思想:从文法开始符出发,适当选择产生式, 力图推导出输入串。 关键问题:产生式的选择 主要方法: 递归下降法 LL(1)分析方法 等价变换:消除公共前缀,消除左递归 分析条件:分析方法:分析过程:

  11. 自底向上分析: 思想:从输入串出发,从左到右进行归约, 直至归约出文法的开始符。 关键问题:何时归约、归约产生式的选择 主要分析方法-LR分析方法: LR(0) SLR(1) LR(1) LALR(1) 简单优先分析方法 :优先关系矩阵 LR分析方法比较: LRSM的构造(展望符的计算): 判断分析条件: 构造分析表: 分析过程:

  12. LR分析方法的比较 • 状态数: LR(0)=SLR(1)=LALR(1)<LR(1) • 展望符的确定: LR(0)无展望符;SLR(1)利用Follow集解 决冲突;LR(1)针对不同位置确定展望符, LALR(1)利用合并/传播方法计算展望符。 • 分析能力: LR(0) < SLR(1) < LALR(1) < LR(1) • 应用: LALR(1)较通用,LR(1)属于理论方法。

  13. 习题 • 写出如下文法的递归下降分析程序和LL(1)分析表 P → begin d;X end X → d;X | sY Y → ;sY |  • 有文法如下: G1:SAa| bAc| dc| bda Ad G2:SAa| bAc| Bc| bBa Ad Bd 证明G1是LALR(1)文法但不是SLR(1)文法,并构造 LALR(1)分析表;G2是LR(1)文法但不是LALR(1)文 法并构造LR(1)分析表。 • 判断文法是否是简单优先文法(判断是否有多重定义) SA/ AAa AAS A/

More Related