【正文】
?S?,$] I1 C [S?C?C,$] [C??cC,$] [C??d,$] I2 c [C?c?C,c/d] [C? ? cC,c/d] [C??d,c/d] I3 d [C?d?,c/d] I4 C [S?C?C,$] I5 c [C?c?C,$] [C??cC,$] [C??d,$] I6 C [C?cC ?,$] I9 d [C?d?,$] I7 c d c C [C?cC ?,c/d] I8 d 39 五 . 構(gòu)造 LR(1)分析表 c d $ S C0 S3S41 21 acc2 S6S753 S3S484 r3r35 r16 S6S797 r38 r2r29 r340 作業(yè): 。??S, $] 若 [A ?????,a] ?I 且 B ?? ? P 則 [B???,b] ?I 其中 b ?FIRST(?a) [S ??CC,$] [C ??cC,c/d] [C ??d,c/d] 38 [S180。): (0) S180。 REPEAT FOR ? 項目集 I∈ C和 ? x∈ {VT∪ VN} 把 go(I,X)加入到 C中 UNTIL C不在增大 。 { C:={closure( {[ S’→} 算法 LR(1)項目集規(guī)范族的構(gòu)造方法: PROCEDURE items(G180。Xβ,a] IN I J:=J∪ {[A→α X { J:={ }。x∈ {VT∪ VN}): VAR J:SET OF item 。 Return (I) 。 Bβ,a] IN I FOR 任一 B→η IN P FOR 任一 b IN FIRST(βa) I:=I∪ {[B→ Xβ,a] ?I時 } 算法 計算 LR(1)的 closure(I)和go(I,x) FUNCTION closure(I:SET OF item):SET OFitem。 * ? r m 35 定義 4. 13 設(shè) I是 G的一個 LR(1)項目集, X是一 個文法符號,定義 go(I, X) = closure(J) , 其中 J={[A→ ? Xη ,b]加進 closure(I)中 。 2 .若項目[ A→α 這兩種可能性 結(jié)合在一起,則 b∈ FIRST(βa)。η ,b] 對于活前綴 γ=δα 也是有效的。 若項目 [ A→α 例 4. 17 考慮文法 G: S→ CC C→ cC|d * ? r m ? r m 33 因為有規(guī)范淮導(dǎo) S ccCcd cccCcd 故項目[ C→ c一個 LR(1)項目 [A→α a1a2…a k稱向前搜索符號串。 一 . LR(k) 項目 形式: [A???? , a1a2…a k] ???,移進或待歸約項目, a1a2…a k不起作用。 29 作業(yè): 30 LR(1)分析表的構(gòu)造 S?L?=R R ?L? I2 A?? ? ? Ik a?FOLLOW(A) S ?Aw ??w FOLLOW(A)比上面推導(dǎo)中 w的 第一個符號集要大,可能不存在下面的推導(dǎo): S ?Aax ??ax (w ax) * ? r m ? r m * ? r m ? r m ? r m 31 棧中已識別出一個 L, 此時, a是“ =”,不能用“ R?L”進行歸約,因為不存在“ R=”的歸范句型。 * id I8 R S ? L = R id I6 R L ? * R L L ? I5 = S ? L = * R L ? R R ? I2 R S ? R I1 L S ? L L I0 S S180。 * R L ? L = R S ? ??S (1) S ?L = R (2) S ? R (3) L ?* R (4) L ?id (5) R ?L I1:{ E180。 這種解決方法是比較簡單的,因此稱作 SLR 分析,由此構(gòu)造的分析表,稱作 SLR分析表。 3. 若 a? FOLLOW(B),則用 B ??進行歸約。?E?