4.2.5 预测分析法与预测分析表的构造

2023-10-27

4.2.5 预测分析法与预测分析表的构造

预测分析法也称为 LL ( 1 )分析法。这种分析法是确定的自上而下分析的另一种方法,采用这种方法进行语法分析要求描述语言的文法是 LL ( 1 )文法。
一个预测分析器由一张预测分析表(也称为 LL ( 1 )分析表)、一个先进后出分析栈和一个总控程序三部分组成,见图 4.3 。在这里插入图片描述
图中输入缓冲区 T [j ]中存放待分析的输入符号串,它以右界符 $ 作为结束。分析栈S [ k ]中存放替换当前非终结符的某规则右部符号串,句子左界符“ $ ”存入栈底。预测分析表是一个 M [ A ,a ]形式的矩阵,其中 A 为非终 结符, a 是终结 符或“ $ ”。分析表元素M [ A , a ]中的内容为一条关于 A 的规则,表明当 A 面临输入符号 a 时,当前推导所应采用的候选式,当元素的内容为“出错标志”(表中用空白格表示“出错标志”)时,则表明 A 不应该面临输入符号 a 。
预测分析器的总控程序在任何时候都是根据栈顶符号和当前输入符号 a 来决定分析器的动作,其工作过程用流程图 4.4 表示。在这里插入图片描述
预测分析器的总控程序对于不同的 LL ( 1 )文法都是相同的,而预测分析表对于不同的LL ( 1 )文法是不相同的,下面我们介绍对于任给的文法 G 构造预测分析表的算法。
输入:文法 G 。
输出:预测分析表 M 。

方法:
(1 )计算文法 G 的每一非终结符的 FIRST 集和 FOLLOW 集。
① 对每一文法符号 X ∈ ( V N ∪ V T ),计算 FIRST ( X ):

a. 若 X ∈ V T ,则 FIRST ( X ) = { X }。

b. 若 X ∈ V N 且有规则 X → a …, a ∈ V T ,则 a ∈FIRST ( X )。

c. 若 X ∈ V N 且有规则 X → ε ,则 ε ∈FIRST ( X )。

d. 若有规则 X → y 1 y 2 … y n ,对于任意的 i ( 1≤ i ≤ n ),当 y 1 y 2 … y i -1 都是非终结符,且y 1 y 2 … y i -1 ⇒* ε 时,则将
FIRST ( y i )中的非 ε 元素加到 FIRST ( X )中。

特别是,若 y 1 y 2 … y n ⇒* ε,则 ε ∈FIRST ( X )。

e. 反复使用 a. ~d. 直到 FIRST 集不再增大为止。

② 对文法中的每一个 A ∈ V N ,计算 FOLLOW ( A ):

a. 对文法的开始符号 S ,则将“ $ ”加到 FOLLOW ( S )中。

b. 若 A → αB β 是一条规则,则把 FIRST (β )中的非 ε 元素加到 FOLLOW (B )中。

c. 若 A → αB 或 A → αB β 是一条规则且 β ⇒* ε,则把 FOLLOW ( A )加到 FOLLOW ( B )中。

d. 反复使用 b.~c. 直到每个非终结符的 FOLLOW 集不再增大为止。

(2 )对文法的每个规则 A → α ,若 a ∈FIRST ( α ),则置 M [ A , a ] = A → α 。

(3 )若 ε ∈FIRST ( α ),对任何 b ∈FOLLOW ( A ),则置 M [ A , b ] = A → α 。

(4 )把分析表中无定义的元素标上出错标志 error (表中用空白格表示)。

【例 4.10 】设有文法 G [ S ]:

S → a |∧| ( T )
T → ST'
T' → , ST' | ε

试构造该文法的预测分析表。
分析 首先判断该文法是否 LL ( 1 )文法,在例 4.9 中已经证明该文法是 LL ( 1 )文法。
计算该文法每个非终结符的 FIRST 集和 FOLLOW 集:在这里插入图片描述
对规则 S → a ,因为 FIRST (a ) = { a },所以置 M [ S , a ] = S → a 。

对规则 S →∧ ,因为 FIRST ( ∧ ) = { ∧ },所以置 M [ S , ∧ ] = S →∧

对规则 S → ( T ),因为 FIRST (( T )) = {(},所以置 M [ S ,(] = S → ( T )。

对规则 T → ST’ ,因 为 FIRST ( ST’ ) = {(,a , ∧ },所 以 置 M [ T ,(] = T → ST’ ,M [ T , a ] = T → ST’ , M [ T , ∧ ] = T → ST’ 。

对规则 T’ → ,ST’ ,因为 FIRST (, ST’ ) = {,},所以置 M [ T’ ,]。 = T’ → , ST’ 。

对规则 T’ → ε ,因为 FOLLOW ( T’ ) = {)},所以置 M [ T’ ,)] = T’ → ε 。
文法 G [ S ]的分析表见表 4.1 。在这里插入图片描述
对输入串(a , a ) $ 预测分析器作出的移动如表 4.2 所示。在这里插入图片描述
可以证明,若一个文法 G 的分析表 M 不含多重定义元素,则该文法是 LL ( 1 )文法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4.2.5 预测分析法与预测分析表的构造 的相关文章

  • 编译原理三大经典书籍(龙书 虎书 鲸书)

    1 龙书 Dragon book 英文名 Compilers Principles Techniques and Tools 作者 Alfred V Aho Ravi Sethi Jeffrey D Ullman 中文名 编译原理技术和工具
  • 合肥工业大学编译原理实验二 LL1分析

    写在开头 当老师说这个实验最好写成图形界面时 我笑了 滑稽 心想终于可以用到python了 python真香 用python的数据结构可以很方便的表示LL1的某些东西 当然有利也有弊 方便的同时也会有一些坑 当然Java也牛逼 Java的图
  • 编译原理笔记

    目录 序章 编译原理 编译器 程序设计语言 第一章 概述 机器语言 第一代语言 特点 汇编语言 高级程序设计语言 鼻祖 时期 特点 翻译程序 汇编语言 解释语言 编译程序 编译过程 词法分析 语法分析 语义分析 中间代码生成 之前三步都是编
  • 深入浅出编译原理-5-一个简单语法分析器的C语言实现

    引言 前面已经介绍了编译器的预处理 词法分析 词法分析器的实现 也在其中说到了语法分析的任务和过程 语法分析的输入是词法单元序列 然后根据语言的文法表示 展开式 利用有限状态机理论 生成抽象语法树 然后遍历得到中间代码 即 三地址码 本节就
  • FLEX & BISON 联合使用

    flex是词法分析器 bison是语法分析器 基本原理就是flex解析出token后 让bison来使用 实际上 一般是先编写bison脚本 里面的token就是一个定义 没有实现 里面的yylex也是没有实现 只有定义 为什么先做biso
  • 【编译原理】flex实现词法分析器

    flex自动实现词法分析器 FLEX 与 BISON 的使用 FLEX介绍 Flex是一个生成词法分析器的工具 它可以利用正则表达式来生成匹配相应字符串的C语言代码 其语法格式基本同Lex相同 单词的描述称为模式 Lexical Patte
  • 静态类型推导

    前面说泛型的时候 提到了C 模板的实现方式是动态特性静态化 在实际情况中 这是一个提高效率的好办法 动态性的好处是灵活 开发简便 静态性的特性是效率高 编译期检查较好 因此很自然地就有一个问题 能不能各取所长 达到两全其美 应该说 在一定程
  • (二):C++求解文法的First集和Follow集

    功能及代码结构 为实现编译器前端 需要对文法进行分析 该部分实现从文件中读入文法 方便修改 用合适的数据结构表示并求解各个非终结符号的First集和Follow集 仓库 https github com xs1317 Complier 文件
  • LLVM里的寄存器分配 - 准备工作(一)

    1 背景介绍 本文档是基于 LLVM 的寄存器分配系列科研笔记第一篇 以一个 C 语言程序为主干介绍 LLVM 在寄存器分配前做的一些主要工作 分析在寄存器分配前期可能的写操作来源 并记录了我在研究 LLVM 后端中 SSA 形式的中间表示
  • 编译原理 实验四 LR(1)分析法程序

    源代码仓库 CompilePrincipleLearning experiment 4 yusixian CompilePrincipleLearning github com 源代码在demo文件夹中 一 实验目的 掌握LR 1 分析法的
  • cucu: a compiler you can understand (part 1)

    原文地址 http blog csdn net roger wong article details 8498591 译者序 最近在学习一些编译器的基本知识 就找到了这篇英文的博客 在csdn搜了一下貌似没有人翻译 所以我干脆翻译了算了 反
  • LLVM SSA 介绍

    最近做研究碰到了一个难题 需要对程序变量按生命期进行重命名 考虑到 SSA 中一个变量在不同的程序分支中赋值时会进行重命名 因此打算以此作为参考 看看能否采取同样的方法达到目的 由于之前看到的文档中都说 LLVM IR 是 SSA 形式的
  • 合肥工业大学编译原理实验一词法分析

    基本思路 词法分析是对输入语句串中一个个单词符号进行分析 最后格式化输出种别码 类型 位置等信息 那么 就可以考虑一次读入一个字符将它们拼接成一个字符串 当碰到空格或者分界符 时 就把前面已读的字符串格式化输出 再输出当前分界符 然后再往后
  • OCaml 安装以及简单的加减乘除Demo(以Ubuntu16.04为例)

    安装nix 参考 https mirrors tuna tsinghua edu cn help nix 安装nix sh lt curl https mirrors tuna tsinghua edu cn nix latest inst
  • 程序语言翻译器的设计与实现----算术表达式转换四元式(编译原理)

    此篇博客是将前面的内容进行整合并进一步提升 真正实现一个简单表达式语法的编译器 如果有不了解的地方请查看下面链接 词法分析 LR 1 分析 一 LR 1 分析 二 这里说的程序语言编译器是指将算术表达式部分进行翻译 暂时不包括优化以及目标语
  • arm-linux-gcc char与signed char和unsigned char

    1 三者关系 1 ANSI C 提供了3种字符类型 分别是char signed char unsigned char 而不是像short int一样只有两种 int默认就是unsigned int 2 三者都占1个字节 3 signed
  • 【Python】代码实现LL(1),LR(1)上下文无关文法(Stack()类)

    任务要求 针对书上第三章中的表达式文法 采用LL 1 LR 1 进行分析 相关文法 需要进行消除左递归等操作 顺手分享一下课本资源好了 可能不是最新版 排版略有点别扭 后文的书上内容就是指这本书 编译原理 陈意云 文字版 提取码 e0ag
  • Flex程序编译

    Makefile三要素 目标 依赖 命令 详解可见makefile 编写 周北 CSDN博客 makefile 编写 Makefile中常用函数和自动化变量 wildcard 扩展通配符 例 OBJECTS wildcard o 该找到目标
  • LL(1)文法的预测分析表以及对某输入串的分析过程

    举例说明LL 1 文法的预测分析 以及对 a a 的分析过程 文法G S S gt a S gt S gt T T gt SN N gt SN N gt 是否 gt First集 Follow集 S 否 a T 否 a N 是 Select
  • Compiler- 自增运算

    我们来看一下C语言中的前自增 i 和后自增 i 这个经典案例 大家在学习C的时候肯定学过前自增是先自增 然后将结果用于计算 后自增是先参与计算 再增加 好 看一下这段代码的结果 include

随机推荐

  • 干式真空泵原理_如何安装干式墙锚在墙壁上悬挂重物

    干式真空泵原理 If you ever plan to mount something to the wall that s even remotely heavy you ll need to use drywall anchors if
  • 干货分享——产品经理必备的技能:专业技能和软技能。

    TOP1 沟通 作为一种软技能 沟通不是多种语言或激动人心的演讲 善于沟通的人能够根据听众的不同 调整自己的语气和风格 理解并有效地执行指示 向同事和客户解释复杂的问题 沟通也是领导力的一个重要方面 因为领导者必须能够清晰而全面地授权 TO
  • RISC-V学习笔记【系统设计】

    蜂鸟E200系列处理器简介 特色 开源 免费 高能效比 针对IoT领域设计 支持RV32I E A M C F D等指令子集和机器模式 2级流水线 功耗和性能均优于主流商用的ARM Cortex M处理器 提供完整的配套SoC 包括中断控制
  • C++使用curl实现https、http通信

    curl实现https http通信 curl实现https http通信 代码实现 依赖库和实现类文件 添加Body curl实现https http通信 代码实现 post http int CHttpClient Post const
  • GIt 上传

    自从使用github以来 一直都是在github网站在线上传文件到仓库中 但是有时因为网络或者电脑的原因上传失败 最重要的原因是我习惯本地编辑 完成以后再一起上传github 看过了几个教程 总结出最适合自己的比较简单的方法 两种方法上传本
  • 微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务

    原文地址 http skaka me blog 2016 04 21 springcloud1 不同于单一架构应用 Monolith 分布式环境下 进行事务操作将变得困难 因为分布式环境通常会有多个数据源 只用本地数据库事务难以保证多个数据
  • 14:00面试,14:06就出来了,问的问题有点变态。。。

    从小厂出来 没想到在另一家公司又寄了 到这家公司开始上班 加班是每天必不可少的 看在钱给的比较多的份上 就不太计较了 没想到5月一纸通知 所有人不准加班 加班费不仅没有了 薪资还要降40 这下搞的饭都吃不起了 还在有个朋友内推我去了一家互联
  • eclipse环境问题-java版本不兼容

    https www cnblogs com hellowhy p 9651559 html
  • 离线地图显示连接服务器未打开,如何在uwp中使用OSM离线地图?没有可用的互联网连接时出现问题...

    在脱机映射运行良好的情况下 OSM的所有位图都来自同一台计算机上的localhost服务器 一切正常 可以看到我的所有地图 但是 如果wifi未连接到互联网 则该地图将完全停止工作 并显示黑屏 wifi关闭时 我已经测试了服务器 并且似乎在
  • 编程离软件工程有多远?

    原文地址 http kb cnblogs com page 160717 作者 周爱民 来源 VeDa原型 发布时间 2012 10 19 11 31 阅读 5135 次 原文链接 全屏阅读 收藏 语言只是工具 我曾经是非常执著的开发人员
  • vue-element-ui 中使用 el-form 报错 “TypeError: this.$refs[formName] is undefined“

    情况说明 使用了 element ui 里面
  • 【Java】 关于解决 错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException 的方法

    哭了 泪目 出现 java lang ClassNotFoundException 的原因 当Java的版本高于10的时候不需要配置CLASSPATH 环境变量 只需要配置JAVA HOME和PATH即可
  • Springboot集成logback

    一 logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件 官方网站 http logback qos ch 它当前分为下面下个模块 logback core 其它两个模块的基础模块 logback classic
  • 朱自清《春》加薪版

    为什么80 的码农都做不了架构师 gt gt gt 盼望着 盼望着 文件来了 加薪的脚步近了 一切都像刚睡醒的样子 欣欣然张开了眼 物价涨起来了 房价涨起来了 职工的工资也要涨了 大家都高兴的欢呼起来了 标准悄悄地从官员口里漏出来 嫩嫩 的
  • 虚拟化技术及实时虚拟化概述

    版权声明 本文为本文为博主原创文章 未经本人同意 禁止转载 如有问题 欢迎指正 博客地址 https www cnblogs com wsg1100 文章目录 一 前言 二 分时系统 三 虚拟化介绍 四 虚拟化实现方式及分类 模拟器 Typ
  • linux下载安装jdk

    1 从官网下载jdk 如下是jdk下载地址 直接点击即可 Java Downloads Oracle 下载自己需要的jdk即可 建议下载jdk8 2 将jdk传入linux服务器 2 1 首先在linux中创建文件夹并且进入 mkdir o
  • jdbc autoReconnect=true 参数设置导致 slow log 爆表。

    1 过程 同事按照文档上配置了下面的jdbc url jdbc mysql ip port db autoReconnect true useUnicode true characterEncoding utf 8 结果导致了 mysql
  • Ansible介绍

    1 安装ansible 1 下载并安装ansible 所有节点安装依赖 yum install python y 添加源 yum y install epel release 查看可安装的版本 yum list grep ansible 下
  • 3.3 Makefile的嵌套包含

    一 Makefile包含子Makefile的示例 下面是一个示例Makefile和sub mk的内容 为了让主Makefile调用子Makefile 并分别输出一句打印 首先 主Makefile的内容如下 PHONY all all MAK
  • 4.2.5 预测分析法与预测分析表的构造

    4 2 5 预测分析法与预测分析表的构造 预测分析法也称为 LL 1 分析法 这种分析法是确定的自上而下分析的另一种方法 采用这种方法进行语法分析要求描述语言的文法是 LL 1 文法 一个预测分析器由一张预测分析表 也称为 LL 1 分析表