4.1 引言
4.2 带回溯的自顶向下分析技术
4.3 无回溯的自顶向下分析技术
本章小结
第四章 语法分析 ----自顶向下分析技术
4.1 引言
4.1.1 自顶向下分析技术及识别算法
4.1.2 讨论的前提
4.1.3 要解决的基本问题
第四章 语法分析 ----自顶向下分析技术
4.1 引言
4.1.1 自顶向下分析技术及识别算法
从推导角度看,自顶向下识别算法是从识别符号出发,
试图构造一个推导,由它推导出与输入符号串相同的符号
串。
从语法树角度看,自顶向下分析过程以识别符号为根
结点,试图向下构造一个语法树,其末端结点符号串正好
与输入符号串相同。
第四章 语法分析 ----自顶向下分析技术
4.1 引言
4.1.1 自顶向下分析技术及识别算法
4.1.2 讨论的前提
定理 2.7 对于上下文无关文法,如果存在句型
x=x1x2…xn,x1x2…xn=>y
则必存在 y1,y2,…,yn,使得 xi=>yi (i=1,2,…,n)
且 y=y1y2…yn。
第四章 语法分析 ----自顶向下分析技术
*
*
4.1 引言
4.1.1 自顶向下分析技术及识别算法
4.1.2 讨论的前提
4.1.3 要解决的基本问题
U∷ =u1| u2| … | un
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
4.2.2 问题及其解决
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
G[S],
S∷=aBC
B∷=ib | b
C∷=DE | FG| c
D∷ =d
E∷ =eh
F∷ =de
G∷ =t
输入符号串为 x=abdet
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
G[S],
S∷=aBC
B∷=ib | b
C∷=DE | FG| c
D∷ =d
E∷ =eh
F∷ =de
G∷ =t
输入符号串为 x=abdet
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
G[S],
S∷=aBC
B∷=ib | b
C∷=DE | FG| c
D∷ =d
E∷ =eh
F∷ =de
G∷ =t
输入符号串为 x=abdet
回溯,当用某个非终结符号的某个选择去进行匹配而失败时,
删去失败的分支并回头查看输入符号,以便与其他选择
相匹配,这种过程称回溯。
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
4.2.2 问题及其解决
? 效率问题
? 对语义的影响
? 语法错误的校正
? 左递归
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
4.2.2 问题及其解决
? 效率问题
? 对语义的影响
? 语法错误的校正
? 左递归
第四章 语法分析 ----自顶向下分析技术
1)回溯问题
对于任意一个规则的右部 x| y| … | z,
相对于 x,y,…, z的头终结符号集合总
是两两不相交的。
2)假匹配问题
当存在规则 B∷ =b| bi而输入符号串为 abic
时,选取关于 B的第一个选择 b将发生虚假
的匹配现象。
3)查文法的效率问题
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
4.2.2 问题及其解决
? 效率问题
? 对语义的影响
? 语法错误的校正
? 左递归
自顶向下分析技术 的致命弱点之一是不能应用于左递归文法 。
第四章 语法分析 ----自顶向下分析技术
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
4.3.3 预测分析技术
第四章 语法分析 ----自顶向下分析技术
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
1)无左递归性,既无规则左递归,也非文法左递归,即不存在这
样的非终结符号 U,对于它有 U∷=U … 或 U?U…。
2)无回溯性, 对于任一非终结符号 U的规则右部 x1| x2| … | xn,
相对于 x1,x2,…, xn的各头终结符号集合总是两两不相交的 。
第四章 语法分析 ----自顶向下分析技术
+
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
? 实现思想
? 举例
? 递归下降识别程序的简化
第四章 语法分析 ----自顶向下分析技术
递归下降分析技术是一种无回溯
的自顶向下分析技术。
实现思想:让一个识别程序由一
组子程序(过程)组成,其中每
个子程序对应于文法的一个非终
结符号;由于文法通常是递归定
义的,因此这些子程序往往是递
归子程序。
文法 G[E],E∷=E+T | T T∷=T*F|F F∷=(E) | i
消去左递归, 回溯性后的等价文法
G′ [E],E∷=TE ′ E′ ∷=+TE ′ | ε T∷=FT ′
T′∷ =*FT′| ε F ∷ =(E)| i 两个约定
E T E ′ 出口
Y
E ′ 出口
N
T 出口
Y
T ′ 出口
N
F Y N
Y
N
Y 出口
N
出口
+
取符号 T E ′
出口
F T ′
*
取符号 F T ′
(
取符号 E
)
出错
取符号
i
出错
总控
取符号 E
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
? 实现思想
? 举例
? 递归下降识别程序的简化
G[E],
E∷ =E+E| E*E| (E)| i
第四章 语法分析 ----自顶向下分析技术
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
4.3.3 预测分析技术
? 预测分析技术与预测识别程序
? 预测分析过程
? 预测分析表的生成
第四章 语法分析 ----自顶向下分析技术
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
4.3.3 预测分析技术
? 预测分析技术与预测识别程序
? 预测分析过程
? 预测分析表的生成
第四章 语法分析 ----自顶向下分析技术
预测分析过程,
1)如果 X=a=#,则分析成功而结束;
2)如果 X=a≠#, 则从栈中上退去 X,
并把输入指针下移一个符号;
3)如果 X为一个非终结符号,
且分析表 A的元素 A[X,a]=‘X∷=X 1…Xk’,
则把栈顶的 X替换为 XkXk- 1…X1
(注意,依反序下推入栈,使 X1在栈顶 );
4)在所有其他情况, 即 X∈ VT且 X≠a,
或者 X∈ VN且 A[X,a]=ERROR(空白元素 ),
调用一个出错处理程序, 使得分析能继续下去或结束 。
第四章 语法分析 ----自顶向下分析技术
例题 G[E],E∷=TE ′
E’∷=+TE ’|ε
T∷=FT ′
T’∷ =*FT’|ε
F∷ =(E)|i
输入符号串为,i+i*i
规则 输入
栈顶
i +
* ( )
#
E E ∷ =TE ′ E ∷ =TE ′
E ’ E ′∷ =+TE ′ E ′∷ = ε E ′∷ = ε
T T ∷ =FT ′ T ∷ =FT ′
T ’ T ′∷ = ε T ′∷ =*FT ′ T ′∷ = ε T ′∷ = ε
F F ∷ = i F ∷ =(E)
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
4.3.3 预测分析技术
? 预测分析技术与预测识别程序
? 预测分析过程
? 预测分析表的生成
第四章 语法分析 ----自顶向下分析技术
预测分析表的生成
1) 两个集合 FIRST(u)与 FOLLOW(U)
假定 u∈V *,U∈V N,且 Z是识别符号 。
定义 4.1(开始符号集合 )FIRST(u)={ T| u?T…,T∈V T},
特别地, 如果 u?ε, 则 ε ∈FIRST(u) 。
例 G[E],E∷=TE ′ E’∷=+TE ’|ε
T∷=FT ’ T’∷=*FT ’|ε F∷=(E)|i
FIRST(E)=FIRST(T)=FIRST(F)={(,i}
FIRST(E’)={+,ε } FIRST(T’)={*,ε }
FIRST(TE’)={(,I} FIRST(+TE’)={+}
FIRST(FT’)={(,I} FIRST(*FT’)={*}
FIRST((E))={( } FIRST(i)={i}
*
*
预测分析表的生成
1) 两个集合 FIRST(u)与 FOLLOW(U)
假定 u∈V *,U∈V N,且 Z是识别符号 。
定义 4.1(开始符号集合 )FIRST(u)={ T| u?T…,T∈V T},
特别地, 如果 u?ε, 则 ε ∈FIRST(u) 。
例 G[E],E∷=TE ′ E’∷=+TE ’|ε
T∷=FT ’ T’∷=*FT ’|ε F∷=(E)|i
定义 4.2(后继符号集合 )FOLLOW(U)={T|Z?… UT…, T∈ VT∪ {#}},
特别地, 如果 Z?… U,则 #∈ FOLLOW(U)。
FOLLOW(E)=FOLLOW(E′ )={),#}
FOLLOW(T)=FOLLOW(T′ )={+,),#}
FOLLOW(F)={+,*,),#}
*
*
*
*
2) 构造预测分析表
1 对文法的每个规则 U∷=u, 执行步骤 2与步骤 3;
2 对每个终结符号 a∈FIRST(u), 让 A[U,a]=‘U∷=u ’;
3 如果 ε ∈FIRST(u), 则对 FOLLOW(U)中 的每个 终结符号 b 或 #,让
A[U,b]=‘U∷=u ’或 A[U,#]=‘U∷=u ’;
4 把 A的每个未定义元素置为 ERROR(用空白表示 )。
例 G[E],E∷=TE′ E ’∷=+TE ’|ε T∷=FT ’ T’∷=*FT ’|ε F∷=(E)|i
FIRST(TE’)={(,i} FIRST(+TE’)={+} FIRST(FT’)={(,i}
FIRST(*FT’)={*} FIRST((E))={( } FIRST(i)={i}
FOLLOW(E)=FOLLOW(E′)={), #} FOLLOW(T)=FOLLOW(T′)={+, ),#}
FOLLOW(F)={+,*,),#}
规则 输入
栈顶
i +
* ( )
#
E E ∷ =TE ′ E ∷ =TE ′
E ’ E ′∷ =+TE ′ E ′∷ = ε E ′∷ = ε
T T ∷ =FT ′ T ∷ =FT ′
T ’ T ′∷ = ε T ′∷ =*FT ′ T ′∷ = ε T ′∷ = ε
F F ∷ = i F ∷ =(E)
定义 4.3 如果某文法, 其预测分析表无多重定义的元素,
则称该文法为 LL(1)文法 。
定理 4.1 一个文法 G是 LL(1)的, 当且仅当对于 G的每个非终结符
号 U的任何两个不同的重写规则 U∷=x 与 U∷=y, 下面的条件成
立 。
条件 1 FIRST(x)∩FIRST(y)= ?;
条件 2 x?ε 与 y?ε 不能同时成立;
条件 3 如果 y?ε,则 FIRST(x)∩FOLLOW(U)= ?。
例 G[E],E∷=TE ′ E’∷=+TE ’|ε T∷=FT ’ T’∷=*FT ’|ε F∷=(E)|i
FOLLOW(E′ )={),#} FOLLOW(T′ )={+,),#}
规则 输入
栈顶
i +
* ( )
#
E E ∷ =TE ′ E ∷ =TE ′
E ’ E ′∷ =+TE ′ E ′∷ = ε E ′∷ = ε
T T ∷ =FT ′ T ∷ =FT ′
T ’ T ′∷ = ε T ′∷ =*FT ′ T ′∷ = ε T ′∷ = ε
F F ∷ = i F ∷ =(E)
* *
*
本章重点
自顶向下分析技术
无回溯的递归下降分析技术与预测分析技术
应用条件:无左递归性与无回溯性 。
预测分析表的构造
应用预测分析技术进行句型识别
LL( 1) 文法
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.3 无回溯的自顶向下分析技术
本章小结
第四章 语法分析 ----自顶向下分析技术
4.1 引言
4.1.1 自顶向下分析技术及识别算法
4.1.2 讨论的前提
4.1.3 要解决的基本问题
第四章 语法分析 ----自顶向下分析技术
4.1 引言
4.1.1 自顶向下分析技术及识别算法
从推导角度看,自顶向下识别算法是从识别符号出发,
试图构造一个推导,由它推导出与输入符号串相同的符号
串。
从语法树角度看,自顶向下分析过程以识别符号为根
结点,试图向下构造一个语法树,其末端结点符号串正好
与输入符号串相同。
第四章 语法分析 ----自顶向下分析技术
4.1 引言
4.1.1 自顶向下分析技术及识别算法
4.1.2 讨论的前提
定理 2.7 对于上下文无关文法,如果存在句型
x=x1x2…xn,x1x2…xn=>y
则必存在 y1,y2,…,yn,使得 xi=>yi (i=1,2,…,n)
且 y=y1y2…yn。
第四章 语法分析 ----自顶向下分析技术
*
*
4.1 引言
4.1.1 自顶向下分析技术及识别算法
4.1.2 讨论的前提
4.1.3 要解决的基本问题
U∷ =u1| u2| … | un
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
4.2.2 问题及其解决
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
G[S],
S∷=aBC
B∷=ib | b
C∷=DE | FG| c
D∷ =d
E∷ =eh
F∷ =de
G∷ =t
输入符号串为 x=abdet
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
G[S],
S∷=aBC
B∷=ib | b
C∷=DE | FG| c
D∷ =d
E∷ =eh
F∷ =de
G∷ =t
输入符号串为 x=abdet
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
G[S],
S∷=aBC
B∷=ib | b
C∷=DE | FG| c
D∷ =d
E∷ =eh
F∷ =de
G∷ =t
输入符号串为 x=abdet
回溯,当用某个非终结符号的某个选择去进行匹配而失败时,
删去失败的分支并回头查看输入符号,以便与其他选择
相匹配,这种过程称回溯。
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
4.2.2 问题及其解决
? 效率问题
? 对语义的影响
? 语法错误的校正
? 左递归
第四章 语法分析 ----自顶向下分析技术
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
4.2.2 问题及其解决
? 效率问题
? 对语义的影响
? 语法错误的校正
? 左递归
第四章 语法分析 ----自顶向下分析技术
1)回溯问题
对于任意一个规则的右部 x| y| … | z,
相对于 x,y,…, z的头终结符号集合总
是两两不相交的。
2)假匹配问题
当存在规则 B∷ =b| bi而输入符号串为 abic
时,选取关于 B的第一个选择 b将发生虚假
的匹配现象。
3)查文法的效率问题
4.2 带回溯的自顶向下分析技术
4.2.1 基本思想
4.2.2 问题及其解决
? 效率问题
? 对语义的影响
? 语法错误的校正
? 左递归
自顶向下分析技术 的致命弱点之一是不能应用于左递归文法 。
第四章 语法分析 ----自顶向下分析技术
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
4.3.3 预测分析技术
第四章 语法分析 ----自顶向下分析技术
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
1)无左递归性,既无规则左递归,也非文法左递归,即不存在这
样的非终结符号 U,对于它有 U∷=U … 或 U?U…。
2)无回溯性, 对于任一非终结符号 U的规则右部 x1| x2| … | xn,
相对于 x1,x2,…, xn的各头终结符号集合总是两两不相交的 。
第四章 语法分析 ----自顶向下分析技术
+
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
? 实现思想
? 举例
? 递归下降识别程序的简化
第四章 语法分析 ----自顶向下分析技术
递归下降分析技术是一种无回溯
的自顶向下分析技术。
实现思想:让一个识别程序由一
组子程序(过程)组成,其中每
个子程序对应于文法的一个非终
结符号;由于文法通常是递归定
义的,因此这些子程序往往是递
归子程序。
文法 G[E],E∷=E+T | T T∷=T*F|F F∷=(E) | i
消去左递归, 回溯性后的等价文法
G′ [E],E∷=TE ′ E′ ∷=+TE ′ | ε T∷=FT ′
T′∷ =*FT′| ε F ∷ =(E)| i 两个约定
E T E ′ 出口
Y
E ′ 出口
N
T 出口
Y
T ′ 出口
N
F Y N
Y
N
Y 出口
N
出口
+
取符号 T E ′
出口
F T ′
*
取符号 F T ′
(
取符号 E
)
出错
取符号
i
出错
总控
取符号 E
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
? 实现思想
? 举例
? 递归下降识别程序的简化
G[E],
E∷ =E+E| E*E| (E)| i
第四章 语法分析 ----自顶向下分析技术
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
4.3.3 预测分析技术
? 预测分析技术与预测识别程序
? 预测分析过程
? 预测分析表的生成
第四章 语法分析 ----自顶向下分析技术
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
4.3.3 预测分析技术
? 预测分析技术与预测识别程序
? 预测分析过程
? 预测分析表的生成
第四章 语法分析 ----自顶向下分析技术
预测分析过程,
1)如果 X=a=#,则分析成功而结束;
2)如果 X=a≠#, 则从栈中上退去 X,
并把输入指针下移一个符号;
3)如果 X为一个非终结符号,
且分析表 A的元素 A[X,a]=‘X∷=X 1…Xk’,
则把栈顶的 X替换为 XkXk- 1…X1
(注意,依反序下推入栈,使 X1在栈顶 );
4)在所有其他情况, 即 X∈ VT且 X≠a,
或者 X∈ VN且 A[X,a]=ERROR(空白元素 ),
调用一个出错处理程序, 使得分析能继续下去或结束 。
第四章 语法分析 ----自顶向下分析技术
例题 G[E],E∷=TE ′
E’∷=+TE ’|ε
T∷=FT ′
T’∷ =*FT’|ε
F∷ =(E)|i
输入符号串为,i+i*i
规则 输入
栈顶
i +
* ( )
#
E E ∷ =TE ′ E ∷ =TE ′
E ’ E ′∷ =+TE ′ E ′∷ = ε E ′∷ = ε
T T ∷ =FT ′ T ∷ =FT ′
T ’ T ′∷ = ε T ′∷ =*FT ′ T ′∷ = ε T ′∷ = ε
F F ∷ = i F ∷ =(E)
4.3 无回溯的自顶向下分析技术
4.3.1 先决条件
4.3.2 递归下降分析技术
4.3.3 预测分析技术
? 预测分析技术与预测识别程序
? 预测分析过程
? 预测分析表的生成
第四章 语法分析 ----自顶向下分析技术
预测分析表的生成
1) 两个集合 FIRST(u)与 FOLLOW(U)
假定 u∈V *,U∈V N,且 Z是识别符号 。
定义 4.1(开始符号集合 )FIRST(u)={ T| u?T…,T∈V T},
特别地, 如果 u?ε, 则 ε ∈FIRST(u) 。
例 G[E],E∷=TE ′ E’∷=+TE ’|ε
T∷=FT ’ T’∷=*FT ’|ε F∷=(E)|i
FIRST(E)=FIRST(T)=FIRST(F)={(,i}
FIRST(E’)={+,ε } FIRST(T’)={*,ε }
FIRST(TE’)={(,I} FIRST(+TE’)={+}
FIRST(FT’)={(,I} FIRST(*FT’)={*}
FIRST((E))={( } FIRST(i)={i}
*
*
预测分析表的生成
1) 两个集合 FIRST(u)与 FOLLOW(U)
假定 u∈V *,U∈V N,且 Z是识别符号 。
定义 4.1(开始符号集合 )FIRST(u)={ T| u?T…,T∈V T},
特别地, 如果 u?ε, 则 ε ∈FIRST(u) 。
例 G[E],E∷=TE ′ E’∷=+TE ’|ε
T∷=FT ’ T’∷=*FT ’|ε F∷=(E)|i
定义 4.2(后继符号集合 )FOLLOW(U)={T|Z?… UT…, T∈ VT∪ {#}},
特别地, 如果 Z?… U,则 #∈ FOLLOW(U)。
FOLLOW(E)=FOLLOW(E′ )={),#}
FOLLOW(T)=FOLLOW(T′ )={+,),#}
FOLLOW(F)={+,*,),#}
*
*
*
*
2) 构造预测分析表
1 对文法的每个规则 U∷=u, 执行步骤 2与步骤 3;
2 对每个终结符号 a∈FIRST(u), 让 A[U,a]=‘U∷=u ’;
3 如果 ε ∈FIRST(u), 则对 FOLLOW(U)中 的每个 终结符号 b 或 #,让
A[U,b]=‘U∷=u ’或 A[U,#]=‘U∷=u ’;
4 把 A的每个未定义元素置为 ERROR(用空白表示 )。
例 G[E],E∷=TE′ E ’∷=+TE ’|ε T∷=FT ’ T’∷=*FT ’|ε F∷=(E)|i
FIRST(TE’)={(,i} FIRST(+TE’)={+} FIRST(FT’)={(,i}
FIRST(*FT’)={*} FIRST((E))={( } FIRST(i)={i}
FOLLOW(E)=FOLLOW(E′)={), #} FOLLOW(T)=FOLLOW(T′)={+, ),#}
FOLLOW(F)={+,*,),#}
规则 输入
栈顶
i +
* ( )
#
E E ∷ =TE ′ E ∷ =TE ′
E ’ E ′∷ =+TE ′ E ′∷ = ε E ′∷ = ε
T T ∷ =FT ′ T ∷ =FT ′
T ’ T ′∷ = ε T ′∷ =*FT ′ T ′∷ = ε T ′∷ = ε
F F ∷ = i F ∷ =(E)
定义 4.3 如果某文法, 其预测分析表无多重定义的元素,
则称该文法为 LL(1)文法 。
定理 4.1 一个文法 G是 LL(1)的, 当且仅当对于 G的每个非终结符
号 U的任何两个不同的重写规则 U∷=x 与 U∷=y, 下面的条件成
立 。
条件 1 FIRST(x)∩FIRST(y)= ?;
条件 2 x?ε 与 y?ε 不能同时成立;
条件 3 如果 y?ε,则 FIRST(x)∩FOLLOW(U)= ?。
例 G[E],E∷=TE ′ E’∷=+TE ’|ε T∷=FT ’ T’∷=*FT ’|ε F∷=(E)|i
FOLLOW(E′ )={),#} FOLLOW(T′ )={+,),#}
规则 输入
栈顶
i +
* ( )
#
E E ∷ =TE ′ E ∷ =TE ′
E ’ E ′∷ =+TE ′ E ′∷ = ε E ′∷ = ε
T T ∷ =FT ′ T ∷ =FT ′
T ’ T ′∷ = ε T ′∷ =*FT ′ T ′∷ = ε T ′∷ = ε
F F ∷ = i F ∷ =(E)
* *
*
本章重点
自顶向下分析技术
无回溯的递归下降分析技术与预测分析技术
应用条件:无左递归性与无回溯性 。
预测分析表的构造
应用预测分析技术进行句型识别
LL( 1) 文法
第四章 语法分析 ----自顶向下分析技术