自上而下的语法分析 - 编译原理 - 龙书

自上而下的语法分析(消除左递归,提取左因子)

 自上而下的语法分析:(推导)

由根节点到叶节点

 

※最左推导和最右推导

(每一步替换最左边的非终结符/每一步替换最右边的非终结符),最右推导称为规范推导。最右推导对应于最左规约(规范规约)

例:

文法:

S--->AB

A--->a|t

B---->+CD

C--->a

D---->a

 

最右推导:

S--->AB---->A+CD--->A+Ca---->A+aa----->a+aa

最左推导:

S---->AB----->aB--->a+CD--->a+aD----->a+aa

 

自上而下文法设计所要注意的:

 

※※左递归:

左递归会使分析进入到无限循环之中

 

直接左递归和间接左递归

直接左递归:如果A→A α,则称文法G是直接左递归的

 

消除左递归

消除简单的左递归:

对于含有左递归的产生式 A→A α| β

可用下面的非左递归的产生式 代替:

                A→ β A’

                A’ → αA’| ε

 

消除左递归例:

自上而下的语法分析(消除左递归,提取左因子) - 小镜子~ - 菜园子

 

 

一般情况消除左递归:

 

对于一般情况而言,若某一文法G的产生式具有如下形式:

自上而下的语法分析(消除左递归,提取左因子) - 小镜子~ - 菜园子

 

则可用如下方法消除左递归:

自上而下的语法分析(消除左递归,提取左因子) - 小镜子~ - 菜园子

 

 

间接左递归:

自上而下的语法分析(消除左递归,提取左因子) - 小镜子~ - 菜园子

 

S→Qc→Rbc→Sabc,出现了左递归

 

 

消除以上文法的间接左递归:

1.将非终结符排序为R、Q、S

2.R不存在左递归,将R代入Q:

      Q → Sab|ab|b

3. Q不存在左递归,将Q代入S

     S→ Sabc|abc|bc|c

4.消除直接左递归后,得文法:

自上而下的语法分析(消除左递归,提取左因子) - 小镜子~ - 菜园子

 

化简得:

自上而下的语法分析(消除左递归,提取左因子) - 小镜子~ - 菜园子

 

 

※※提取左因子:

(如果最左边的是一样的,就不明确下一步应该走哪条路)

比如文法:P →(Q)|aP|a

遇到a,是P→aP,还是P→a?

 

 

提取左因子的算法:

自上而下的语法分析(消除左递归,提取左因子) - 小镜子~ - 菜园子

 

 

 

文章出处:http://www.360doc.com/content/13/1210/10/9200790_336017386.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值