Download presentation
Presentation is loading. Please wait.
1
First, Follow and Select sets
COP4620 – Programming Language Translators Dr. Manuel E. Bermudez
2
Topics Graph Algorithm for First sets Graph algorithm for Follow sets
Select sets Define LL(1) Grammar
3
17/01/2019 Top-Down Parsing Most parsing methods impose bounds on the amount of stack lookback and input lookahead. For programming languages, a common choice is (1,1). We must define OPF (A,t), where A is the top element of the stack, and t is the first symbol on the input. Storage requirements: O(n2), where n is the size of the grammar vocabulary (a few hundred).
4
Ominiscient parsing function
17/01/2019 Ominiscient parsing function ω t … A … OPF (A, t) = A → ω if ω =>* t, for some . ω =>* ε, and S =>* At, for some , , where =>* ε. or
5
OPF OPF (A, b) = A → BAd because BAd =>* bAd
17/01/2019 Example S → A A → BAd B → b (Illustrating case 1): → C C →c OPF b c d B B → b B → b B → b C C → c C → c C → c S S → A S → A S → A A A → BAd A → C ??? OPF (A, b) = A → BAd because BAd =>* bAd OPF (A, c) = A → C because C =>* c i.e., B begins with b, and C begins with c. OPF Red entries are optional. So is the ??? entry.
6
opf → Example (illustrating case 2): S → A A → bAd OPF b d
17/01/2019 opf Example (illustrating case 2): S → A A → bAd → OPF b d S S → A S → A A A → bAd A → A → OPF (S, b) = S → A , because A =>* bAd OPF (S, d) = , because S =>* αSdβ OPF (S, ) = S → A , because S is legal OPF (A, b) = A → bAd , because A =>* bAd OPF (A, d) = A → , because S =>* bAd OPF (A, ) = A → , because S =>*A
7
First and follow sets Definition:
17/01/2019 First and follow sets Definition: First (A) = {t / A =>* t, for some } Follow (A) = {t / S =>* Atβ, for some , β} Computing First sets: Build graph (Ф, δ), where (A,B) δ if B → A, =>* ε (First(A) First(B)) Attach to each node an empty set of terminals. Add t to the set for A if A → t, =>* ε. Propagate the elements of the sets along the edges of the graph.
8
First sets Example: S → ABCD A → CDA C → A B → BC → a D → AC → b → {a}
17/01/2019 First sets Example: S → ABCD A → CDA C → A B → BC → a D → AC → b → Nullable = {A, C, D} {b} {a, b} S B {a} {a} Black: Steps 2 and 3. Red: Propagating in step 4 A C D {a}
9
Follow sets Build graph (Ф, δ), where (A,B) δ if
17/01/2019 Follow sets Build graph (Ф, δ), where (A,B) δ if A → B, =>* ε. Follow(A) Follow(B): any symbol X that follows A, also follows B. A X B α ε
10
17/01/2019 Follow sets Attach to each node an empty set of terminals. Add to the set for the start symbol. Add First(X) to the set for A (i.e. Follow(A)) if B → AX, =>* ε. Propagate the elements of the sets along the edges of the graph.
11
Follow sets S B A C Example: S → ABCD A → CDA C → A B → BC → a D → AC
17/01/2019 Follow sets Example: S → ABCD A → CDA C → A B → BC → a D → AC → b → Nullable = {A, C, D} First(S) = {a, b} First(C) = {a} First(A) = {a} First(D) = {a} First(B) = {b} So, Follow(S)={ } Follow(A)= Follow(C)= Follow(D)={a,b, } Follow(B)={a, } S B a A C a b a b Now, propagate b. And, propagate . D a b
12
OPF and LL(1) parsing Back to Parsing …
17/01/2019 OPF and LL(1) parsing Back to Parsing … We want OPF(A, t) = A → ω if either t First(ω), i.e. ω =>* tβ ω =>* ε and t Follow(A), i.e. S =>* A =>* Atβ ω t β A α t β A α ω ε
13
17/01/2019 LL(1) Parsing Definition: Select (A→ ω) = First(ω) U if ω =>* ε then Follow(A) else ø So PT(A, t) = A → ω if t Select(A → ω) Time to call it PT (Parse Table) rather than OPF, because it isn’t omniscient.
14
LL(1) Parsing Grammar is not LL(1)
17/01/2019 LL(1) Parsing First and Follow sets: First (S) = {a, b} Follow (S) = { } First (A) = {a} Follow(A) = {a, b, } First (B) = {b} Follow(B) = {a, } First (C) = {a} Follow (C) = {a, b, } First (D) = {a} Follow(D) = {a, b, } Grammar Selects sets S → ABCD {a, b} B → BC {b} → b {b} A → CDA {a, b, } → a {a} → {a, b, } C → A {a, b, } D → AC {a, b, } not disjoint not pair-wise disjoint Grammar is not LL(1)
15
L(1) parsing Non LL(1) grammar: multiple entries in PT.
17/01/2019 S → ABCD {a, b} B → BC {b} → b {b} A → CDA {a, b, } → a {a} → {a, b, } C → A {a, b, } D → AC {a, b, } L(1) parsing Non LL(1) grammar: multiple entries in PT. PT a b ┴ S S → ABCD S → ABCD A A → CDA, A→ a, A → A → CDA, A → A → CDA,A → B B → BC, B → b C C → A C → A C → A D D → AC D → AC D → AC
16
LL(1) Grammars Definition: A CFG G is LL(1)
17/01/2019 LL(1) Grammars Definition: A CFG G is LL(1) ( Left-to-right, Left-most, (1)-symbol lookahead) iff for all A Ф, and for all productions A→, A → with , Select (A → ) ∩ Select (A → ) = Previous example: grammar is not LL(1). More later on what do to about it.
17
summary Graph Algorithm for First sets Graph algorithm for Follow sets
Select sets Define LL(1) Grammar
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.