A CFG may have a production for a nonterminal in which the right hand side is the empty string (which we denote by epsilon). The effect of this production is to remove the nonterminal from the string being generated.
Here is a grammar for balanced parentheses that uses epsilon productions.
1. P: ( P ) 2. P: P P 3. P: epsilon
We begin with the string P. We can replace P with epsilon, in which case we have generated the empty string (which does have balanced parentheses). Alternatively, we can generate a string of balanced parentheses within a pair of balanced parentheses, which must result in a string of balanced parentheses. Alternatively, we can concatenate two strings of balanced parentheses, which again must result in a string of balanced parentheses.
This grammar is equivalent to:
We use the notational shorthand '|', which can be read as "or", to represent multiple rewriting rules within a single line.
<program>: <letter*> m a i n <letter*> <letter*>: <letter> <letter*> | epsilon <letter>: A | B | ... | Z | a | b | ... | z
A CFG describing real numbers in Pascal:
<real>: <sign> <digit> <digit*> <decimal part> <exp> <digit*>: <digit> <digit*> | epsilon <decimal part>: '.' <digit> <digit*> | epsilon <exp>: 'E' <sign> <digit> <digit*> | epsilon <sign>: + | - | epsilon <digit>: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Last modified: 27/July/98 (12:14)