第4章 自顶向下语法分析方法 n4.1确定的自顶向下语法分析思想 n 4.2LL(①)文法的判别 n4.4不确定的自顶向下分析思想 n4.3某些非LL(1)文法到LL(1)文法的等价变换 u回溯一提取公共左因子 u无限循环一消除左递归 n4.5确定的自顶向下分析方法 u4.5.1递归子程序法 u4.5.2表驱动LL(1)分析程序或预测分析方法 n 本章练习 n 作业 课程目录
1 第4章自顶向下语法分析方法 n 4.1 确定的自顶向下语法分析思想 n 4.2 LL(1)文法的判别 n 4.4 不确定的自顶向下分析思想 n 4.3 某些非LL(1)文法到LL(1)文法的等价变换 u 回溯——提取公共左因子 u 无限循环——消除左递归 n 4.5 确定的自顶向下分析方法 u 4.5.1 递归子程序法 u 4.5.2 表驱动LL(1)分析程序或预测分析方法 n 本章练习 n 作业 课程目录
内容回顾 n句型、句子和语言的定义: n句型 u有文法G[S],若S=>a,且a∈V*,则称 是a是文法G的一个句型。 n句子 u有文法G[S],若S=>a,且a∈V*,则称 是a是文法G的一个句子。 n语言 u由文法G产生的所有句子的集合 L(G)={aS==+>a,且a∈Vr*
2 内容回顾 n 句型、句子和语言的定义: n 句型 u有文法G[S],若S ==*>α,且α∈V* , 则称 是α是文法G的一个句型。 n 句子 u有文法G[S],若S ==*>α,且α∈VT * ,则称 是α是文法G的一个句子。 n 语言 u由文法 G 产生的所有句子的集合 L(G)={α|S==+>α,且α∈VT *}
n最左(最右)推导 内容回顾(续) u在推导的任何一步都对当前句型中的最左(最右)非 终结符进行替换。 n句型分析(句子分析) u识别一个符号串是否为某文法的句型(句子)的过程。 U也就是某文法的某个推导的构造过程。 n设文法G为: E E→E+T|T T→T*F|F F→(E)|i 自项向下 自底向上 n请问符号串+ii是 否为该文法的句子? ☒
3 内容回顾(续) n 最左(最右)推导 u在推导的任何一步都对当前句型中的最左(最右)非 终结符进行替换。 n 句型分析(句子分析) u识别一个符号串是否为某文法的句型(句子)的过程。 u也就是某文法的某个推导的构造过程。 n 设文法G为: E →E+T|T T →T*F|F F →(E)|i n 请问符号串i+i*i是 否为该文法的句子? E E + T T * F F F T i i i 自 顶 向 下 自 底 向 上
常用语法分析方法 n语法分析算法可分为两大类: n自顶向下分析法 u从文法的开始符号出发,反复使用各种产生式向 下推导,寻找与输入符号串匹配的推导。 n自底向上分析法 u从输入串开始,逐步进行归约,直至归约到文法 的开始符号。 门两种方法反映了两种不同的语法树的构造过程 u自顶向下一一从树根推导到树叶。 u自底向上一一从树叶归约到树根
4 常用语法分析方法 n 语法分析算法可分为两大类: n 自顶向下分析法 u从文法的开始符号出发,反复使用各种产生式向 下推导,寻找与输入符号串匹配的推导。 n 自底向上分析法 u从输入串开始,逐步进行归约,直至归约到文法 的开始符号。 n 两种方法反映了两种不同的语法树的构造过程 u自顶向下——从树根推导到树叶。 u自底向上——从树叶归约到树根
4.1确定的自顶向下分析思想p68 n基本方法 U对任何输入串,试图从开始符号出发,自上而下地为输入串建立 一棵语法树,或者说为输入串寻找一个最左推导。 n若有文法G1[S]: n若有文法G2[S]: n 若有文法G3[S]: uS→pAqB uS→ApBq uS→aAd uA→cAda uA→cAa uA→bAS|e uB→dBb uB→dBlb n 判断输入串W=abd? n判断输入串W=pccadd? n判断输入串W=ccap? u请分析,引入FIRST(a)FOLL0W(A)SELECT(A→a)3个终结符集合 同
5 4.1 确定的自顶向下分析思想p68 n 若有文法G1[S]: u S→pA|qB u A→cAd|a u B→dB|b n 判断输入串W=pccadd? n 若有文法G2[S]: u S→Ap|Bq u A→cA|a u B→dB|b n 判断输入串W=ccap? n 基本方法 u 对任何输入串,试图从开始符号出发,自上而下地为输入串建立 一棵语法树,或者说为输入串寻找一个最左推导。 n 若有文法G3[S]: u S→aA|d u A→bAS|ε n 判断输入串W=abd? u 请分析, 引入 FIRST(α) FOLLOW(A) SELECT(A→α) 3个终结符集合