You are on page 1of 48

Context-Free Languages

1
R
n n
{a b } {ww }

Regular Languages

2
Context-Free Languages
R
n n
{a b } {ww }

Regular Languages

3
Context-Free Languages

Context-Free Pushdown
Grammars Automata

stack

automaton

4
Context-Free Grammars

5
Example

A context-free grammar G: S ® aSb


S ®l

A derivation:

S Þ aSb Þ aaSbb Þ aabb


6
A context-free grammar G: S ® aSb
S ®l

Another derivation:

S Þ aSb Þ aaSbb Þ aaaSbbb Þ aaabbb


7
S ® aSb
S ®l

n n
L(G ) = {a b : n ³ 0}

8
Example

A context-free grammar G: S ® aSa


S ® bSb
S ®l

A derivation:

S Þ aSa Þ abSba Þ abba


9
A context-free grammar G: S ® aSa
S ® bSb
S ®l

Another derivation:

S Þ aSa Þ abSba Þ abaSaba Þ abaaba


10
S ® aSa
S ® bSb
S ®l

R
L(G ) = {ww : w Î{a, b}*}

11
Example

A context-free grammar G: S ® aSb


S ® SS
S ®l

A derivation:

S Þ SS Þ aSbS Þ abS Þ ab
12
A context-free grammar G: S ® aSb
S ® SS
S ®l

A derivation:

S Þ SS Þ aSbS Þ abS Þ abaSb Þ abab


13
S ® aSb
S ® SS
S ®l

L(G ) = {w : na ( w) = nb ( w),
and na (v) ³ nb (v)
in any prefix v}

14
Definition: Context-Free Grammars

Grammar G = (V , T , S , P )

Variables Terminal Start


symbols variables

Productions of the form:


A ®a
a is string of variables and terminals 15
Notation: Context-Free Grammars

• Lower case letters near beginning of alphabet


(e.g. a, b, c, …) are terminal symbols
• Upper case letters near beginning of alphabet
(e.g. A, B, C, …) are variables
• Lower case letters near end of alphabet
(e.g. w, x, …) are strings of terminals
• Upper case letters near end of alphabet
(e.g. X, Y, …) are either terminals or strings
• Lower case Greek letters
(e.g. α, β, γ, …) are strings of terminals and/or
variables
16
Definition: Context-Free Languages

A language L is context-free

if and only if

there is a grammar G with L = L(G )

17
Recall
Language of a Grammar
For a grammar G
with start variable S :

*
L(G ) = {w : S Þ w}

String of terminals
18
Derivation Order
1. S ® AB 2. A ® aaA 4. B ® Bb
3. A ® l 5. B ® l
Leftmost derivation:
1 2 3 4 5
S Þ AB Þ aaAB Þ aaB Þ aaBb Þ aab
Rightmost derivation:
1 4 5 2 3
S Þ AB Þ ABb Þ Ab Þ aaAb Þ aab
19
S ® aAB
A ® bBb
B ® A|l
Leftmost derivation:
S Þ aAB Þ abBbB Þ abAbB Þ abbBbbB
Þ abbbbB Þ abbbb
Rightmost derivation:
S Þ aAB Þ aA Þ abBb Þ abAb
Þ abbBbb Þ abbbb 20
Derivation Trees

21
S ® AB A ® aaA | l B ® Bb | l

S Þ AB
S

A B

22
S ® AB A ® aaA | l B ® Bb | l

S Þ AB Þ aaAB
S

A B

a a A

23
S ® AB A ® aaA | l B ® Bb | l

S Þ AB Þ aaAB Þ aaABb
S

A B

a a A B b

24
S ® AB A ® aaA | l B ® Bb | l

S Þ AB Þ aaAB Þ aaABb Þ aaBb


S

A B

a a A B b

l 25
S ® AB A ® aaA | l B ® Bb | l

S Þ AB Þ aaAB Þ aaABb Þ aaBb Þ aab


Derivation Tree S

A B

a a A B b

l l 26
S ® AB A ® aaA | l B ® Bb | l

S Þ AB Þ aaAB Þ aaABb Þ aaBb Þ aab


Derivation Tree S

A B
yield

a a A B b aallb
= aab
l l 27
Partial Derivation Trees
S ® AB A ® aaA | l B ® Bb | l

S Þ AB
Partial derivation tree S

A B

28
S Þ AB Þ aaAB

Partial derivation tree S

A B

a a A

29
sentential
S Þ AB Þ aaAB form

Partial derivation tree S

A B

yield
a a A
aaAB
30
Sometimes, derivation order doesn’t matter
Leftmost:
S Þ AB Þ aaAB Þ aaB Þ aaBb Þ aab
Rightmost:
S Þ AB Þ ABb Þ Ab Þ aaAb Þ aab
S
Same derivation tree
A B

a a A B b

l l 31
Ambiguity

32
E ® E + E | E * E | (E) | a
a + a*a

E E Þ E + E Þ a+ E Þ a+ E*E
Þ a + a* E Þ a + a*a
E + E
leftmost derivation

a E * E

a a 33
E ® E + E | E * E | (E) | a
a + a*a

E Þ E*E Þ E + E*E Þ a+ E*E E


Þ a + a*E Þ a + a*a
E * E
leftmost derivation

E + E a

a a 34
E ® E + E | E * E | (E) | a
a + a*a
Two derivation trees
E E

E + E E * E

a E * E E + E a

a a a a 35
The grammarE ® E + E | E * E | (E) | a
is ambiguous:

string a + a * a has two derivation trees

E E

E + E E * E

a E * E E + E a

a a a a
36
The grammarE ® E + E | E * E | (E) | a
is ambiguous:

string a + a * a has two leftmost derivations

E Þ E + E Þ a+ E Þ a+ E*E
Þ a + a* E Þ a + a*a

E Þ E*E Þ E + E*E Þ a+ E*E


Þ a + a*E Þ a + a*a 37
Definition:
A context-free grammar G is ambiguous

if some string wÎ L(G ) has:

two or more derivation trees

38
In other words:

A context-free grammar G is ambiguous

if some string wÎ L(G ) has:

two or more leftmost derivations


(or rightmost)

39
Why do we care about ambiguity?

a + a*a
take a=2
E E

E + E E * E

a E * E E + E a

a a a a 40
2 + 2*2

E E

E + E E * E

2 E * E E + E 2

2 2 2 2 41
2 + 2*2 = 6 2 + 2*2 = 8
6 8
E E
2 4 4 2
E + E E * E
2 2 2 2
2 E * E E + E 2

2 2 2 2 42
Correct result: 2 + 2*2 = 6

6
E
2 4
E + E
2 2
2 E * E

2 2
43
• Ambiguity is bad for programming languages

• We want to remove ambiguity

44
We fix the ambiguous grammar:
E ® E + E | E * E | (E) | a

New non-ambiguous grammar: E ® E +T


E ®T
T ®T *F
T ®F
F ® (E)
F ®a 45
E Þ E +T ÞT +T Þ F +T Þ a +T Þ a +T *F
Þ a + F *F Þ a + a*F Þ a + a*a
E a + a*a
E ® E +T
E + T
E ®T
T ®T *F T T * F
T ®F
F F a
F ® (E)
F ®a a a
46
Unique derivation tree

E a + a*a
E + T

T T * F

F F a

a a
47
The grammar G: E ® E +T
E ®T
T ®T *F
T ®F
F ® (E)
F ®a
is non-ambiguous:
Every string wÎ L(G ) has
a unique derivation tree
48

You might also like