This document discusses parsing and context-free grammars. It defines parsing as verifying that tokens generated by a lexical analyzer follow syntactic rules of a language using a parser. Context-free grammars are defined using terminals, non-terminals, productions and a start symbol. Top-down and bottom-up parsing are introduced. Techniques for grammar analysis and improvement like left factoring, eliminating left recursion, calculating first and follow sets are explained with examples.
What is Parsing?
•In the syntax analysis phase, a compiler verifies
whether or not the tokens generated by the lexical
analyzer are grouped according to the syntactic
rules of the language.
• This is done by a parser.
• It detects and reports any syntax errors and
produces a parse tree from which intermediate code
can be generated.
Context-Free Grammars
• Terminals- Basic symbols from which strings are
formed.
• Non-terminals - Syntactic variables that denote sets
of strings.
• Start Symbol - Denotes the nonterminal that
generates strings of the languages
• Productions - A = X … X
- Head/left side (A) is a nonterminal
- Body/right side (X … X) zero or more terminals and non-
terminals
CFG Notation
• A,B, C: non-terminals
• l: terminals
• a, b, c: strings of non-terminals and terminals
• (alpha, beta, gamma in math)
• w, v: strings of terminal symbols
7.
Derivations
• Derivation -derives in zero or
more steps
• E =>* "-" "(" ID "+" ID ")"
• Derivation step: replace symbol
by RHS of production.
• Repeatedly apply derivations
Types of Parser
•The process of deriving the string from the given
grammar is known as derivation (parsing).
• Depending upon how derivation is done we have
two kinds of parsers :-
• Top Down Parser
• Bottom Up Parser
10.
Top Down Parser
•Top down parsing
attempts to build the
parse tree from root to
leave.
• Top down parser will start
from start symbol and
proceeds to string.
• It follows leftmost
derivation.
11.
Bottom Up Parser
•Bottom-up parsing starts from
the leaf nodes of a tree and
works in upward direction till it
reaches the root node.
• Here, we start from a
sentence and then apply
production rules in reverse
manner in order to reach the
start symbol.
Left Factoring -Examples
Consider the following grammar:-
• S → iEtS / iEtSeS / a
• E → b
Solution:-
• S → iEtSS’ / a
• S’ → eS / ∈
• E → b
14.
Left Factoring -Examples
Consider the following grammar:-
• A → aAB / aBc / aAc
Solution:-
• A → aA’
• A’ → AB / Bc / Ac // This has to done again
• A → aA’
• A’ → AD / Bc
• D → B / c
15.
Left Factoring -Examples
Consider the following grammar:-
• S → aAd / aB
• A → a / ab
• B → ccd / ddc
Solution:-
• S → aS’
• S’ → Ad / B
• A → aA’
• A’ → b / ∈
Left Recursion -Examples
Consider the following grammar -
• A → ABd / Aa / a
• B → Be / b
The grammar after eliminating left recursion is-
• A → aA’
• A’ → BdA’ / aA’ / ∈
• B → bB’
• B’ → eB’ / ∈
18.
Left Recursion -Examples
Consider the following grammar and eliminate left
recursion-
• E → E + E / E x E / a
The grammar after eliminating left recursion is-
• E → aA
• A → +EA / xEA / ∈
19.
Left Recursion -Examples
• Consider the following grammar and eliminate left
recursion-
• E → E + T / T
• T → T x F / F
• F → id
• E → E + T
• E → T
• T → T x F
• T → F
• F → id
OR
20.
Left Recursion -Examples
The grammar after eliminating left recursion is-
• E → TE’
• E’ → +TE’ / ∈
• T → FT’
• T’ → xFT’ / ∈
• F → id
21.
First & Follow
•FIRST(X) for a grammar symbol X is the set of
terminals that begin the strings derivable from X.
• Follow(X) to be the set of terminals that can appear
immediately to the right of Non-Terminal X in some
sentential form.
• Why calculate FIRST?
– It is useful to calculate FOLLOW.
– Both are useful in parsing (both Top-Down and Bottom-
Up)
22.
First & FollowRules
Rules to compute FIRST set:-
• If x is a terminal, then FIRST(x) = { ‘x’ }
• If x-> Є, is a production rule, then add Є to
FIRST(x).
• If X->Y1 Y2 Y3….Yn is a production, then FIRST(X) =
FIRST(Y1)
• If FIRST(Y1) contains Є then FIRST(X) = {
FIRST(Y1) – Є } U { FIRST(Y2) }
• If FIRST (Yi) contains Є for all i = 1 to n, then add Є
to FIRST(X).
23.
First - Examples
Calculatethe first functions for the given grammar-
• S → aBDh
• B → cC
• C → bC / ∈
• D → EF
• E → g / ∈
• F → f / ∈
24.
First - Examples
•First(S) = { a }
• First(B) = { c }
• First(C) = { b , ∈ }
• First(D) = { First(E) – ∈ } ∪ First(F) = { g , f , ∈}
• First(E) = { g , ∈ }
• First(F) = { f , ∈ }
25.
First - Examples
Calculatethe first functions for the given grammar-
• S → A
• A → aB / Ad
• B → b
• C → g
26.
First - Examples
•First(S) = First(A) = { a }
• First(A) = { a }
• First(A’) = { d , ∈ }
• First(B) = { b }
• First(C) = { g }
27.
First & FollowRules
Rules to compute FOLLOW set:-
• Follow(S) = {$} where S is the start symbol.
• If A->pBq is a production where p, B, q any
grammar symbols then everything in FIRST(q)
except Є is in FOLLOW(B).
• If A->pB is a production or a production A->pBq
where FIRST(q) contains Є then everything in
FOLLOW(A) is in FOLLOW(B).
28.
Follow - Examples
Calculatethe follow functions for the given grammar-
• S → aBDh
• B → cC
• C → bC / ∈
• D → EF
• E → g / ∈
• F → f / ∈
29.
Follow - Examples
•Follow(S) = { $ }
• Follow(B) = { First(D) – ∈ } ∪ First(h) = { g , f , h }
• Follow(C) = Follow(B) = { g , f , h }
• Follow(D) = First(h) = { h }
• Follow(E) = { First(F) – ∈ } ∪ Follow(D) = { f , h }
• Follow(F) = Follow(D) = { h }
30.
Follow - Examples
Calculatethe follow functions for the given grammar-
• S → A
• A → aB / Ad
• B → b
• C → g
First & Follow- Examples
• Calculate the first and follow functions for the
given grammar-
• S → AaAb / BbBa
• A → ∈
• B → ∈
33.
First & Follow- Examples
• First(S) = { First(A) – ∈ } ∪ First(a) ∪ { First(B) – ∈
} ∪ First(b) = { a , b }
• First(A) = { ∈ }
• First(B) = { ∈ }
• Follow(S) = { $ }
• Follow(A) = First(a) ∪ First(b) = { a , b }
• Follow(B) = First(b) ∪ First(a) = { a , b }
34.
First & Follow- Examples
Calculate the first and follow functions for the given
grammar-
• E → E + T / T
• T → T x F / F
• F → (E) / id
35.
First & Follow- Examples
• The given grammar is left recursive.
After eliminating left recursion, we get -
• E → TE’
• E’ → + TE’ / ∈
• T → FT’
• T’ → x FT’ / ∈
• F → (E) / id
36.
First & Follow- Examples
• First(E) = First(T) = First(F) = { ( , id }
• First(E’) = { + , ∈ }
• First(T) = First(F) = { ( , id }
• First(T’) = { x , ∈ }
• First(F) = { ( , id }