Consider Context-Free Languages (CFLs) and
, and assume that
for some Context-Free Grammar (CFG)
and
for some CFG
. Note that both the CFGs share the same alphabet
.
Context-Free Languages are closed under the following operations
Union
Consider the following grammar
Then , and therefore CFLs are closed under union. In essence, we are adding a new start variable
and the new start variable can go to either of
or
.
Concatenation
Consider the following grammar
Then , and therefore CFLs are closed under concatenation. In essence, we are adding a new start variable
and the new start variable goes to
.
Kleene Star
Consider the following grammar
Then , and therefore CFLs are closed under star. In essence, we are adding a new start variable and the new start variable
goes to
.
For the following operations, consider a CFL , and assume that
for some CFG
in Chomsky Normal Form.
Reversal
When ,
; and
.
For example, let . Then
.
A derivation of a string in this grammar can be visualized as a binary parse tree, with the left-right traversal of leaves of the tree generating the string that is derived. A right-left traversal of the leaves of the same tree will generate
. Thus a mirror image of the parse tree will generate the reverse of a string. So the following grammar will generate all strings in
.
Form a CFG where
is determined as follows
is in
if and only if it is in
.
- For
and
,
is in
if and only if it is in
.
- For
,
is in
if and only if
is in
.
Then , so
is context-free.
Prefix
When ,
; and
.
For example, let . Then
.
Suppose that has no useless variables, and form a CFG
where
and
is determined as follows
is in
.
- For
and
,
is in
if and only if
is in
.
- For
,
is in
if and only if it
in
.
Then , so
is context-free.
To explain this, the original variables generate what they did before. The primed variables generate prefixes of what the original variables generated. We need to keep both because if we had ,
derives
, and
derives
so that
derives
, there may be strings in
that are not in
. In fact
.
Subsequence
When ,
and
; and
.
For example, let . Then
.
A derivation using this CNF can be visualized as a binary parse tree, with the left-right traversal of leaves of the tree generating the string that is derived. In constructing a subsequence, each
may be present or absent. Thus, any number of the
terminals in this string can be replaced by
to get a subsequence (when the leaves of the parse-tree are traversed left-right) of
. In fact, all possible combinations of doing this will be
. So the following grammar will generate all strings in
.
Form a CFG where
is determined as follows
- For
,
is in
if and only
is in
for some
.
Then , so
is context-free.