编译原理学习笔记~LALR分析法

Posted 海轰Pro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译原理学习笔记~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) 文法,就可以根据该分析表进行语法分析

以上是关于编译原理学习笔记~LALR分析法的主要内容,如果未能解决你的问题,请参考以下文章

编译器构造中自底向上的LALR语法分析的语法分析表生成的实现

LRSLRLRLALR文法之间的关系—编译原理

编译原理—翻译方案属性栈代码

编译原理语法分析之自顶向下分析

什么是LLLRLR文法LR分析表—编译原理

编译原理学习笔记