语法分析 自顶向下分析

一、确定的自顶向下分析思想 :

  确定的自顶向下分析方法,首先要解决从某文法的开始符号出发,对给定的输入符号串如何根据当前的输入符号(单词符号)唯一地确定选用哪个产生式替换相应非终结符往下推导,或构造一棵相应的语法树,若能够推导出给定的输入符号串,或能构造出语法树其末端结点以从左向右的顺序连接正好为给定的输入符号串,则所给的输入符号串为该文法的句子。

二、可选集的定义

设G=(VT,VN,S,P)是上下文无关文法, 其中A a 是文法G的一个产生式,编号为i,则可选集:
(1)Select(i)=FIRST(α),当α!=>* ε (a不能推导出空字符)
(2)Select(i)= FIRST(α)∪FOLLOW(A),当α=>* ε

三、LL(1)文法定义

(第一个L从左向右扫描字符串 第二个L生成最左推导)

设G=(VT,VN,S,P)是上下文无关文法,该文法G是LL(1)文法,当且仅当对于G的每一个非终结符A的任何两个不同产生式Aα,Aβ,在产生式中的编号分别为I和J,当且仅当下面的条件成立:Select(i)∩Select (j)= Ø, 当α, β不能同时=>* ε,能够实现确定的自顶向下语法分析。

1、计算FIRST集

(1)若X∈VT,则FIRST(X)={X}。(本身为终结符)

(2)若X∈VN,且有产生式X-> a…,则把a加入到FIRST(X)中。(推出终结符)

(3)若X->ε也是一条产生式,则把ε也加到FIRST(X)中。(推导出空串)

(4)若X->Y…是一个产生式且Y∈VN,则把FIRST(Y)中的所有非ε元素都加到FIRST(X)中;(推导出非终结符)

若X->Y1Y2…YK 是一个产生式,Y1,Y2,…,Y(i-1)都是非终结符,而且,对于任何j,1≤j ≤i-1,FIRST(Yj)都含有ε。
即Y1..Y(i-1) =>* ε,则把FIRST(Yj)中的所有非ε元素都加到FIRST(X)中;

特别是,若所有的FIRST(Yj , j=1,2,…,K)均含有ε,则把ε加到FRIST(X)中。

如果开始符号能推导出ε,则还需要考虑FOLLOW集

2、计算FOLLOW集

(1)对于文法的开始符号S,置#于FOLLOW(S) 中;(开始符号)

(2)若A=>*αB β是一个产生式,则把FIRST(β)-{ ε}加至FOLLOW(B)中;(后缀跟一个不能推导出空字符,加FIRST-{ ε})

(3)若A=>*αB是一个产生式,或A=>*αBβ是一个产生式而β=>* ε(即ε∈FIRST(β)),则把FOLLOW(A)加至FOLLOW(B)中.

(后缀为空,或者后缀可以推导出空字符,加FOLLOW(A))

3、计算SELECT集

根据可选集的定义,其中A α 是文法G的一个产生式,编号为i,则可选集:
①Select(i)=FIRST(α),当α!=>* ε 
②Select(i)= FIRST(α)∪FOLLOW(A),当α=>* ε

四、递归子程序

1、编写文法,消除二义性,

2、改写文法(消除左递归和提取做引子)

3、求非终结符的FIRST集合FOLLOW集

4、检查是不是LL(1)文法

若不是LL(1)文法,则说明文法的复杂性超过自顶向下的分析能力

5、按照LL(1)文法画语法图

6、化简语法图

7、按照语法图,编写程序算法

五、预测分析程序模型

1、预测分析表的构造算法

1) 对于每一产生式 A→α,作 2)和3)

2) 对于 FIRST(α)中的每一终结符a, 将 A→α 填入 M[A,a]

3) 如果ε属于 FIRST(α),则将 A→α填入 FOLLOW(A)中任一元素 b 的 M[A,b];

4) 将所有无定义的 M[A,b] 标上错误标志。

2、预测分析法(状态矩阵法)

1) 编写文法,消除二义性;
2) 消除左递归、提取左因子;
3) 求 FIRST 集和 FOLLOW 集

4)检查是不是 LL(1) 文法
若不是 LL(1),说明文法的复杂性超过自顶向下方法的分析能力 
5) 按照 LL(1) 文法构造预测分析表
6) 实现预测分析器

语法分析 自顶向下分析相关推荐

  1. 编译原理复习(4)语法分析--自上而下分析

    语法分析--自上而下分析 语法分析器的功能 语法分析方法分类 自上而下分析法 自下而上分析法 LL(1)分析法 左递归的消除 消除回溯,提取公共左因子 求法,例FIRST(X): FOLLOW集构造方 ...

  2. 自顶向下分析消除左递归的方法

    左递归产生的原因是产生式的左右有相同的非终结符,具体来说就是形如 A→Aα | β 这时自顶向下分析将成为死循环,消除左递归的方法是引入符号A'和ε A→βA' A'→αA' | ε 以上是直接左递归 ...

  3. 编译原理 自顶向下分析

    从顶部的根节点到底部的叶节点分析方法叫做自顶向下分析.我们知道顶部的根节点可以表示成一个文法的开始符号S,所以说,自顶向下分析可以看成是从文法的开始符号S推导出词串w的过程. 例如,我们以输入id + ...

  4. 语法分析-自上而下分析 知识总结

    语法分析-自上而下分析 基本思想 回溯与左递归 LL(1)文法 构建不带回溯的自上而下分析算法 消除文法的左递归性 克服回溯 1. FRIST集 2. 提取公共左因子 3. FOLLOW集 4. 构造 ...

  5. 笔记-编译原理-第十、十一、十二章、十三章-语法分析-自下而上分析

    第10章 - 自下而上分析1 10.1 自下而上分析 10.1.1 自下而上分析的一个示例 可以看出自下而上分析的主要步骤是不断的用文法来"规约",最后找到一种句型的表示 10.1 ...

  6. 语法分析—自上而下分析

    1.美图 2.位置 语法分析器的功能 语法分析的任务是分析一个文法的句子结构. 语法分析器的功能:按照文法的产生式(语言的语法规则),识别输入符号串是否为一个句子(合式程序). 语法分析的方法 不行 ...

  7. 语法分析--自上而下分析的基本问题

    语法分析基本概念 语法分析的前提:对语言的语法结构进行描述,采用正规式和有限自动机描述和识别语言的单词符号, 用上下文无关文法来描述语法规则 语法分析的任务:分析一个文法的句子的结构 语法分析器的功能 ...

  8. 第五章 语法分析——自上而下分析

    一.知识总结 本章介绍自下而上语法分析方法.所谓自下而上分析法就是从输入串开始,逐步进行"归约",直至鬼月到文法的开始符号.或者说,从语法树的末端开始,步步向上"归约&q ...

  9. 编译原理 - 语法分析(自下而上分析)

    自下而上语法分析 两种语法分析对比 自下而上语法分析(Bottom-up) 核心思想 - (移进-规约) 移进 : 移进到栈里,当形成产生式时就弹出(规约) 规约 : 右部符号替换为左部符 移进-规约 ...

最新文章

  1. 【Sql Server】DateBase-连接查询
  2. POJ1190 生日蛋糕
  3. 企业传播可以考虑放弃公众号了
  4. java 线程 状态 图_Java线程中的生命周期和状态控制图文详解
  5. SwiftUI之如何使用@EnvironmentObject在视图之间共享数据
  6. Hadoop的TextInputFormat的作用,如何自定义实现的
  7. 怎么样判断页面是否在iframe框架里
  8. bzoj 1260: [CQOI2007]涂色paint(区间DP)
  9. 把txt作为数据源绑定到GridView中
  10. 算法知识点——(1)特征工程
  11. css总常用的font-family
  12. 数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)
  13. efucms搭建教程_EFUCMS E16小说漫画系统源码 最新完美UI设计漫画/听书直播源码程序...
  14. 计算机说课教案模板,初中信息技术说课稿通用模板大全
  15. b-spline学习-系数计算及程序实践
  16. Android如何应对不同分辨率手机匹配问题
  17. 人人商城之导出excel表
  18. Linux - 一次性计划任务之at命令使用
  19. 撰写合格的REST API
  20. 基于Java的电影售票网站

热门文章

  1. 2022年道路运输企业主要负责人特种作业证考试题库及在线模拟考试
  2. v7.widget.SearchView的使用
  3. Swift SnapKit 自动布局
  4. 系统垃圾清理利器CCleaner v5.30.6063绿色单文件版(增强版)
  5. matlab 背包问题动态规划,从01背包问题理解动态规划---初体验
  6. 美拍直播首屏耗时减少50%以上的优化实践
  7. Spring入门之Spring核心与概述
  8. 为何一个主机ip可以ping通,nmap扫描结果却说主机不在线
  9. 一周刷爆LeetCode,算法大神左神(左程云)
  10. echarts饼状显示数据性别百分比