[School] Tính first và follow trong chương trình dịch

Tính Frist có 5TH
+TH1: A -> aBc|x => Frist(A) = a, x
+TH2: A -> aBc|B, B -> c|€ => Frist(A) = a + Frist(B) = a, c, €
+TH3: A -> BC,  B -> b, C -> c => Frist(A) = Frist(B) = b. Đến đây ko chứa € nên ko cộng thêm Frist(C)
+TH4: A -> BC,  B -> b|€, C -> c => Frist(A) = Frist(B) = b, €. Đến đây có chứa € nên Frist(A) = Frist(B) \ {€} + Frist(C) = b, c
+TH5: A -> BC,  B -> b|€, C -> c|€ => Frist(A) = Frist(B) = b, €. Đến đây có chứa €
==> Frist(A) = Frist(B) \ {€} + Frist(C) = b, c, €


Tính Follow có 5 TH
+TH1: A là nguồn => Follow(A) = $
+TH2: A -> aBc|x => Follow(B) = c
+TH3: A -> aBc|B, B -> d => Follow(B) = c + Follow(A)= c, $
+TH4: A -> aBC, C -> c => Follow(B) = First(C) = c
+TH5: A -> aBC, C -> c|€ => Follow(B) = First(C) mà First(C) = c, € chứa € nên Follow(B) = First(C) \ {€} + Follow(A) (A là cái sinh ra B) = c, $