Context-Free Grammars – Derivations Lecture 15 Section 2.1 Mon, Sep 24, 2007
Context-Free Grammars A context-free grammar is a grammar whose rules have the following properties: The left-hand is a single variable. The right-hand side is any string of variables and terminals.
Example Let V and be V = {E}, = {a, b, c, +, *, (, )}. Let R be E E + E | E * E | (E) | a | b | c
Examples Find CFGs for the following languages. {a n b n | n 0} {a n b m | n m 0} {a n b m | m n 0}
Equal No. of a’s and b’s Find CFGs for the language {w | w contains an equal number of a’s and b’s}
Equal No. of a’s and b’s Let w be a string with an equal number of a’s and b’s. There are four cases: w = aza w = azb w = bza w = bzb.
Equal No. of a’s and b’s In each case, what do we know about z?
Equal No. of a’s and b’s In the cases azb and bza, z is again a string with an equal number of a’s and b’s.
Equal No. of a’s and b’s In the cases aza and bzb, the string w must necessarily split into a concatenation of strings w 1 w 2, where w 1 and w 2 each have an equal number of a’s and b’s. Why?
Derivations A string u yields a string v if we can apply a grammar rule to u and get v. We write u v.
Derivations We say that u derives v if there is a sequence u 1, u 2, …, u k (k 0), where u = u 1, v = u k, and u 1 u 2 … u k. We write u * v. The sequence is called a derivation.
Leftmost and Rightmost Derivations A leftmost derivation is a derivation in which, at each step, the leftmost variable is replaced with a string. Similarly for a rightmost derivation.
Example Using the grammar S SS | aSb | bSa | find leftmost and rightmost derivations of abab.
Ambiguity Some grammars provide more than one way to derive a string. For example, abab can be derived in two different ways using the grammar rules S SS | aSb | bSa | (Typically the leftmost and rightmost derivations are different.)
Ambiguity If a language contains a string that has more than one leftmost derivation, then the grammar is ambiguous. If every grammar for a language is ambiguous, then the language is inherently ambiguous.
Ambiguity Consider again the grammar rules S SS | aSb | bSa | Suppose that, for every string, we need to associate with each a a unique b. Does the grammar show us how to do this?
Ambiguity Consider the grammar E E + E | E * E | (E) | a | b | c Derive the string a + b * c in two different ways. Is this grammar ambiguous? Is this language inherently ambiguous?
Ambiguity See Example 2.4 on p. 103 an unambiguous grammar for this language.