编译原理-LR分析概述

前言

  • LR分析过程是规范推导的逆过程,所以LR分析过程是一种规范的规约
  • 基本思想:在规范规约的过程中,一方面记住已经移进和规约出来的整个符号串,另一方面根据所用的产生式推测未来可能遇见的输入符号
  • 优点:文法适用范围广,能指出错误位置
  • 缺点:手工工作量大,需要使用自动产生器
编译原理-LR分析概述_第1张图片
微信公众号:JavaWeb架构师

LR分析器的构成

  • 总控程序:对所有的LR分析器,总空程序是相同的,完成读头移动,查表之类的操作
  • 分析表:不同文法的分析表是不同的。同一文法采用不同的LR分析方法得到的分析表也是不同的。分析表由动作表ACTION表和状态转换表GOTO表组成
  • 分析栈:包括文法符号栈、状态栈


    编译原理-LR分析概述_第2张图片
    微信公众号:JavaWeb架构师

分析表

  • GOTO表:当前状态栈顶符号与当前输入文法符号作用,得到下一个状态。如:[Si, X] = Sj,表示状态栈顶为Si,输入符号为X时,去下一个状态Sj
  • ACTION表:当前状态栈顶符号与当前输入文法符号作用,执行某个动作。动作可能有以下几种:
    1)移进:当 Sj = GOTO[Si, a] 成立时,把状态Sj移入状态栈,把a移入符号栈(i,j表示状态号)
    2)规约:有产生式 A → β,初始状态栈在Si,|β| = r(长度为r)。当在栈顶形成句柄β时,则规约为A(弹出整个β,再把A入栈,在状态栈中也要弹出β长度的元素)。接着把 GOTO[S(i-r), A] 的状态 Sj 入状态栈
    3)接受acc:符号栈中剩下开始符号,输入带剩下#,则分析成功
    4)报错:状态栈顶为某一状态下不该遇到的文法符号时,报错

说明

  • 现在,我们大概了解了LR的思想,和数据结构,如何求分析表是核心,后面一起来求吧

其它

课件下载:

关注下方微信公众号,
回复:
LR分析概述.code
  • 欢迎加入交流群:451826376

  • 更多信息:www.itcourse.top

完整教程PDF版本下载

你可能感兴趣的:(编译原理-LR分析概述)