首页 > 其他 > 详细

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

时间:2020-03-06 23:16:51      阅读:97      评论:0      收藏:0      [点我收藏+]

语法分析基本概念

技术分享图片

语法分析的前提:对语言的语法结构进行描述,采用正规式和有限自动机描述和识别语言的单词符号, 用上下文无关文法来描述语法规则

技术分享图片

技术分享图片

技术分享图片

语法分析的任务:分析一个文法的句子的结构

语法分析器的功能 :按照文法的产生式(语言的语法规则),识别输入符号串是否为一个句子(合式程序)
技术分享图片

自下而上(Bottom-up):从输入串开始,逐步进行归约,直到文法的开始符号,归约:根据文法的产生式规则,把串中出现的产生式的右部替换成左部符号,从树叶节点开始,构造语法树,算符优先分析法、LR分析法

自上而下(Top-down):从文法的开始符号出发,反复使用各种产生式,寻找"匹配"的推导,推导:根据文法的产生式规则,把串中出现的产生式的左部符号替换成右部,从树的根开始,构造语法树,递归下降分析法、预测分析程序

自上而下分析面临的问题

基本思想:从文法的开始符号出发,向下推导,推出句子,针对输入串,试图用一切可能的办法,从文法开始符号(根结点)出发,自上而下地为输入串建立一棵语法树

技术分享图片

技术分享图片

技术分享图片

多个产生式候选带来的问题,

回溯问题:分析过程中,当一个非终结符用某一个候选匹配成功时,这种匹配可能是暂时的,出错时,不得不“回溯”

技术分享图片

技术分享图片

技术分享图片
技术分享图片

技术分享图片

文法左递归问题: 一个文法是含有左递归的,如果存在非终结符P
技术分享图片

  • 面临的问题
    • 文法左递归问题
    • 回溯问题
  • 构造不带回溯的自上而下分析算法
    • 消除文法的左递归性
    • 消除回溯

消除文法的左递归

直接左递归的消除

技术分享图片

技术分享图片

间接左递归的消除

技术分享图片

技术分享图片

技术分享图片

消除左递归的算法

技术分享图片

由于对非终结符排序的不同,最后所得的文法在形式上可能不一样。但不难证明,它们都是等价的

消除回溯

为了消除回溯必须保证:对文法的任何非终结符,当要它去匹配输入串时,能够根据它所面临的输入符号准确地指派它的一个候选去执行任务,并且此候选的工作结果应是确信无疑的

FIRST和FOLLOW集合的构造

技术分享图片

FIRST集合

令G是一个不含左递归的文法,对G的所有非终结符的每个候选α定义它的终结首符集FIRST(α)为:
技术分享图片

技术分享图片

提取公共左因子
技术分享图片

FOLLOW集合

技术分享图片

技术分享图片

L: 从左到右扫描输入串 L: 最左推导 1:每一步只需向前查看一个符号

技术分享图片

FIRST和FOLLOW集合的构造

技术分享图片

技术分享图片

构造每个文法符号的FIRST集合

技术分享图片
技术分享图片

构造FOLLOW(A)

技术分享图片

构造每个非终结符的FOLLOW集合

技术分享图片

对最后的FIRST、FOLLOW集合有点迷,真的有点迷,晚上不该看这个的!!o(╥﹏╥)o

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

原文:https://www.cnblogs.com/ygjzs/p/12431253.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!