Download presentation
Presentation is loading. Please wait.
Published byPauline Hubbard Modified over 9 years ago
1
Context Free Grammar
2
Introduction Why do we want to learn about Context Free Grammars? Used in many parsers in compilers Yet another compiler-compiler, yacc GNU project parser generator, bison Web application In describing the formats of XML (eXtensible Markup Language) documents
3
Context Free Grammar G = (V, T, P, S) V – a set of variables, e.g. {S, A, B, C, D, E} T – a set of terminals, e.g. {a, b, c} P – a set of productions rules In the form of A , where A V, (V T)* e.g. S aB S is a special variable called the start symbol
4
CFG – Example 1 Construct a CFG for the following language : L 1 ={0 n 1 n | n>0} Thought: If is a string in L 1, so is 0 1, i.e. 0 k+1 1 k+1 = 0(0 k 1 k )1 S 01 | 0S1
5
CFG – Example 2 Construct a CFG for the following language : L 2 ={0 i 1 j | i j and i, j>0} Thought: Similar to L1, but at least one more ‘1’ or at least one more ‘0’ S AC | CB A 0A | 0 B B1 | 1 C 0C1 |
6
CFG – Example 3 Determine the language generated by the CFG: S AS | A A1 | 0A1 | 01 S generates consecutive ‘A’s A generates 0 i 1 j where i j Languages: each block of ‘0’s is followed by at least as many ‘1’s
7
Derivation How a string is generated by a grammar G Consider the grammar G S AS | A A1 | 0A1 | 01 S 0110011 ?
8
Derivation A S S A S A 1 0 101 A 01 S AS A1S 011S 011AS 0110A1S 0110011S 0110011 S AS AAS AA A0A1 A0011 A10011 0110011 Parse Tree or Derivation Tree Leftmost Derivation Rightmost Derivation
9
Ambiguity Each parse tree has one unique leftmost derivation and one unique rightmost derivation. A grammar is ambiguous if some strings in it have more than one parse trees, i.e., it has more than one leftmost derivations (or more than one rightmost derivations).
10
Ambiguity Consider the following grammar G: S AS | a | b A SS | ab A string generated by this grammar can have more than one parse trees. Consider the string abb: b a AS SS b S AS ab b S
11
Ambiguity As another example, consider the following grammar: E E + E | E * E | (E) | x | y | z There are 2 leftmost derivations for x + y + z: E E + E x + E x + E + E x + y + E x + y + z E E + E E + E + E x + E + E x + y + E x + y + z E + E x y + z E E + E xy E z +
12
Simplification of CFG Remove useless variables Generating Variables Reachable Variables Remove -productions, e.g. A Remove unit-productions, e.g. A B
13
A variable X is useless if: X does not generate any string of terminals, or The start symbol, S, cannot generate X. S X where , (V T)*, X V and T* Useless Variables
14
Removal of Non-generating Variables 1 Mark each production of the form: X where T* Repeat Mark X where consists of terminals or variables which are on the left hand side of some marked productions. Until no new productions is marked. 3 Remove all unmarked productions.
15
Example CFG: S AB|CA A a B BC|AB C aB|b S CA A a C b
16
Example CFG: S aAa|aB A aS|bD B aBa|b C abb|DD D aDa S aAa|aB A aS B aBa|b C abb
17
Removal of Non-Reachable Variables 1 Mark each production of the form: S where (V T)* Repeat Mark X where X appears on the right hand side of some marked productions. Until no new productions is marked. 3 Remove all unmarked productions.
18
Example CFG: S aAa|aB A aS B aBa|b C abb S aAa|aB A aS B aBa|b
19
Example CFG: S Aab|AB A a B bD | bB C A | B D a S Aab|AB A a B bD | bB D a
20
Remove Useless Variables A Bac|bTC|ba T aB|TB B aTB|bBC C TBc|aBC|ac A ba C ac A ba
21
Removal of -productions Step 1: Find nullable variables Step 2: Remove all -productions by replacing some productions
22
How to find nullable variables ? 1 Mark all variables A for which there exists a production of the form A . 2 Repeat Mark X for which there exists X where V* and all symbols in have been marked. Until no new variables is marked.
23
Removal of -Productions We can remove all -productions (except S if S is nullable) by rewriting some other productions. e.g., If X 1 and X 3 are nullable, we should replace A X 1 X 2 X 3 X 4 by: A X 1 X 2 X 3 X 4 | X 2 X 3 X 4 | X 1 X 2 X 4 | X 2 X 4
24
Removal of -productions Example: S A | B | C A aAa | B B bB | bb C aCaa | D D baD | abD | Step1: nullable variables are D, C and S
25
Removal of -productions(3) Step 2: eliminate D by replacing : D baD | abD into D baD | abD | ba | ab eliminate C by replacing : C aCaa | D into C aCaa | D | aaa S A | B | C into S A | B | C | The new grammar: S A | B | C | A aAa | B B bB | bb C aCaa | D | aaa D baD | abD | ba | ab Example: S A | B | C A aAa | B B bB | bb C aCaa | D D baD | abD |
26
Example S ABCD A a B C ED | D BC E b S ABCD|ABC|ABD|ACD|AB|AC|AD|A A a C ED|E D BC|B|C E b
27
Removal of Unit Productions Unit production: A B, where A and B V 1. Detect cycles of unit productions: A1 A2 A3 … A1 A1 A2 A3 … A1 Replaced A 1, A 2, A 3, …, A k by any one of them 2. Detect paths of unit productions: A 1 A 2 A 3 …, A k , where (V T)*/V Add productions A 1 , A 2 , …, A k and remove all the unit productions
28
Removal of Unit Productions Example: S A | B | C A aa | B B bb | C C cc | A Cycle: A B C A Remove by replace B,C by A S A | A | A A aa | A A bb | A A cc | A Becomes: S A A aa | bb | cc Path: S A Remove by adding productions S aa | bb | cc
29
Example CFG : S → A | Bb A → C | a B → aBa | b C → aSa S → Bb | aSa |a → A → a | aSa B → aBa | b C → aSa
30
Example Substitute
31
Remove Unit productions of form can be removed immediately Example
32
Substitute
33
Example Remove repeated productions Final grammar
34
Thank You
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.