第4章语法分析——自上而下分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
出这个输入串匹配的句子。这就需要建立与输入串匹配 的语法分析树。
语法分析器的输出
分析树:如何表示? P89 错误处理信息:定位、继续编译
第4章语法分析——自上而下分析
• 常用的语法分析方法:
根据建立语法分析树的方法不同,语法分析方法有两类:
• 自上而下分析法:
从文法的开始符号出发,向下推导(使用最左推 导) ,尽可能使用各种产生式,推导出与输入串 匹配的句子。
First(α) = {a| α *a…,a∈VT} 若α *ε ,则ε∈ First(α)
• 因此,不产生回溯的条件就是: 对非终结符A的任意两个不同的侯选式ai 和aj , 都有: First(ai)∩ First(aj) = φ
• 当要求用A进行匹配时,就能根据所面临的输入 字符,准确地选取一个A的侯选式。
第4章 语法分析 ——自上而下分析
第4章语法分析——自上而下分析
第4章 语法分析 ——自下而上分析
4.1 语法分析器的功能 4.2 自上而下分析面临的问题 4.3 LL(1)分析法 4.4 递归下降分析程序构造 4.5 预测分析程序
第4章语法分析——自上而下分析
语法分析器的位置
词分器法析取下单ktnoe一词符个语分表器号法析
问题1:回溯
S
x
A
y
•例1:设有文法 (1) S -> xAy (2) A -> **|*
现有输入串:x*y 其分析过程如下:
产生的原因?
*
*
输入符号串: x*y
失败,需要退回,重新选取A的侯选式 这时使得分析器的动作不稳定
第4章语法分析——自上而下分析
问题2:左递归
左递归:是左递归的,如果一个文法中存在某个非终结符号A,
第4章语法分析——自上而下分析
消除回溯的方法
反复使用“提取公共左因子”的方法来改造文法,使得文法 的每个非终结符号的各个候选式的首终结符两两不相交,来 避免回溯。
例:
设产生式为:
A→δα1|δα2|…|δαn 将其替换为:
AδA’
|…|α A’α1|α2
第4章语法分析——自上而下分析
n
例3:有如下两个产生式:
语法 树
编译 程序 的后 续部
分
第4章语法分析——自上而下分析
语法分析器
语法分析器的输入
Token序列:词法分析产生的输出,是各个单词都正确的 源程序,是一个有限序列
语法分析器的功能
按照语言的语法构成规则, 识别输入的符号串能否构成一 个句子。规则是用文法的产生式来定义的。
对给定一个输入串,如何判定它是不是一个句子? 根据文法的产生式规则,从开始符号出发,看能否推导
使A A。
如果是A A,则称为直接左递归,否则称为间接左递归。
例2:设有文法: (1) E->E+T|T
E E +T
(2) T->T*F|F
E +T
(3) F->(E)|i 现有输入串i*i+i, 其分析过程是:
E
+
T
…
产生的原因?
失败:由于使用最左推导,对左递归文法进 行自顶向下分析时,会导致死循环。
第三步:+∈first(E’)
不读输入符号 第4章语法分析——自上而下分析
……
并不是在任何情况下,A面对输入符号a, a不属于A的任何侯选 式,但A中含ε产生式时都可以使用ε自动匹配。
定义(后随符号集):假定S是文法的开始符号,对于 A∈VN:
从推导的角度看,从开始符号出发,使用最左推导,试图 推导出与输入符号串相同的句子。
从语法树的角度看,从根节点出发,反复使用所有可能的 产生式,谋求输入串的匹配,试图向下构造一棵语法树, 其末端结点正好与输入符号串相同。
这是一个反复试探的过程。
第4章语法分析——自上而下分析
自顶向下分析面临的问题
第4章语法分析——自上而Leabharlann Baidu分析
结论
左递归和回溯问题的产生直接与描述语言 的文法有关
因此,要对文法进行确定的自顶向下分析 应该改造文法,使其不含左递归和回溯
第4章语法分析——自上而下分析
左递归的消除
1. 直接左递归的消除:
假定产生式为:P→Pα|β,将其替换为形式等价 的产生式组:
P→βP’ P’ →αP’ |ε
• 2. 间接左递归的消除 (1) 代入 (2) 消除直接左递归
第4章语法分析——自上而下分析
回溯
回溯产生的真正原因是:某非终结符对 应多个侯选式,它们右部的第一个终结 符相同,从而导致语法分析器选择了错 误的侯选式。
如果希望没有回溯,对文法有什么要求?
第4章语法分析——自上而下分析
定义:对G的所有非终结符的每个侯选式α定义首 终结符集:
例:使用下述文法对 i + i 进行分析:
E TE’ E’ +TE’| ε T FT’ T’ *FT’| ε F (E)|i
第一步:i∈first(TE’) i∈first(FT’) i∈first(F)
E
T
E’
F T’ + T E’
iε
F T’ ε
iε
第二步:+∈first(T’) 用ε自动匹配
• 自下而上分析法:
从输入符号串开始,逐步进行归约(最右推导的 逆过程),直至归约到文法的开始符号。
自顶向下分析 自底向上分析
递归下降分析 预测分析(LL) 算符优先分析 LR分析( LR(0)、SLR(1)、LR(1)、LALR)
第4章语法分析——自上而下分析
自顶向下分析
自上而下分析的主旨是:对任何输入串,试图用一切可能 的办法,从文法的开始符号出发,自上而下地为输入串建 立一个语法树。
<IF语句> if E then S1 else S2; <IF语句> if E then S1;
提取左因子后:
<IF语句> if E then S1 B; B else S2 |ε ;
第4章语法分析——自上而下分析
LL(1)分析条件:
是否满足:没有左递归,每个侯选式的首终结符集不相交这两个条 件,就一定能进行有效的自顶向下分析呢?
例2:文法
E -> E+T|T
E -> TE’
T->T*F|F
E’->+TE’| ε
F->(E)|i 消去左递归后为:
T->FT’ T’->*FT’| ε 第4章语法分析——自上而下分析 F->(E)|i
一般而言,产生式为: A→Aα1|Aα2|…|Aαn|β1|β2|…|βm 将其替换为:
Aβ1 B|β2 B |…|βm B Bα1 B|α2 B |…|αn B|ε
语法分析器的输出
分析树:如何表示? P89 错误处理信息:定位、继续编译
第4章语法分析——自上而下分析
• 常用的语法分析方法:
根据建立语法分析树的方法不同,语法分析方法有两类:
• 自上而下分析法:
从文法的开始符号出发,向下推导(使用最左推 导) ,尽可能使用各种产生式,推导出与输入串 匹配的句子。
First(α) = {a| α *a…,a∈VT} 若α *ε ,则ε∈ First(α)
• 因此,不产生回溯的条件就是: 对非终结符A的任意两个不同的侯选式ai 和aj , 都有: First(ai)∩ First(aj) = φ
• 当要求用A进行匹配时,就能根据所面临的输入 字符,准确地选取一个A的侯选式。
第4章 语法分析 ——自上而下分析
第4章语法分析——自上而下分析
第4章 语法分析 ——自下而上分析
4.1 语法分析器的功能 4.2 自上而下分析面临的问题 4.3 LL(1)分析法 4.4 递归下降分析程序构造 4.5 预测分析程序
第4章语法分析——自上而下分析
语法分析器的位置
词分器法析取下单ktnoe一词符个语分表器号法析
问题1:回溯
S
x
A
y
•例1:设有文法 (1) S -> xAy (2) A -> **|*
现有输入串:x*y 其分析过程如下:
产生的原因?
*
*
输入符号串: x*y
失败,需要退回,重新选取A的侯选式 这时使得分析器的动作不稳定
第4章语法分析——自上而下分析
问题2:左递归
左递归:是左递归的,如果一个文法中存在某个非终结符号A,
第4章语法分析——自上而下分析
消除回溯的方法
反复使用“提取公共左因子”的方法来改造文法,使得文法 的每个非终结符号的各个候选式的首终结符两两不相交,来 避免回溯。
例:
设产生式为:
A→δα1|δα2|…|δαn 将其替换为:
AδA’
|…|α A’α1|α2
第4章语法分析——自上而下分析
n
例3:有如下两个产生式:
语法 树
编译 程序 的后 续部
分
第4章语法分析——自上而下分析
语法分析器
语法分析器的输入
Token序列:词法分析产生的输出,是各个单词都正确的 源程序,是一个有限序列
语法分析器的功能
按照语言的语法构成规则, 识别输入的符号串能否构成一 个句子。规则是用文法的产生式来定义的。
对给定一个输入串,如何判定它是不是一个句子? 根据文法的产生式规则,从开始符号出发,看能否推导
使A A。
如果是A A,则称为直接左递归,否则称为间接左递归。
例2:设有文法: (1) E->E+T|T
E E +T
(2) T->T*F|F
E +T
(3) F->(E)|i 现有输入串i*i+i, 其分析过程是:
E
+
T
…
产生的原因?
失败:由于使用最左推导,对左递归文法进 行自顶向下分析时,会导致死循环。
第三步:+∈first(E’)
不读输入符号 第4章语法分析——自上而下分析
……
并不是在任何情况下,A面对输入符号a, a不属于A的任何侯选 式,但A中含ε产生式时都可以使用ε自动匹配。
定义(后随符号集):假定S是文法的开始符号,对于 A∈VN:
从推导的角度看,从开始符号出发,使用最左推导,试图 推导出与输入符号串相同的句子。
从语法树的角度看,从根节点出发,反复使用所有可能的 产生式,谋求输入串的匹配,试图向下构造一棵语法树, 其末端结点正好与输入符号串相同。
这是一个反复试探的过程。
第4章语法分析——自上而下分析
自顶向下分析面临的问题
第4章语法分析——自上而Leabharlann Baidu分析
结论
左递归和回溯问题的产生直接与描述语言 的文法有关
因此,要对文法进行确定的自顶向下分析 应该改造文法,使其不含左递归和回溯
第4章语法分析——自上而下分析
左递归的消除
1. 直接左递归的消除:
假定产生式为:P→Pα|β,将其替换为形式等价 的产生式组:
P→βP’ P’ →αP’ |ε
• 2. 间接左递归的消除 (1) 代入 (2) 消除直接左递归
第4章语法分析——自上而下分析
回溯
回溯产生的真正原因是:某非终结符对 应多个侯选式,它们右部的第一个终结 符相同,从而导致语法分析器选择了错 误的侯选式。
如果希望没有回溯,对文法有什么要求?
第4章语法分析——自上而下分析
定义:对G的所有非终结符的每个侯选式α定义首 终结符集:
例:使用下述文法对 i + i 进行分析:
E TE’ E’ +TE’| ε T FT’ T’ *FT’| ε F (E)|i
第一步:i∈first(TE’) i∈first(FT’) i∈first(F)
E
T
E’
F T’ + T E’
iε
F T’ ε
iε
第二步:+∈first(T’) 用ε自动匹配
• 自下而上分析法:
从输入符号串开始,逐步进行归约(最右推导的 逆过程),直至归约到文法的开始符号。
自顶向下分析 自底向上分析
递归下降分析 预测分析(LL) 算符优先分析 LR分析( LR(0)、SLR(1)、LR(1)、LALR)
第4章语法分析——自上而下分析
自顶向下分析
自上而下分析的主旨是:对任何输入串,试图用一切可能 的办法,从文法的开始符号出发,自上而下地为输入串建 立一个语法树。
<IF语句> if E then S1 else S2; <IF语句> if E then S1;
提取左因子后:
<IF语句> if E then S1 B; B else S2 |ε ;
第4章语法分析——自上而下分析
LL(1)分析条件:
是否满足:没有左递归,每个侯选式的首终结符集不相交这两个条 件,就一定能进行有效的自顶向下分析呢?
例2:文法
E -> E+T|T
E -> TE’
T->T*F|F
E’->+TE’| ε
F->(E)|i 消去左递归后为:
T->FT’ T’->*FT’| ε 第4章语法分析——自上而下分析 F->(E)|i
一般而言,产生式为: A→Aα1|Aα2|…|Aαn|β1|β2|…|βm 将其替换为:
Aβ1 B|β2 B |…|βm B Bα1 B|α2 B |…|αn B|ε