编译原理 第四章 语法分析—自上而下分析
因为E? TE`,所以FIRST(E)= FIRST(T)。 因为T`?T??,
所以FIRST(T`)= FIRST(T)?{ ?} ={(, ^, a, b ,??。 求非终结符的FOLLOW:
因为E? TE`的E是文法的开始符号,FOLLOW(E)={#},又因为P?(E),所以FOLLOW(E)={#}?FIRST())\\{?}={#,)}
因为E? TE`,所以FOLLOW(E`)=FOLLOW(E) 因为E? TE`,并且E`≠?, 所以FOLLOW(T)=FIRST(E`)\\{?}, 又因为E`??,
所以FOLLOW(T)={+}? FOLLOW(E)={+}? {#,}}={+,#,? }. 因为T?FT`,所以FOLLOW(T`)=FOLLOW(T)={+,#,? }. 因为T? FT`,并且T`≠?,
所以FOLLOW(F)=FIRST(T`)\\{?},又因为T`??, 所以FOLLOW(F)={(,^,a,b ?? FOLLOW(T) ={(,^,a,b ??{+,#,? }={(,^,a,b ,+,#,? ? 因为F?PF`,
所以FOLLOW(F`)=FOLLOW(F)={(,^,a,b ,+,#,? ?. 因为F?PF`,并且F`≠?,
所以FOLLOW(P)=FIRST(F`)\\{?},又因为F`??, 所以FOLLOW(P)={*?? FOLLOW(F)
制作人:李明新 共28页第26页 13-3-24
编译原理 第四章 语法分析—自上而下分析
={*}?{(,^,a,b,+,),# ?
={*,(,^,a,b ,+,?,# ?. ⑵证明这个文法是LL(1)的
①证明P?(E)?^?a?b各侯选式的FIRST是否两两相交。 FIRST((E))?FIRST(^)=?
FIRST((E))?FIRST(a)=? FIRST((E))?FIRST(b)=?
FIRST(^)?FIRST(a)=?
FIRST(^)?FIRST(b)=? FIRST(a)?FIRST(b)=?
②证明E`?+E??,T`?T??,F`?*F`??非终结符号的FIRST和FOLLOW是否相交。
FIRST(E`)? FOLLOW(E`)={+,?}?{#, ? }=? FIRST(T`)? FOLLOW(T`) ={(, ^, a, b ,???{+,#,? }=? FIRST(F`)? FOLLOW(F`) ={*,?}?{(,^,a,b ,+,#,? ?=? 该文法是LL(1)的。
⑶构造预测分析表
+ * ( ) a b ^ # E TE` TE` TE` TE` E` +E` ? ? T FT` FT` FT` FT` T` ? T ? T T T ? F PF` PF` PF` PF` 制作人:李明新 共28页第27页 13-3-24 编译原理 第四章 语法分析—自上而下分析
F` ? *F` ? ? ? ? ? ? P (E) a b ^
制作人:李明新 共28页第28页 13-3-24