前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LL(1),LR(0),SLR(1),LALR(1),LR(1)

LL(1),LR(0),SLR(1),LALR(1),LR(1)

作者头像
平凡的学生族
发布2019-05-25 10:02:31
1.3K0
发布2019-05-25 10:02:31
举报
文章被收录于专栏:后端技术

LL(k)文法

LL(1)

为什么需要FIrst和Follow,以及如何根据First与Follow生成预测分析表

步骤

首先生成First,再结合First生成Follow, 最后根据First与Follow生成预测分析表

LL(1),LR(0),SLR(1),LALR(1),LR(1)对比

http://blog.csdn.net/linraise/article/details/9237195

LR(0)的介绍

从左分析,从栈顶归约,

LR(0) -> SLR的必要性

对于LR(0),由于分析中一遇到终态就归约,一遇到First集就移进,如果有一下状态I1,I1包含两个语法: F->Y·+ F->Y· 那LR(0)就无法确定到底是移进还是归约了。 这就是为什么我们要引入SLR解决reduce-shift conflict(尽管不能完全解决该问题).

SLR的介绍

如果不仅考虑First,而且把Follow集也考虑在内,就可以一定程度上解决reduce-shift conflict. 还是以上语法: F->Y·+B F->Y· 如果FOLLOW(F) = {a, b},那么当我们遇到a与b时,就可以选择归约F;当我们遇到+时,就可以选择移进操作。

SLR -> LR(1)的必要性

SLR不能完全解决reduce-shift confict. 同样还是上面的语法: F->Y·+B F->Y· 如果 FOLLOW(F) = {a, b, +},那当我们遇到 + 符号时,就无法确定到底是选择移进操作得到F->Y+·B,还是归约F。 SLR不能完全解决reduce-shift conflict. 这就是为什么我们要选择LR(1) / LALR(1)了

LR(1)的介绍

https://parasol.tamu.edu/~rwerger/Courses/434/lec10.pdf

LALR table 构造

关键

合并同心集

合并前

合并后

构造方法: 见中文第二版P.169下方[算法 4.56]

reduce-shift reduce 移进-归约冲突

LR(0)不能解决移进-归约冲突(不知道该移进还是归约)

SLR

写出First、Follow,并得出LR(0)

根据中文版P.161画出SLR table.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.01.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LL(1)
  • 步骤
  • LL(1),LR(0),SLR(1),LALR(1),LR(1)对比
  • LR(0)的介绍
  • LR(0) -> SLR的必要性
  • SLR的介绍
  • SLR -> LR(1)的必要性
  • LR(1)的介绍
  • LALR table 构造
    • 关键
    • reduce-shift reduce 移进-归约冲突
    • SLR
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档