编译原理学习笔记(十一)~LALR分析法

前言

        进行完LR(1)分析后,我们会发现,存在一些同心项目【同心:如果除展望符外,两个LR(1)项目集是相同的,则称这两个LR(1)项目集是同心的】那么是否可以简化这些项目呢?是的,可以,简化后就是LALR分析。

LALR分析

LALR:lookahead-LR

基本思想:

  • 寻找具有相同核心的LR (1) 项集,并将这些项集合并为一个项集。 所谓项集的核心就是其第一分量的集合
  • 然后根据合并后得到的项集族构造语法分析表

举例说明吧
在这里插入图片描述
从上图我们可以发现:I4和I11、I8和I10、I7和I13、I5和I12都是同心的,那么我们就可以将这些同心的项目集合并,形成如下:
注:分析表的方法同LR(1)
在这里插入图片描述

LALR分析冲突

在这里插入图片描述
注1:合并同心项集 不会产生移进- 归约冲突
注2:合并同心项集后,虽然不产生冲突,但可能会推迟错误的发现

LALR(1)的特点

  • 形式上与LR(1)相同
  • 大小上与LR(0)/SLR相当
  • 分析能力介于SLR和LR(1)二者之间:SLR<LALR(1)<LR(1)
  • 合并后的展望符集合仍为FOLLOW集的子集

LALR文法

定义:如果分析表中没有语法分析动作冲突,给定的文法就称为LALR (1) 文法,就可以根据该分析表进行语法分析

发布了218 篇原创文章 · 获赞 523 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/weixin_44225182/article/details/105599118