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 )文法。

4.2.5 预测分析法与预测分析表的构造相关推荐

  1. 【编译原理笔记05】语法分析:FIRST集和FOLLOW集的计算,[非]递归的预测分析法,预测分析中的错误处理

    本次笔记内容: 4-4 FIRST集和FOLLOW集 4-5 递归的预测分析法 4-6 非递归的预测分析法 4-7 预测分析法中的错误处理 本节课幻灯片,见于我的 GitHub 仓库:第5讲 语法分析 ...

  2. 编译原理 实验四 LR(0)分析法(LR0分析表的自动生成)

    写在前面 由于代码较长,csdn对文章总长度有字数限制,想只看完整代码的请移步另一篇博客. https://blog.csdn.net/qq_46640863/article/details/1257 ...

  3. 编译原理 | 语法分析(LL(1)分析法/算符优先分析法OPG)学习笔记及例子详解

    语法分析(自顶向下 / 自底向上) 自顶向下 递归下降分析法 这种带回溯的自顶向下的分析方法实际上是一种穷举的不断试探的过程,分析效率极低,在实际的编译程序中极少使用. LL(1)分析法 又称预测分析 ...

  4. 编译原理学习笔记·语法分析(LL(1)分析法/算符优先分析法OPG)及例子详解

    语法分析(自顶向下/自底向上) 自顶向下 递归下降分析法 这种带回溯的自顶向下的分析方法实际上是一种穷举的不断试探的过程,分析效率极低,在实际的编译程序中极少使用. LL(1)分析法 又称预测分析法, ...

  5. 杜邦分析法、漏斗分析法和矩阵关联分析法

    数据分析工作涉及到很多的分析方法,比如说杜邦分析法.漏斗分析法以及矩阵关联分析法,这些方法都是能够帮助我们更好地进行数据分析工作.在这篇文章中我们就给大家介绍一下关于杜邦分析法.漏斗分析法和矩阵关联分 ...

  6. 方根法公式_仓储管理笔记之库存分析法:ABC分析法、区域合并法......

    导读 国内有庞大的仓储物流从业人员队伍(根据中国物流与采购联合会的调查,2016年底我国物流从业人员5012万,是人员增速最快的行业),很多人只是想深入了解仓库从无序到有序,从源头开始应该如何管理.如 ...

  7. 层次分析法java_层次分析法java实现

    做毕设时因为恐惧层次分析法的计算量,所以通过程序实现了. 层次分析法计算过程的程序化实现代码 package e_5_28; /* * author 曾绍涛 * time 2009-5-29 * fu ...

  8. 月薪5w的大佬都爱用的SWOT分析法,本文分析透了!

    理解SWOT真的很简单. 进行SWOT分析也没说的那么复杂,你只要记住"两条线画成四象限",即自身优势S/劣势W+外部机会O/威胁T,如图: ​ 看到了吗? 如果外部的机会正好是你 ...

  9. 自下而上的分析法——算符优先分析法

    概述 算符优先分析法(Operator Precedence Parse)是仿效四则运算的计算过程而构造的一种语法分析方法.算符优先分析法的关键是比较两个相继出现的终结符的优先级而决定应采取的动作. ...

最新文章

  1. Odoo小数精度及货币精度详解
  2. 一句话评论设计模式六大原则--转
  3. 自定义控件的时候为控件增加事件
  4. 移动支付漏洞大 没密码也能买买买
  5. php 根据键名分类求和,二维数组根据键值相加
  6. IDEA启动自动进入最后一个项目
  7. Scala 语言转义字符
  8. 设计模式(2)策略模式 (模式讲解+应用)
  9. 对pca降维后的手写体数字图片数据分类_python机器学习API介绍13: 数据降维及主成分分析...
  10. Linux学习笔记(六)
  11. JAVA中注解controller_SpringMVC之基于注解的Controller
  12. uniGUI试用笔记(四)
  13. chrome charset使用_SourceMap-使用教程
  14. mysql原理以及相关优化
  15. Linux 多线程编程 (典藏、含代码)
  16. GEE、USGS、地理空间数据云上下载武汉地区的影像数据
  17. 职场菜鸟捕食指北【相亲篇】
  18. C语言常见字符串函数、字符分类函数与内存函数的使用
  19. 【React Native】react-native-vector-icons用法避坑
  20. 怎么用Q-Q图验证数据集的分布

热门文章

  1. 根据Uniprot ID/PDB ID批处理获取蛋白质.pdb文件
  2. ffmpeg读取加密的m3u8文件时无法访问.key文件
  3. 浅析-微服务3搭建框架
  4. 电脑游戏计算机哪年发明的,电子计算机发明于哪一年
  5. 浙江大学竺可桢学院计算机专业好就业吗,浙大竺可桢学院有多厉害?看了这些数据你就知道了...
  6. asp .net 和 ASP
  7. 智能对话平台UNIT 7.0三大引擎正式亮相
  8. 【预测模型】基于RLS算法求解数据预测matlab代码
  9. (精华)2020年10月7日 高并发高可用 Redis实现异步架构
  10. ff14怎么显示服务器时间,《FF14》8月20日维护到几点 最终幻想14服务器迁移维护公告...