Download presentation
Presentation is loading. Please wait.
Published byMarshall Francis Modified over 9 years ago
1
Notes on First and Follow Written by David Walker Edited by Phil Sweany
2
Computing Nullable Sets Non-terminal X is Nullable only if the following constraints are satisfied (computed using iterative analysis) –base case: if (X := ) then X is Nullable –inductive case: if (X := ABC...) and A, B, C,... are all Nullable then X is Nullable
3
Computing First Sets First(X) is computed iteratively –base case: if T is a terminal symbol then First (T) = {T} –inductive case: if X is a non-terminal and (X:= ABC...) then –First (X) = First (X) U First (ABC...) where First(ABC...) = F1 U F2 U F3 U... and »F1 = First (A) »F2 = First (B), if A is Nullable »F3 = First (C), if A is Nullable & B is Nullable »...
4
Computing Follow Sets Follow(X) is computed iteratively –base case: initially, we assume nothing in particular follows X –(Follow (X) is initially { }) –inductive case: if (Y := s1 X s2) for any strings s1, s2 then –Follow (X) = First (s2) U Follow (X) if (Y := s1 X s2) for any strings s1, s2 then –Follow (X) = Follow(Y) U Follow (X), if s2 is Nullable
5
building a predictive parser Z ::= X Y Z Z ::= d Y ::= c Y ::= X ::= a X ::= b Y e nullablefirstfollow Z Y X
6
building a predictive parser Z ::= X Y Z Z ::= d Y ::= c Y ::= X ::= a X ::= b Y e nullablefirstfollow Zno Yyes Xno base case
7
building a predictive parser Z ::= X Y Z Z ::= d Y ::= c Y ::= X ::= a X ::= b Y e nullablefirstfollow Zno Yyes Xno after one round of induction, we realize we have reached a fixed point
8
building a predictive parser Z ::= X Y Z Z ::= d Y ::= c Y ::= X ::= a X ::= b Y e nullablefirstfollow Znod Yyesc Xnoa,b base case (note, first of Y should include empty string)
9
building a predictive parser Z ::= X Y Z Z ::= d Y ::= c Y ::= X ::= a X ::= b Y e nullablefirstfollow Znod,a,b Yyesc Xnoa,b after one round of induction, no fixed point
10
building a predictive parser Z ::= X Y Z Z ::= d Y ::= c Y ::= X ::= a X ::= b Y e nullablefirstfollow Znod,a,b Yyesc Xnoa,b after two rounds of induction, no more changes ==> fixed point
11
building a predictive parser Z ::= X Y Z Z ::= d Y ::= c Y ::= X ::= a X ::= b Y e nullablefirstfollow Znod,a,b{ } Yyesc{ } Xnoa,b{ } base case
12
building a predictive parser Z ::= X Y Z Z ::= d Y ::= c Y ::= X ::= a X ::= b Y e nullablefirstfollow Znod,a,b{ } Yyesce,d,a,b Xnoa,bc,d,a,b after one round of induction, no fixed point
13
building a predictive parser Z ::= X Y Z Z ::= d Y ::= c Y ::= X ::= a X ::= b Y e nullablefirstfollow Znod,a,b{ } Yyesce,d,a,b Xnoa,bc,d,a,b after two rounds of induction, fixed point (but notice, computing Follow(X) before Follow (Y) would have required 3 rd round)
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.