欢迎来到 跌倒的小黄瓜 的博客

♪(^∇^*)我要当大佬,(#^.^#)哈哈哈哈,(。-ω-)zzz我要成为优秀的人,(*^▽^*)٩(๑>◡<๑)۶O(∩_∩)O哈哈~~~~~~~~欢迎━(*`∀´*)ノ亻!

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

语法分析基本概念

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

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

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

自下而上(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

posted @ 2020-03-06 22:13  跌倒的小黄瓜  阅读(2240)  评论(0编辑  收藏  举报