语法分析基本概念
语法分析的前提:对语言的语法结构进行描述,采用正规式和有限自动机描述和识别语言的单词符号, 用上下文无关文法来描述语法规则
语法分析的任务:分析一个文法的句子的结构
语法分析器的功能 :按照文法的产生式(语言的语法规则),识别输入符号串是否为一个句子(合式程序)
自下而上(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