编译原理结构框架5自底向上的语法分析

第五章 自底向上的语法分析      


重点:自底向上分析的基本思想,算符优先分析法的基本思想,简单算符优先分析法。LR分析器的基本构造思想,LR分析算法,规范句型活前缀及其识别器——DFALR(0)分析表的构造,SLR(1)分析表的构造,LR(1)分析表的构造。

难点:FIRSTOPLASTOP,算符优先关系的确定,算符优先分析表的构造,素短语与最左素短语的概念。规范句型活前缀,LR(0)项目集闭包与项目集规范族,它们与句柄识别的关系,活前缀与句柄的关系,LR(1)项目集闭包与项目集规范族。 


5.1 自底向上语法分析的核心问题:

n 寻找句型中的 当前归约对象 ——“ 句柄 进行归约 , 不同的方法寻找句柄 ,就可获得不同的分析方法


5.2 计算FIRSTOP:

若有产生式 B -> b... 或 B -> Cb , 则 b ∈ FIRSTOP(B)\

若有产生式 A -> B,,, 则有,FIRSTOP(B) ⊆ FIRST(A)


5.3 计算LASTOP:

若有产生式 B -> ...b 或 B -> ...Cb, 则 b ∈ LASTOP(B)

若有产生式 A -> ...B 则有 , LASTOP(B) ⊆ LASTOP(B)

 

5.4 分析器的4个动作:

1)移进:将下一输入符号移入栈

2)归约:用产生式左侧的非终结符替换栈顶的句柄(某产生式右部)

3)接受:分析成功

4)出错:出错处理



5.5 算符优先文法识别的其实是LPP(最左素短语)

LR识别的其实是活前缀(这个前缀不含相应句型的句柄右部的任何符号


5.6 素短语:

1.素短语是一个短语

2.它至少包含一个终结符

3.除自身外,不再包含其他终结符的短语 


5.7 LR(0) 与 SLR(1) 与 LR(1) 的区别联系

LR(0): 可规约项,无论遇到什么符号都进行规约。

           判断是否是LR(0), 看是否产生了 规约-规约 冲突 和 移近-规约 冲突

SLR(1): 向前查看一个输入符号,判断当前是否可以归约 (只有输入符是该语法变量的FOLLOW集时,才可以规约)。

                判断是否是SLR(1), 看是否产生了 规约-规约 冲突 和 移近-规约 冲突

LR(1) : 分析仅考虑LR(1)项目中的后继符

   LR(1) 项目集族的求法
   CLOSURE I ):给定 LR(1) 项目 I ,求 I 的闭包,目的是为了合并某些状态,节省空间
   GO I X ):转移函数

5.8
LR( 0 ) 分析法 不需要 向前查看输入符号,只需要根据当前的 栈顶状态 就可以确定下一步所应采取的动作
LR(0)项目集:右部某个位置标有圆点的产生式称为相应文法的LR(0)项目
n 归约( Reduce )项目 : S→bBB .
n 移进( Shift )项目: S→. bBB
n 待约项目: S→b.BB   S→bB.B

5.9 CFG不总是LR(0)文法.

SLR(1):向前查看一个输入符号,判断当前是否可以归约

LR(1):


5.10 本章小结

n 自底向上的语法分析从给定的输入符号串 w 出发,自底向上地为其建立一棵语法分析树。
n 移进 - 归约分析是最基本的分析方式,分为优先法和状态法。
n 算符优先分析法是一种有效的方法,通过定义终结符号之间的优先关系来确定移进和归约。
n LR 分析法有着更宽的适应性。该方法通过构建识别规范句型活前缀的 DFA 来设计分析过程中的状态。可以将 LR 分析法分成 LR (0) SLR (1) LR (1) LALR (1)
n 通过增加附加的信息可以解决一些二义性问题。
n Yacc LALR (1) 语法分析器的自动生成工具。


测试:

文法:

S => 0S0

S => 1S1

S => 01

1. 计算该文法的SLR(1)项目集规范族,

构造识别其所有规范句型活前缀的DFA

2. 该文法是SLR(1)文法吗?若是,给出其SLR(1)分析表,

若不是,说明理由。

1.

S' -> .S

S' -> S.


S -> .0S0

S -> 0.S0

S -> 0S.0

S -> 0S0.


S -> .1S1

S -> 1.S1

S -> 1S.1

S -> 1S1.


S -> .01

S -> 0.1

S -> 01.

2.


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值