第五章 语法分析——自下而上分析

一、知识点

一、移进归约

1.基本思想
 用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。
 2.归约
 是指根据文法的产生式规则,把产生式的右部替换成左部符号。
、规范归约
1.短语
2.直接短语
 特别是,如果有A=> β,则称 β是句型 αβ相对于规则A—> β 的直接短语。
3.句柄一个句型的最左直接短语称为该句型的句柄。

4.规范归约
定义:假定是文法G的一个句子,我们称序列
       n, n-1, ,0
   是的一个规范归约,如果此序列满足:
  (1)  n= 
  (2)  0为文法的开始符号,即0=S
  (3)  对任何i,0 < i  n, i-1是从i经把句柄替换成为相应产生式左部符号而得到的。
6.修剪语法树
 使用修剪语法树的方法来加深对自下而上语法分析的理解。
 (1)子树:是由该树的某个结点(子树的根)连同它的所有子孙组成。
 (2)简单子树:只有单层分支的子树(只有父子两代没有第三代)

三、算符优先分析法
思路:
 定义算符之间优先关系,借助这种关系来寻找“可归约串”和进行归约
1.算符优先文法
(1)算符文法
 一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下形式的产生式右部:
…QR…
    则我们称该文法为算符文法,也称OG文法
2.构造算符优先关系表
(1)通过检查产生式的每一个候选式可以找出满足a=.b
  (即P→…ab…或P→…aQb…的产生式)
(2)为了满足<.和>.,需对G中每个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P)
3、算符优先分析算法的设计
(1)问题的提出
自下而上分析
 移进-归约法:句柄为可归纳串
 算符优先分析法:最左素短语为可归纳串
(2)素短语
 指一个句型的短语,它至少包括有一个终结符号且除去它本身之外不再含任何更小的素短语
(3)最左素短语
 处在句型最左端那个素短语成为最左素短语

四、LR分析方法
LR分析方法是一种自下而上的分析方法
LR分析法的归约过程是规范推导的逆过程,所以LR分析过程是一种规范归约过程
LR分析方法是一种适用于一大类上下文无关文法的分析方法
比较复杂,不适于用手工实现,可借助于YACC/bison实现
根据归约过程中向前看输入符号串中字符的个数,定义不同的LR(k)分析方法,通常,k=0,1
LR文法
 一个文法,如果能构造出一个所有条目都唯一的分析表。
LR(k)文法
 最多向前看K个的符号就可以决定动作的LR分析器所分析的文法成为LR(k)文法。
我们最感兴趣的是k=0,1
活前缀特点:
该前缀加上被分析串中未被分析的终结符,就可以构成一个规范句型
只要输入串的已扫描部分可归约成一个活前缀,意味着扫描过的部分没有错误
二、LR(0)项目集规范族的构造
1.构造G的拓广文法G’
 设S为文法G的开始符号,构造一个文法G’,它包含整个文法G,并且引进了一个不出现在G中的非终结符S,并加进一个新产生式S→S,这个S是G的开始符号。把G’成为G的拓广文法。(有一个仅含项目S→S. 的状态,这就是唯一的“接受”状态)
2.LR(0)分析表的ACTION和GOTO表的构造步骤
a)若项目A→•a属于Ik,且转换函数GO(Ik,a)=Ij,当a为终结符时 ,则置ACTION[k,a]为Sj。
b)若项目A→•属于Ik, 则对a为任何终结符或#′,置ACTION[k,a]=rj, j为产生式在文法G′中的编号。
c)若GO(Ik,A)=Ij,则置GOTO[k,A]=j,其中A为非终结符,j为某一状态号。
d)若项目S′→S•属于Ik,则置ACTION[k,#]= acc。
e)其它填上“报错标志”。
     LR(0)
  SLR(1):生成的LR(0)项目集如有冲突,则根据非终结符的FOLLOW集决定。
  LR(1)、LR(k):项目由心与向前搜索符组成,搜索符长度为1或k。
  LALR(1):对LR(1)项目集规范族合并同心集。

二、



三、感受

通过对这章的学习,感觉有点难,挺难理解。






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值