0% found this document useful (0 votes)
44 views

Chapter 12: Context-Free Grammars

This document discusses context-free grammars and provides examples. It defines a context-free grammar as having an alphabet, set of nonterminals including a start symbol S, and productions. Productions take the form of replacing a nonterminal with terminals and/or nonterminals. The language generated is the set of strings derived from S. Examples demonstrate derivations, parse trees, and ambiguity.

Uploaded by

Asad
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
44 views

Chapter 12: Context-Free Grammars

This document discusses context-free grammars and provides examples. It defines a context-free grammar as having an alphabet, set of nonterminals including a start symbol S, and productions. Productions take the form of replacing a nonterminal with terminals and/or nonterminals. The language generated is the set of strings derived from S. Examples demonstrate derivations, parse trees, and ambiguity.

Uploaded by

Asad
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

Chapter 12: Context-Free Grammars ∗

Peter Cappello
Department of Computer Science
University of California, Santa Barbara
Santa Barbara, CA 93106
[email protected]

• The corresponding textbook chapter should be read before attending


this lecture.
• These notes are not intended to be complete. They are supplemented
with figures, and other material that arises during the lecture period
in response to questions.

Based on Theory of Computing, 2nd Ed., D. Cohen, John Wiley & Sons, Inc.

1
Symbolism for Generative Grammars
• The book chapter gives a good explanation of the background and
reason for studying this material.
• A generative grammar is a grammar with which one can generate
all the words (sentences) in a language.

2
Definition A context-free grammar (CFG) is a collection of 3 things:

• An alphabet Σ of letters called terminals.


• A set of symbols called nonterminals, 1 of which is the symbol
S, the “start” symbol.
• A finite set of productions of the form

N onterminal → (terminals + nonterminals)∗


At least 1 production has S as its left side.

By convention, we use:

• lower case letters and special symbols for terminals


• upper case letters for nonterminals.

3
Definition The language generated by a CFG is the set of all strings
of terminals produced from S using productions as substitutions.
A language generated by a CFG is a context-free language (CFL).

4
Example
Production 1 S → aS
Production 2 S → Λ
Applying production 1 two times, followed by production 2, yields:
S ⇒ aS
⇒ aaS
⇒ aaΛ
= aa
• The language generated by this CFG is a∗.
• → means “can be replaced by”.
• ⇒ (used in a derivation) means “can develop into”.
• A derivation’s right hand side (RHS) is a working string when it
contains nonterminals.

5
Example
Define a CFG that accepts (a + b)∗.

S → aS
S → bS
S→Λ

6
Example
Define a CFG that accepts (a + b)∗aa(a + b)∗.

S → XaaX
X → aX
X → bX
X→Λ

Give a derivation of ababaaaba.

7
Example
Define a CFG that accepts {anbn}.

S → aSb
S→Λ
Equivalently:
S → aSb | Λ

• Give a derivation of aaabbb.


• Define a CFG that accepts palindromes over {a, b}. (It should include
strings such as aba.)

8
Trees
Given the CFG

S → AA
A → AAA|bA|Ab|a

• Derive the word bbaaaab: S ⇒ AA ⇒ bAA ⇒ bbAA ⇒ bbaA ⇒


bbaAAA ⇒ bbaaAA ⇒ bbaaaA ⇒ bbaaaAb ⇒ bbaaaab
• Draw the tree corresponding to this derivation.
• Such a tree is called a syntax tree or parse tree.

9
Lukasiewicz Notation
• Consider the CFG:

S → +| ∗ |n
+ → + + | + ∗| + n| ∗ +| ∗ ∗| ∗ n|n + |n ∗ |n n
∗ → + + | + ∗| + n| ∗ +| ∗ ∗| ∗ n|n + |n ∗ |n n
n → 1|2|3|4|5|6|7|8|9

• One possible derivation is S ⇒ + ⇒ 3 ∗ ⇒ 3 4 5.


• Write the parse tree for this is on the board.
• From the parse tree construct the prefix notation by walking around
the tree, writing down the symbols in the order in which they are first
visited (excluding S): + 3 ∗ 4 5.

10
• Think of these items as having been pushed on a stack in the order of
visitation.
• To evaluate the expression, when the top 2 items are numbers:

1. pop the top 3 items


2. evaluate that expression (e.g., + 35 evaluates to 8)
3. push the resulting value on the stack

Continue until the stack contains only 1 number.


• Do this for our string of + 3 ∗ 4 5.
• Do this for the following tree (((1 + 2) ∗ (3 + 4)) + 5) ∗ 6. (Its value
should be 156.)

11
Ambiguity
Definition: A CFG G is ambiguous if there exists a w ∈ L(G) with
2 derivations that correspond to different parse trees.
If a CFG is not ambiguous it is unambiguous.
Example Let CFG G be S → aS|Sa|a, the regular language aa∗.
The word aa has 2 derivations:
• S ⇒ Sa ⇒ aa
• S ⇒ aS ⇒ aa
distinct with a distinct parse tree.
However a+ can be defined by S → aS|a, which is not ambiguous.

12
The Total Language Tree
Definition: For a given CFG, define a tree:
• Its root is S
• For each nonterminal node in the tree,
For each nonterminal, N at that node, construct a child node in
the tree for each production with N as the LHS.
Example Let CFG G be:
S → aa|bX|aXX
X → ab|b
• What is the total language tree for this CFG?
• What is the total language tree for S → Λ|aSb ?

13

You might also like