美文网首页
编译器笔记12-语法分析-自底向上分析概述

编译器笔记12-语法分析-自底向上分析概述

作者: 衣忌破 | 来源:发表于2019-11-11 11:33 被阅读0次

自底向上的语法分析

  • 从分析树的底部(叶节点)向顶部(根节点)方向构造分析树

  • 可以看成是将输入串w归约为文法开始符号S的过程

  • 自顶向下的语法分析采用最左推导方式,自底向上的语法分析采用最左归约方式(反向构造最右推导)。

  • 自底向上语法分析的通用框架移入-归约分析 (Shift-Reduce Parsing)

例:移入-归约分析.png

分析过程中一旦句柄在栈顶形成就马上进行归约操作,保证了每一步的归约都是最左归约。关于什么是句柄可以查看文章 句柄与移入-归约分析的关系

最左归约是最右推导的逆过程,最右推导的每一步得到的符号串都是一个句型我们称之为最右句型或者是规范句型,因此最左归约得到符号串也是规范句型。

因此栈内符号串+剩余输入=“规范句型”,在自底向上的分析过程中每次归约的符号串是当前句型的直接短语。

例:移入-归约分析.png

移入-归约分析的工作过程

  • 在对输入串的一次从左到右扫描过程中,语法分析器将零个或多个输入符号移入到栈的顶端,直到它可以对栈顶的一个文法符号串β进行归约为止。

  • 然后,它将β归约为某个产生式的左部。

  • 语法分析器不断地重复这个循环,直到它检测到一个语法错误,或者栈中包含了开始符号且输入缓冲区为空(当进入这样的格局时,语法分析器停止运行,并宣称成功完成了语法分析)。

移入-归约分析器可采取的4种动作

  • 移入:将下一个输入符号移到栈的顶端

  • 归约:被归约的符号串的右端必然处于栈顶。语法分析器在栈中确定这个串的必然处于栈顶。语法分析器在栈中确定这个串的 左端,并决定用哪个非终结符来替换这个串,并决定用哪个非终结符来替换这个串。

  • 接收:宣布语法分析过程成功完成。

  • 报错:发现一个语法错误,并调用错误恢复子例程。

移入-归约分析存在的问题.png 移入-归约分析存在的问题.png 移入-归约分析存在的问题.png

问: 开始没有分析树我怎么知到栈顶符号串是不是句柄?如果有分析树说明句型符合文法那我还有做分析的必要?
答: 这就需要LR分析法,去解决上述问题。可参考文章 LR分析法概述

相关文章

  • 编译器笔记12-语法分析-自底向上分析概述

    自底向上的语法分析 从分析树的底部(叶节点)向顶部(根节点)方向构造分析树 可以看成是将输入串w归约为文法开始符号...

  • 第四章 自顶向下的分析

    【语法分析的方法】=【自顶向下】语法分析法+【自底向上】语法分析法 1. 自上而下的分析法:从语法的开始符号出发,...

  • 编译原理——语法分析(自底向上语法分析)

    1、句柄 注意:如果文法具有二义性,则句柄不一定唯一。只有文法没有二义性,它的每个右句柄才有一个句柄。 2、用栈实...

  • 编译原理二

    语法分析 整章开篇 语法分析分为两类即自顶向下和自底向上两种。 文法和语言 语言:对字母表来说,*上的任意一个子集...

  • 【MOOC:编译原理】第一章 编译概述

    第一讲 编译器概述 第二讲 编译器结构 编译器具有非常模块化的高层结构 前端:词法分析, 语法分析 后端:指令生成...

  • 精读《手写 SQL 编译器 - 语法分析》

    1 引言 接着上周的文法介绍,本周介绍的是语法分析。 以解析顺序为角度,语法分析分为两种,自顶而下与自底而上。 自...

  • 第四章第1节 自底向上的语法分析

    自底向上的语法分析 从分析树的底部(叶节点)向顶部(根节点)方向构造分析树可以看成是将输入串w归约为文法开始符号S...

  • iOS 编译过程

    iOS 编译采用 Clang 作为编译器前端,LLVM 作为编译器后端,编译器前端负责语法分析,语义分析,生成生成...

  • 第五章第8节 L-属性定义的自底向上翻译

    L-属性定义的自底向上翻译 给定一个以LL 文法为基础的L-SDD ,可以修改这个文法,并在LR语法分析中计算这个...

  • JavaScript运行机制

    传统代码编译过程(编译器): 1、词法分析 将变量,运算符等直接翻译 2、语法分析 对翻译结果进行语法分析,构造语...

网友评论

      本文标题:编译器笔记12-语法分析-自底向上分析概述

      本文链接:https://www.haomeiwen.com/subject/jcttictx.html