第04章 语法分析——自上而下分析(5)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
E’
E →E+T | T T →T*F | F F→i|(E)
+
E’ →+TE'
Βιβλιοθήκη Baidu
*
(
)
#
中原工学院 计算机学院
预测分析表构造举例(续2) 预测分析表构造举例(
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
对E'→ε,ε∈FIRST( , ∈FIRST(E'→ε) ,FOLLOW(E )={),#},所以: ) FOLLOW(E')={),#},所以: 所以 i
提供语法分析用的产生式或ERROR; 提供语法分析用的产生式或ERROR; 语法分析用的产生式
中原工学院 计算机学院
2、FIRST(X)构造算法 FIRST(
设X∈VT∪ VN , FIRST(X)构造规则是连续使用以下规则, FIRST(X)构造规则是连续使用以下规则 构造规则是连续使用以下规则, 直到FIRST(X)不再增大 不再增大。 直到FIRST(X)不再增大。
中原工学院 计算机学院
4、 预测分析表构造算法
的每个产生式A→α执行第 步和第 步 执行第2步和第 第1步:对文法 的每个产生式 步 对文法G的每个产生式 执行第 步和第3步 加至M[A,a] 第2步:非若终结符 ∈FIRST(α),把A→α加至 步 非若终结符a∈ , 加至 第3步:若ε∈FIRST(α),则对任何 ∈FOLLOW(A)把A→α加 步 ∈ ,则对任何b∈ 把 加 至M[A, b]中 中 标上“ 第4步:把所有无定义的 步 把所有无定义的M[A,a]标上“出错标志” 标上 出错标志”
E →E+T | T T →T*F | F F→i|(E)
T
中原工学院 计算机学院
预测分析表构造举例(续4) 预测分析表构造举例(
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
对T'→*FT', FIRST( , FIRST(*FT')= {*},所以: )= {* 所以: i
E’
E →E+T | T T →T*F | F F→i|(E)
+
E’ →+TE'
*
(
) E' → ε
# E' → ε
中原工学院 计算机学院
预测分析表构造举例(续3) 预测分析表构造举例(
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
对T →FT', FIRST(FT )=FIRST(T)={( , i},所以: , FIRST(FT')=FIRST(T)={( i} 所以: i T →FT' + * ( T →FT' ) #
中原工学院 计算机学院
3、 FOLLOW(A)的构造算法 FOLLOW(
对于文法的开始符号S 对于文法的开始符号S,置#于FOLLOW(S)中; FOLLOW(S)中 若A→αBβ是一个产生式,则把FIRST(β) \{ε}加至 A→αBβ是一个产生式 则把FIRST(β) {ε}加至 是一个产生式, 到FOLLOW(B)中; FOLLOW(B)中 若A→αB是一个产生式,或A→αBβ是一个产生式 A→αB是一个产生式 是一个产生式, A→αBβ是一个产生式 而β=>ε(即ε∈FIRST(β)),则把FOLLOW(A)加 β=>ε( FIRST(β)),则把FOLLOW(A)加 ),则把 至FOLLOW(B)中。 FOLLOW(B)中
《编译原理》 编译原理》
预测分析表的构造
任课教师:孙飞显 任课教师:
sjysfx781@126.com
School of Computer Science Zhongyuan University of Technology
第三章 词法分析
问题背景
预测分析程序是实现 ( 预测分析程序是实现LL(1)文法分析的有效 是实现LL 途径; 途径; 预测分析程序实现的关键在于构造正确的预测 预测分析程序实现的关键在于构造正确的预测 分析表。 分析表。
若X∈VT,则FIRST(X)={X}; FIRST(X)={X}; 且有产生式X→a…,则把a加入FIRST(X)中 若X∈VN,且有产生式X→a…,则把a加入FIRST(X)中; 若X→ε也是一条产生式,则把ε也加到FIRST(X)中; X→ε也是一条产生式,则把ε也加到FIRST(X)中 也是一条产生式 X→Y…是一个产生式且 是一个产生式且Y 则把FIRST(Y)中的所 若X→Y…是一个产生式且Y∈VN,则把FIRST(Y)中的所 有非ε元素都加到FIRST(X)中 有非ε元素都加到FIRST(X)中; 是产生式, 都是非终结符, 若X→Y1Y2…Yk是产生式,Y1,…,Yi-1都是非终结符,而且 对于任何的j 1≤j≤i都含有ε 则把FIRST(Y 对于任何的j,1≤j≤i-1,FIRST(Yj)都含有ε,则把FIRST(Yi) 中的所有非ε元素都放到FIRST(X)中 特别的是, 中的所有非ε元素都放到FIRST(X)中;特别的是,若所有的 FIRST(Yj)均含有ε,j=1,2,…,k,则把ε加到FIRST(X)中 。 均含有ε j=1,2,…,k,则把ε加到FIRST(X)中
中原工学院 计算机学院
预测分析表构造举例
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
对E→TE' ,因FIRST(TE )=FIRST(E)={( , i},所以: FIRST(TE')=FIRST(E)={( i} 所以: i
E E →TE'
T'
E →E+T | T T →T*F | F F→i|(E)
+
* T'→*FT'
(
)
#
中原工学院 计算机学院
中原工学院 计算机学院
FOLLOW集构造举例 FOLLOW集构造举例
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
E →E+T | T T →T*F | F F→i|(E)
FOLLOW(E)={),#} FOLLOW(E)={),#} FOLLOW(E’)={),#} FOLLOW(E’)={),#} FOLLOW(T)={+,),#} FOLLOW(T)={+,),#} FOLLOW(T’)={+,),#} FOLLOW(T’)={+,),#} FOLLOW(F)={*,+,),#} FOLLOW(F)={*,+,),#}
中原工学院 计算机学院
内容提要
预测分析表的作用 文法符号X FIRST( 文法符号X的FIRST(X)的构造算法 非终结符A FOLLOW( 非终结符A的FOLLOW(A)的构造算法 预测分析表构造
中原工学院 计算机学院
1、预测分析表的作用
是预测分析法重要的数据结构 是预测分析法重要的数据结构
预测分析表+栈 预测分析表+
中原工学院 计算机学院
FIRST集构造举例 FIRST集构造举例
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
E →E+T | T T →T*F | F F→i|(E) FIRST(E)={( i} FIRST(E)={( , i} FIRST(E’)={+,ε FIRST(E’)={+,ε} FIRST(T)={( i} FIRST(T)={( , i} FIRST(T’)={*,ε FIRST(T’)={*,ε} FIRST(F)={( FIRST(F)={( , i}
E →E+T | T T →T*F | F F→i|(E)
+
*
(
E →TE'
)
#
中原工学院 计算机学院
预测分析表构造举例(续1) 预测分析表构造举例(
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
对E' →+TE', FIRST(+TE )={+},所以: , FIRST(+TE')={+ 所以: i
E →E+T | T T →T*F | F F→i|(E)
+
E’ →+TE'
Βιβλιοθήκη Baidu
*
(
)
#
中原工学院 计算机学院
预测分析表构造举例(续2) 预测分析表构造举例(
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
对E'→ε,ε∈FIRST( , ∈FIRST(E'→ε) ,FOLLOW(E )={),#},所以: ) FOLLOW(E')={),#},所以: 所以 i
提供语法分析用的产生式或ERROR; 提供语法分析用的产生式或ERROR; 语法分析用的产生式
中原工学院 计算机学院
2、FIRST(X)构造算法 FIRST(
设X∈VT∪ VN , FIRST(X)构造规则是连续使用以下规则, FIRST(X)构造规则是连续使用以下规则 构造规则是连续使用以下规则, 直到FIRST(X)不再增大 不再增大。 直到FIRST(X)不再增大。
中原工学院 计算机学院
4、 预测分析表构造算法
的每个产生式A→α执行第 步和第 步 执行第2步和第 第1步:对文法 的每个产生式 步 对文法G的每个产生式 执行第 步和第3步 加至M[A,a] 第2步:非若终结符 ∈FIRST(α),把A→α加至 步 非若终结符a∈ , 加至 第3步:若ε∈FIRST(α),则对任何 ∈FOLLOW(A)把A→α加 步 ∈ ,则对任何b∈ 把 加 至M[A, b]中 中 标上“ 第4步:把所有无定义的 步 把所有无定义的M[A,a]标上“出错标志” 标上 出错标志”
E →E+T | T T →T*F | F F→i|(E)
T
中原工学院 计算机学院
预测分析表构造举例(续4) 预测分析表构造举例(
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
对T'→*FT', FIRST( , FIRST(*FT')= {*},所以: )= {* 所以: i
E’
E →E+T | T T →T*F | F F→i|(E)
+
E’ →+TE'
*
(
) E' → ε
# E' → ε
中原工学院 计算机学院
预测分析表构造举例(续3) 预测分析表构造举例(
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
对T →FT', FIRST(FT )=FIRST(T)={( , i},所以: , FIRST(FT')=FIRST(T)={( i} 所以: i T →FT' + * ( T →FT' ) #
中原工学院 计算机学院
3、 FOLLOW(A)的构造算法 FOLLOW(
对于文法的开始符号S 对于文法的开始符号S,置#于FOLLOW(S)中; FOLLOW(S)中 若A→αBβ是一个产生式,则把FIRST(β) \{ε}加至 A→αBβ是一个产生式 则把FIRST(β) {ε}加至 是一个产生式, 到FOLLOW(B)中; FOLLOW(B)中 若A→αB是一个产生式,或A→αBβ是一个产生式 A→αB是一个产生式 是一个产生式, A→αBβ是一个产生式 而β=>ε(即ε∈FIRST(β)),则把FOLLOW(A)加 β=>ε( FIRST(β)),则把FOLLOW(A)加 ),则把 至FOLLOW(B)中。 FOLLOW(B)中
《编译原理》 编译原理》
预测分析表的构造
任课教师:孙飞显 任课教师:
sjysfx781@126.com
School of Computer Science Zhongyuan University of Technology
第三章 词法分析
问题背景
预测分析程序是实现 ( 预测分析程序是实现LL(1)文法分析的有效 是实现LL 途径; 途径; 预测分析程序实现的关键在于构造正确的预测 预测分析程序实现的关键在于构造正确的预测 分析表。 分析表。
若X∈VT,则FIRST(X)={X}; FIRST(X)={X}; 且有产生式X→a…,则把a加入FIRST(X)中 若X∈VN,且有产生式X→a…,则把a加入FIRST(X)中; 若X→ε也是一条产生式,则把ε也加到FIRST(X)中; X→ε也是一条产生式,则把ε也加到FIRST(X)中 也是一条产生式 X→Y…是一个产生式且 是一个产生式且Y 则把FIRST(Y)中的所 若X→Y…是一个产生式且Y∈VN,则把FIRST(Y)中的所 有非ε元素都加到FIRST(X)中 有非ε元素都加到FIRST(X)中; 是产生式, 都是非终结符, 若X→Y1Y2…Yk是产生式,Y1,…,Yi-1都是非终结符,而且 对于任何的j 1≤j≤i都含有ε 则把FIRST(Y 对于任何的j,1≤j≤i-1,FIRST(Yj)都含有ε,则把FIRST(Yi) 中的所有非ε元素都放到FIRST(X)中 特别的是, 中的所有非ε元素都放到FIRST(X)中;特别的是,若所有的 FIRST(Yj)均含有ε,j=1,2,…,k,则把ε加到FIRST(X)中 。 均含有ε j=1,2,…,k,则把ε加到FIRST(X)中
中原工学院 计算机学院
预测分析表构造举例
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
对E→TE' ,因FIRST(TE )=FIRST(E)={( , i},所以: FIRST(TE')=FIRST(E)={( i} 所以: i
E E →TE'
T'
E →E+T | T T →T*F | F F→i|(E)
+
* T'→*FT'
(
)
#
中原工学院 计算机学院
中原工学院 计算机学院
FOLLOW集构造举例 FOLLOW集构造举例
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
E →E+T | T T →T*F | F F→i|(E)
FOLLOW(E)={),#} FOLLOW(E)={),#} FOLLOW(E’)={),#} FOLLOW(E’)={),#} FOLLOW(T)={+,),#} FOLLOW(T)={+,),#} FOLLOW(T’)={+,),#} FOLLOW(T’)={+,),#} FOLLOW(F)={*,+,),#} FOLLOW(F)={*,+,),#}
中原工学院 计算机学院
内容提要
预测分析表的作用 文法符号X FIRST( 文法符号X的FIRST(X)的构造算法 非终结符A FOLLOW( 非终结符A的FOLLOW(A)的构造算法 预测分析表构造
中原工学院 计算机学院
1、预测分析表的作用
是预测分析法重要的数据结构 是预测分析法重要的数据结构
预测分析表+栈 预测分析表+
中原工学院 计算机学院
FIRST集构造举例 FIRST集构造举例
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
E →E+T | T T →T*F | F F→i|(E) FIRST(E)={( i} FIRST(E)={( , i} FIRST(E’)={+,ε FIRST(E’)={+,ε} FIRST(T)={( i} FIRST(T)={( , i} FIRST(T’)={*,ε FIRST(T’)={*,ε} FIRST(F)={( FIRST(F)={( , i}
E →E+T | T T →T*F | F F→i|(E)
+
*
(
E →TE'
)
#
中原工学院 计算机学院
预测分析表构造举例(续1) 预测分析表构造举例(
E →TE' E' → +TE' | ε T →FT' T' → *FT' | ε F→i|(E)
对E' →+TE', FIRST(+TE )={+},所以: , FIRST(+TE')={+ 所以: i