Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Normal Forms For Context Free Grammars

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 54

Normal forms for Context-

Free Grammars
Context-Free Grammar
 In linguistics and computer science, a context-free grammar
(CFG) is a formal grammar in which every production rule is of
the form
V→w

where V is a “non-terminal symbol” and w is a “string” consisting


of terminals and/or non-terminals.

 The term "context-free" expresses the fact that the non-terminal


V can always be replaced by w, regardless of the context in
which it occurs.

 A formal language is context-free if there is a context-free


grammar that generates it.
Example 1

 A simple context-free grammar is given as:


S→aSb|ε

 where | is used to separate multiple options


for the same non-terminal, and ε stands for
the empty string. This grammar generates the
language { an bn : n >= 0 } , which is not
regular.
Regular languages
 A regular language is a formal language (i.e., a
possibly infinite set of finite sequences of symbols
from a finite alphabet) that satisfies the following
equivalent properties:

 it can be accepted by a deterministic finite state


machine
 it can be accepted by a nondeterministic finite state
machine
 it can be accepted by an alternating finite automaton
 it can be described by a regular expression
 it can be generated by a regular grammar
 it can be generated by a prefix grammar
Regular languages

The collection of regular languages over an


alphabet Σ is defined recursively as follows:
 the empty language Ø is a regular language.
 the empty string language { ε } is a regular
language.
 For each a є Σ, the singleton language { a } is a
regular language.
 If A and B are regular languages, then A ∩ B
(union), A ○ B (concatenation), and A* (Kleene star)
are regular languages.
 No other languages over Σ are regular.
Finite languages

Finite languages are:


 A specific subset within the class of regular

languages is the finite languages - those


containing only a finite number of words.
These are obviously regular as one can
create a regular expression that is the union
of every word in the language, and thus are
regular.
Example 2
 A context-free grammar for the language consisting
of all strings over {a,b} which contain a different
number of a's to b's is
 S→U|V
 U → TaU | TaT
 V → TbV | TbT
 T → aTbT | bTaT | ε

 Here, T can generate all strings with the same


number of a's as b's, U generates all strings with
more a's than b's and V generates all strings with
fewer a's than b's.
Example 3

Another example of a context-free language


is
This is not a regular language, but it is
context free as it can be generated by the
following context-free grammar:

 S → b S bb | A
 A→aA|ε
Normal forms
 Every context-free grammar that does not generate the empty
string can be transformed into an equivalent one in Chomsky
normal form or Greibach normal form. "Equivalent" here means
that the two grammars generate the same language.

 Because of the especially simple form of production rules in


Chomsky Normal Form grammars, this normal form has both
theoretical and practical implications.

 For instance, given a context-free grammar, one can use the


Chomsky Normal Form to construct a polynomial-time algorithm
which decides whether a given string is in the language
represented by that grammar or not (the CYK algorithm).
Properties of context-free languages

 An alternative and equivalent definition of context-


free languages employs non-deterministic push-
down automata: a language is context-free if and
only if it can be accepted by such an automaton.
 A language can also be modeled as a set of all
sequences of terminals which are accepted by the
grammar. This model is helpful in understanding set
operations on languages.
 The union and concatenation of two context-free
languages is context-free, but the intersection need
not be.
 The reverse of a context-free language is context-
free, but the complement need not be.
Properties of context-free languages

 Every regular language is context-free because it


can be described by a regular grammar.
 The intersection of a context-free language and a
regular language is always context-free.
 There exist context-sensitive languages which are
not context-free.
 To prove that a given language is not context-free,
one may employ the pumping lemma for context-
free languages.
 The problem of determining if a context-sensitive
grammar describes a context-free language is
undecidable.
Normal forms for Context-Free
Grammars

The goal is to show that every CFL (without ε)


is generated by a CFG in which all
productions are of the form A  BC or A  a,
where A, B, C are variables, and a is a
terminal.
Normal forms for Context-Free
Grammars
 A number of simplifications is inevitable:
1. The elimination of useless symbols,
“variables or terminals that do not appear in
any derivation of a terminal string from the
start symbol”.
2. The elimination of ε-productions, those of the
form A  ε for some variable A.
3. The elimination of unit productions, those of
the form A  B for variables A and B.
Eliminating useless symbols
 A symbol X is useful for Grammar
G = {V, T, P, S}, if there is some derivation of
the form S ═>* a X b ═>* w , where w є T*

 X є V or X є T

 The sentential form of a X b might be the


first or last derivation

 If X is not useful, then X is useles


Eliminating useless symbols
 Characteristics of useful symbols (for instance X):

1. X is generating if X ═>* w for some terminal


string w. Every terminal is generating since w can
be that terminal itself, which is derived by 0 steps.

2. X is reachable if there is a derivation


S ═>* a X b for some a and b.

A symbol which is useful is surely to be both


generating and reachable.
Eliminating useless symbols
Eliminating useless symbols

 Example 7.1
 If we have the following grammar:
Eliminating useless symbols

 Example 7.1
 Notice that a and b generate themselves
“terminals”, S generates a, and A
generates b. B is not generating.
 After eliminating B:
Eliminating useless symbols
 Example 7.1
 Notice that only S and a are reachable after
eliminating the non-generating B.
 A is not reachable; so it should be eliminated.
 The result :

 This production itself is a grammar that has the


same result, which is {a}, as the original
grammar.
Eliminating ε-productions
 The strategy is to have the following:
if L is CFG, then L – {ε} is also CFG

 This is done through discovering the nullable


variables. A variable for instance A, is
nullable if: A ═>* ε .

 Whenever A appears in a production body,


A might or might not derive ε
Eliminating ε-productions
 Theorem: For any grammar G, the only nullable symbols
are the variables that derive ε in previous algorithm
 Proof:
for one step : A  ε must be a production, then this implies
that A is discovered as nullable (as in basis).
for N > 1 steps: the first step is A  C1 C2 … Ck  ε , each
Ci derives ε by a sequence < N steps.
By the induction, each Ci is discovered by the algorithm to
be nullable. So by the inductive step, A is eventually found
to be nullable.
Eliminating unit productions
 The last part concerns the eliminating of unit
productions

 Any production of the form A  B , where A


and B are variables, is called a unit
production.

 These production introduce extra steps in the


derivations that obviously are not needed in
there.
Eliminating unit productions

 Example 7.12
Eliminating unit productions

 Example 7.12
Eliminating unit productions

 Example 7.12
After eliminating the unit productions, the generated
grammar is:

This grammar has no unit productions and still


generates the same expressions as the previous one.
Chomsky Normal Form
Conclusion of all three elimination stages:

Theorem: If G is a CFG which generates a


language that consists of at least one string
along with ε, then there is another CFG G1
such that:
L{G1} = L{G} – {ε} , “no ε-productions”, and G1
has neither unit productions nor useless
symbols
Chomsky Normal Form
 Proof: Start by performing the elimination of
ε-productions. Then perform the elimination
of unit productions, so the resulting grammar
won’t introduce any ε-productions since the
new bodies are still identical to some bodies
of the old grammar. Finally, perform the
elimination of useless symbols, and since this
eliminates productions and symbols, it will
never reintroduce any ε-productions nor unit
productions
Chomsky Normal Form

Every nonempty CFL without ε has grammar G in


which all productions are in one of the following
forms:
 A  BC , where A, B, and C are variables or
 A  a , where A is a variable and a is a terminal

 Also G doesn’t contain any useless symbols

 A grammar complying to these forms is called a


Chomsky Normal Form (CNF).
Chomsky Normal Form

 Example 7.15
Chomsky Normal Form

 Example 7.15
 First: we introduce new variables to represent
terminals:
Chomsky Normal Form
 Example 7.15
 Second: We make all bodies either a single
terminal or multiple variables:
Chomsky Normal Form
 Example 7.15
 Last step: we make all bodies either a single
terminal or two variables:

You might also like