Context free language

A context-free language is a formal language that is accepted by some pushdown automaton. Context-free languages can be generated by context-free grammars.

Examples
An archetypical context-free language is $$L = \{a^nb^n:n\geq1\}$$, the language of all non-empty even-length strings, the entire first halves of which are $$a$$'s, and the entire second halves of which are $$b$$'s. $$L$$ is generated by the grammar $$S\to aSb ~|~ ab$$, and is accepted by the pushdown automaton $$M=(\{q_0,q_1,q_f\}, \{a\}, \{a,b,z\}, \delta, q_0, \{q_f\})$$ where $$\delta$$ is defined as follows:

$$\delta(q_0, a, z) = (q_0, a)$$ $$\delta(q_0, b, ax) = (q_1, x)$$ $$\delta(q_1, b, ax) = (q_1, x)$$ $$\delta(q_1, b, bz) = (q_f, z)$$

Context-free languages have many applications in programming languages; for example, the language of all properly matched parentheses is generated by the grammar $$S\to SS ~|~ (S) ~|~ \lambda$$. Also, most arithmetic expressions are generated by context-free grammars.

Closure Properties
Context-Free Languages are closed under the following operations. That is, if "L" and "P" are Context-Free Languages and "D" is a Regular Language, the following languages are Context-Free as well:


 * the Kleene star L* of L
 * the homomorphism φ(L) of "L"
 * the concatenation LP of L and P
 * the union L&cup;P of "L" and "P"
 * the intersection (with a Regular Language) L&cap;D of "L" and "D"

Context-Free Languages are not closed under complement, intersection, or difference.