LR(0)分析算法

LL(1)分析算法

从左( L) 向右读入程序,最左(L) 推导,采用一个(1) 前看符号
++ 优点:
– 算法运行高效
– 有现成的工具可用
++缺点:
– 能分析的文法类型受限
– 往往需要文法的改写


自底向上分析算法

研究其中最重要也是最广泛应用的一类
++ LR分析算法(移进-归约算法)
– 算法运行高效
– 有现成的工具可用
++ 这也是目前应该广泛的一类语法分析器的自动生成器中采用的算法
– YACC, bison, CUP, C#yacc, 等


自底向上分析的基本思想

最右推导的逆过程!
这里写图片描述


点记号

为了方便标记语法分析器已经读入了多少输入,我们可以引入一个点记号 •
这里写图片描述


自底向上分析

这里写图片描述

另外的写法

这里写图片描述


生成一个逆序的最右推导

需要两个步骤:
– 移进 一个记号到栈顶上,或者
– 归约 栈顶上的n个符号(某产生式的右部)到左部的非终结符
这里写图片描述
核心的问题:如何确定移进和归约的时机?


算法思想

LR——利用了有记忆能力的自动机

这里写图片描述


LR(0)分析表

这里写图片描述


LR(0)分析算法

这里写图片描述

这里写图片描述


LR(0)分析表构造算法

这里写图片描述


Q=enQueue(C0)
//enQueue——入队
//Q就是作为一个工作表,看哪些状态没有计算过


D=goto(C,x)
//给一个项集(项目集合)C,在读入了一个文法符合(终结符T或非终结符N),它能够到达哪些状态。


goto和closure

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值