0% found this document useful (0 votes)
69 views21 pages

Lesson 17

The document discusses context-free grammars and their applications in language parsing. It defines context-free grammars and describes their components like productions, derivations, parse trees, ambiguity, and how they are used to verify the language generated by a grammar. It also discusses writing grammars, separating lexical and syntactic analysis, and techniques for eliminating ambiguity like rewriting grammars.

Uploaded by

sdfgedr4t
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
69 views21 pages

Lesson 17

The document discusses context-free grammars and their applications in language parsing. It defines context-free grammars and describes their components like productions, derivations, parse trees, ambiguity, and how they are used to verify the language generated by a grammar. It also discusses writing grammars, separating lexical and syntactic analysis, and techniques for eliminating ambiguity like rewriting grammars.

Uploaded by

sdfgedr4t
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 21

LESSON 17

Contents
 Context-Free Grammars
 Formal Definition of a CFG
 Notational Conventions
 Derivations
 Parse Trees and Derivations
 Ambiguity
 Verifying the Language Generated by a Grammar
 Context-Free Grammars Vs Regular Expressions
 Writing a Grammar
 Lexical Vs Syntactic Analysis
 Eliminating Ambiguity
 Elimination of Left Recursion

2
Parse Tree & Derivations
 A parse tree is a graphical representation of a derivation that filters
out the order in which productions are applied to replace non-
terminals .

 Each interior node of a parse tree represents the application of a


production.
 The interior node is labeled with the non-terminal A in the head of
the production.
 The children of the node are labeled, from left to right, by the
symbols in the body of the production by which this A was replaced
during the derivation.

3
Parse Tree & Derivations..
 Ex: -(id + id)

 The leaves of a parse tree are labeled by non-terminals or


terminals and, read from left to right constitute a sentential form,
called the yield or frontier of the tree.

4
Parse Tree & Derivations…
 A derivation starting with a single non-terminal,
A ⇒ α1 ⇒ α2 ... ⇒ αn 
It is easy to write a parse tree with A as the root and αn as the leaves.

 The LHS of each production is a non-terminal in the frontier of the


current tree so replace it with the RHS to get the next tree.

 There can be many derivations that wind up with the same final
tree.
 But for any parse tree there is a unique leftmost derivation the
produces that tree.
 Similarly, there is a unique rightmost derivation that produces the tree.

5
Ambiguity
 A grammar that produces more than one parse tree for some
sentence is said to be ambiguous.

 Alternatively, an ambiguous grammar is one that produces more than


one leftmost derivation or more than one rightmost derivation for the
same sentence.

 Ex Grammar E → E + E | E * E | ( E ) | id

 It is ambiguous because we have seen two parse trees for id + id * id 

6
Ambiguity..
 There must be at least two leftmost derivations.

 So two parse trees are

7
Language Verification
 A proof that a grammar G generates a language L has two parts:

 Show that every string generated by G is in L


 Show that every string in L can indeed be generated by G.

 Ex Grammar S → ( S ) S | ɛ

 Apparently this simple grammar generates all strings of balanced


parentheses, and only such strings.

8
Language Verification..
 To show that every sentence derivable from S is balanced, we use
an inductive proof on the number of steps n in a derivation.

BASIS:
The basis is n = 1 The only string of terminals derivable from S in
one step is the empty string, which surely is balanced.

INDUCTION:
Now assume that all derivations of fewer than n steps produce
balanced sentences, and consider a leftmost derivation of exactly n
steps.

9
Language Verification...
 Such a derivation must be of the form

 The derivations of x and y from S take fewer than n steps, so by the


inductive hypothesis x and y are balanced. Therefore, the string
(x)y must be balanced.

 That is, it has an equal number of left and right parentheses, and
every prefix has at least as many left parentheses as right.

10
Language Verification...
 Now we show that every balanced string is derivable from S

 To do so, we use induction on the length of a string.

BASIS:
If the string is of length 0, it must be ɛ, which is balanced.

INDUCTION:
First, observe that every balanced string has even length.
Assume that every balanced string of length less than 2n is derivable
from S.
Consider a balanced string w of length 2n, n ≥ 1
11
Language Verification...
 Surely w begins with a left parenthesis. Let (x) be the shortest
nonempty prefix of w having an equal number of left and right
parentheses.

 Then w can be written as w = (x)y where both x and y are balanced.


 Since x and y are of length less than 2n, they are derivable from S
by the inductive hypothesis.
 Thus, we can find a following derivation proving that w = (x)y is
also derivable from S

12
CFG Vs RE
 Every construct that can be described by a regular expression can
be described by a grammar, but not vice-versa.

 Alternatively, every regular language is a context-free language,


but not vice-versa.

 Consider RE (a|b)* abb & the grammar

 We can construct mechanically a


grammar to recognize the same
language as a nondeterministic finite automaton (NFA).

13
CFG Vs RE..
 The defined grammar above was constructed from the NFA using
the following construction

1. For each state i of the NFA, create a non-terminal Ai .


2. If state i has a transition to state j on input a add the production
Ai → a Aj If state i goes to state j on input ɛ add the production
Ai → Aj
3. If i is an accepting state, add Ai → ɛ
4. If i is the start state, make Ai be the start symbol of the grammar.

14
Writing a Grammar-Lexical Vs Syntactic Analysis
 Why use regular expressions to define the lexical syntax of a
language?

 Reasons:

 Separating the syntactic structure of a language into lexical and non-


lexical parts provides a convenient way of modularizing the front end
of a compiler into two manageable-sized components.

 The lexical rules of a language are frequently quite simple, and to


describe them we do not need a notation as powerful as grammars.

15
Lexical Vs Syntactic Analysis..
 Regular expressions generally provide a more concise and easier-to-
understand notation for tokens than grammars.

 More efficient lexical analyzers can be constructed automatically


from regular expressions than from arbitrary grammars.

 Regular expressions are most useful for describing the structure of


constructs such as identifiers, constants, keywords, and white
space

16
Lexical Vs Syntactic Analysis..
 Grammars, on the other hand, are most useful for describing
nested structures such as balanced parentheses, matching begin-
end's, corresponding if-then-else's, and so on.

 These nested structures cannot be described by regular expressions.

17
Eliminating Ambiguity
 An ambiguous grammar can be rewritten to eliminate the
ambiguity.

 Ex. Eliminating the ambiguity from the following dangling-else


grammar:

 Compound conditional statement


if E1 then S1 else if E2 then S2 else S3
18
Eliminating Ambiguity..
 Parse tree for this compound conditional statement:

 This Grammar is ambiguous since the following string has the two
parse trees:
if E1 then if E2 then S1 else S2

19
Eliminating Ambiguity…

20
Eliminating Ambiguity…
 We can rewrite the dangling-else grammar with the idea:
 A statement appearing between a then and an else must be matched
that is, the interior statement must not end with an unmatched or
open then.
 A matched statement is either an if-then-else statement containing
no open statements or it is any other kind of unconditional
statement.

21

You might also like