Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Context-free language
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Formal language generated by context-free grammar}} In [[formal language theory]], a '''context-free language''' ('''CFL'''), also called a '''[[Chomsky hierarchy|Chomsky]] type-2 language''', is a [[formal language|language]] generated by a [[context-free grammar]] (CFG). Context-free languages have many applications in [[programming languages]], in particular, most arithmetic expressions are generated by context-free grammars. ==Background== ===Context-free grammar=== Different context-free grammars can generate the same context-free language. Intrinsic properties of the language can be distinguished from extrinsic properties of a particular grammar by comparing multiple grammars that describe the language. ===Automata=== The set of all context-free languages is identical to the set of languages accepted by [[pushdown automata]], which makes these languages amenable to parsing. Further, for a given CFG, there is a direct way to produce a pushdown automaton for the grammar (and thereby the corresponding language), though going the other way (producing a grammar given an automaton) is not as direct. ==Examples== An example context-free language is <math>L = \{a^nb^n:n\geq1\}</math>, the language of all non-empty even-length strings, the entire first halves of which are {{mvar|a}}'s, and the entire second halves of which are {{mvar|b}}'s. {{mvar|L}} is generated by the grammar <math>S\to aSb ~|~ ab</math>. This language is not [[regular language|regular]]. It is accepted by the [[pushdown automaton#Formal definition|pushdown automaton]] <math>M=(\{q_0,q_1,q_f\}, \{a,b\}, \{a,z\}, \delta, q_0, z, \{q_f\})</math> where <math>\delta</math> is defined as follows:<ref group="note">meaning of <math>\delta</math>'s arguments and results: <math>\delta(\mathrm{state}_1, \mathrm{read}, \mathrm{pop}) = (\mathrm{state}_2, \mathrm{push})</math></ref> :<math>\begin{align} \delta(q_0, a, z) &= (q_0, az) \\ \delta(q_0, a, a) &= (q_0, aa) \\ \delta(q_0, b, a) &= (q_1, \varepsilon) \\ \delta(q_1, b, a) &= (q_1, \varepsilon) \\ \delta(q_1, \varepsilon, z) &= (q_f, \varepsilon) \end{align}</math> Unambiguous CFLs are a proper subset of all CFLs: there are [[Inherently ambiguous language|inherently ambiguous]] CFLs. An example of an inherently ambiguous CFL is the union of <math>\{a^n b^m c^m d^n | n, m > 0\}</math> with <math>\{a^n b^n c^m d^m | n, m > 0\}</math>. This set is context-free, since the union of two context-free languages is always context-free. But there is no way to unambiguously parse strings in the (non-context-free) subset <math>\{a^n b^n c^n d^n | n > 0\}</math> which is the intersection of these two languages.{{sfn|Hopcroft|Ullman|1979|p=100|loc=Theorem 4.7}} ===Dyck language=== The [[Dyck language|language of all properly matched parentheses]] is generated by the grammar <math>S\to SS ~|~ (S) ~|~ \varepsilon</math>. ==Properties== ===Context-free parsing=== {{main|Parsing}} The context-free nature of the language makes it simple to parse with a pushdown automaton. Determining an instance of the [[membership problem]]; i.e. given a string <math>w</math>, determine whether <math>w \in L(G)</math> where <math>L</math> is the language generated by a given grammar <math>G</math>; is also known as ''recognition''. Context-free recognition for [[Chomsky normal form]] grammars was shown by [[Leslie Valiant|Leslie G. Valiant]] to be reducible to Boolean [[matrix multiplication]], thus inheriting its complexity upper bound of [[Big O notation|''O'']](''n''<sup>2.3728596</sup>).<ref>{{cite journal |first=Leslie G. |last=Valiant |title=General context-free recognition in less than cubic time |journal=Journal of Computer and System Sciences |date=April 1975 |volume=10 |number=2 |pages=308β315 |doi=10.1016/s0022-0000(75)80046-8 |doi-access=free |url=https://figshare.com/articles/journal_contribution/General_context-free_recognition_in_less_than_cubic_time/6605915/1/files/12096398.pdf }}</ref><ref group=note>In Valiant's paper, ''O''(''n''<sup>2.81</sup>) was the then-best known upper bound. See [[Matrix multiplication#Computational complexity]] for bound improvements since then.</ref> Conversely, [[Lillian Lee (computer scientist)|Lillian Lee]] has shown ''O''(''n''<sup>3βΞ΅</sup>) Boolean matrix multiplication to be reducible to ''O''(''n''<sup>3β3Ξ΅</sup>) CFG parsing, thus establishing some kind of lower bound for the latter.<ref>{{cite journal |first=Lillian |last=Lee |author-link=Lillian Lee (computer scientist) |title=Fast Context-Free Grammar Parsing Requires Fast Boolean Matrix Multiplication |journal=J ACM |date=January 2002 |volume=49 |number=1 |pages=1β15 |url=http://www.cs.cornell.edu/home/llee/papers/bmmcfl-jacm.pdf |archive-url=https://web.archive.org/web/20030427152836/http://www.cs.cornell.edu/home/llee/papers/bmmcfl-jacm.pdf |archive-date=2003-04-27 |url-status=live |doi=10.1145/505241.505242 |arxiv=cs/0112018|s2cid=1243491 }}</ref> Practical uses of context-free languages require also to produce a derivation tree that exhibits the structure that the grammar associates with the given string. The process of producing this tree is called ''[[parsing]]''. Known parsers have a time complexity that is cubic in the size of the string that is parsed. Formally, the set of all context-free languages is identical to the set of languages accepted by pushdown automata (PDA). Parser algorithms for context-free languages include the [[CYK algorithm]] and [[Earley parser|Earley's Algorithm]]. A special subclass of context-free languages are the [[deterministic context-free language]]s which are defined as the set of languages accepted by a [[deterministic pushdown automaton]] and can be parsed by a [[LR parser|LR(k) parser]].<ref>{{Cite journal | last1 = Knuth | first1 = D. E. | author-link = Donald Knuth | title = On the translation of languages from left to right | doi = 10.1016/S0019-9958(65)90426-2 | journal = Information and Control | volume = 8 | issue = 6 | pages = 607β639 | date = July 1965 | doi-access = }}</ref> See also [[parsing expression grammar]] as an alternative approach to grammar and parser. ===Closure properties=== The class of context-free languages is [[closure (mathematics)|closed]] under the following operations. That is, if ''L'' and ''P'' are context-free languages, the following languages are context-free as well: *the [[union (set theory)|union]] <math>L \cup P</math> of ''L'' and ''P''{{sfn|Hopcroft|Ullman|1979|p=131|loc=Corollary of Theorem 6.1}} *the reversal of ''L''{{sfn|Hopcroft|Ullman|1979|p=142|loc=Exercise 6.4d}} *the [[concatenation]] <math>L \cdot P</math> of ''L'' and ''P''{{sfn|Hopcroft|Ullman|1979|p=131|loc=Corollary of Theorem 6.1}} *the [[Kleene star]] <math>L^*</math> of ''L''{{sfn|Hopcroft|Ullman|1979|p=131|loc=Corollary of Theorem 6.1}} *the image <math>\varphi(L)</math> of ''L'' under a [[String operations#String homomorphism|homomorphism]] <math>\varphi</math>{{sfn|Hopcroft|Ullman|1979|p=131-132|loc=Corollary of Theorem 6.2}} *the image <math>\varphi^{-1}(L)</math> of ''L'' under an [[String operations#String homomorphism|inverse homomorphism]] <math>\varphi^{-1}</math>{{sfn|Hopcroft|Ullman|1979|p=132|loc=Theorem 6.3}} *the [[circular shift#Applications|circular shift]] of ''L'' (the language <math>\{vu : uv \in L \}</math>){{sfn|Hopcroft|Ullman|1979|p=142-144|loc=Exercise 6.4c}} *the prefix closure of ''L'' (the set of all [[Prefix (computer science)|prefix]]es of strings from ''L''){{sfn|Hopcroft|Ullman|1979|p=142|loc=Exercise 6.4b}} *the [[Quotient of a formal language|quotient]] ''L''/''R'' of ''L'' by a regular language ''R''{{sfn|Hopcroft|Ullman|1979|p=142|loc=Exercise 6.4a}} ====Nonclosure under intersection, complement, and difference==== The context-free languages are not closed under intersection. This can be seen by taking the languages <math>A = \{a^n b^n c^m \mid m, n \geq 0 \}</math> and <math>B = \{a^m b^n c^n \mid m,n \geq 0\}</math>, which are both context-free.<ref group=note>A context-free grammar for the language ''A'' is given by the following production rules, taking ''S'' as the start symbol: ''S'' β ''Sc'' | ''aTb'' | ''Ξ΅''; ''T'' β ''aTb'' | ''Ξ΅''. The grammar for ''B'' is analogous.</ref> Their intersection is <math>A \cap B = \{ a^n b^n c^n \mid n \geq 0\}</math>, which can be shown to be non-context-free by the [[pumping lemma for context-free languages]]. As a consequence, context-free languages cannot be closed under complementation, as for any languages ''A'' and ''B'', their intersection can be expressed by union and complement: <math>A \cap B = \overline{\overline{A} \cup \overline{B}} </math>. In particular, context-free language cannot be closed under difference, since complement can be expressed by difference: <math>\overline{L} = \Sigma^* \setminus L</math>.<ref name="Scheinberg.1960">{{cite journal | url=https://core.ac.uk/download/pdf/82210847.pdf |archive-url=https://web.archive.org/web/20181126005901/https://core.ac.uk/download/pdf/82210847.pdf |archive-date=2018-11-26 |url-status=live | author=Stephen Scheinberg | title=Note on the Boolean Properties of Context Free Languages | journal=Information and Control | volume=3 | pages=372–375 | year=1960 | issue=4 | doi=10.1016/s0019-9958(60)90965-7| doi-access=free }}</ref> However, if ''L'' is a context-free language and ''D'' is a regular language then both their intersection <math>L\cap D</math> and their difference <math>L\setminus D</math> are context-free languages.<ref>{{Cite web|last1=Beigel|first1=Richard|last2=Gasarch|first2=William|title=A Proof that if L = L1 β© L2 where L1 is CFL and L2 is Regular then L is Context Free Which Does Not use PDA's|url=http://www.cs.umd.edu/~gasarch/BLOGPAPERS/cfg.pdf |archive-url=https://web.archive.org/web/20141212060332/http://www.cs.umd.edu/~gasarch/BLOGPAPERS/cfg.pdf |archive-date=2014-12-12 |url-status=live|access-date=June 6, 2020|website=University of Maryland Department of Computer Science}}</ref> ===Decidability=== In formal language theory, questions about regular languages are usually decidable, but ones about context-free languages are often not. It is decidable whether such a language is finite, but not whether it contains every possible string, is regular, is unambiguous, or is equivalent to a language with a different grammar. The following problems are [[Undecidable problem|undecidable]] for arbitrarily given [[context-free grammar]]s A and B: *Equivalence: is <math>L(A)=L(B)</math>?{{sfn|Hopcroft|Ullman|1979|p=203|loc=Theorem 8.12(1)}} *Disjointness: is <math>L(A) \cap L(B) = \emptyset </math> ?{{sfn|Hopcroft|Ullman|1979|p=202|loc=Theorem 8.10}} However, the intersection of a context-free language and a ''regular'' language is context-free,<ref>{{harvtxt|Salomaa|1973}}, p. 59, Theorem 6.7</ref>{{sfn|Hopcroft|Ullman|1979|p=135|loc=Theorem 6.5}} hence the variant of the problem where ''B'' is a regular grammar is decidable (see "Emptiness" below). *Containment: is <math>L(A) \subseteq L(B)</math> ?{{sfn|Hopcroft|Ullman|1979|p=203|loc=Theorem 8.12(2)}} Again, the variant of the problem where ''B'' is a regular grammar is decidable,{{citation needed|date=December 2015}} while that where ''A'' is regular is generally not.{{sfn|Hopcroft|Ullman|1979|p=203|loc=Theorem 8.12(4)}} *Universality: is <math>L(A)=\Sigma^*</math>?{{sfn|Hopcroft|Ullman|1979|p=203|loc=Theorem 8.11}} *Regularity: is <math>L(A)</math> a regular language?{{sfn|Hopcroft|Ullman|1979|p=205|loc=Theorem 8.15}} *Ambiguity: is every grammar for <math>L(A)</math> ambiguous?{{sfn|Hopcroft|Ullman|1979|p=206|loc=Theorem 8.16}} The following problems are ''decidable'' for arbitrary context-free languages: *Emptiness: Given a context-free grammar ''A'', is <math>L(A) = \emptyset</math> ?{{sfn|Hopcroft|Ullman|1979|p=137|loc=Theorem 6.6(a)}} *Finiteness: Given a context-free grammar ''A'', is <math>L(A)</math> finite?{{sfn|Hopcroft|Ullman|1979|p=137|loc=Theorem 6.6(b)}} *Membership: Given a context-free grammar ''G'', and a word <math>w</math>, does <math>w \in L(G)</math> ? Efficient polynomial-time algorithms for the membership problem are the [[CYK algorithm]] and [[Earley parser|Earley's Algorithm]]. According to Hopcroft, Motwani, Ullman (2003),<ref>{{cite book|author1=John E. Hopcroft |author2=Rajeev Motwani |author3=Jeffrey D. Ullman | title=Introduction to Automata Theory, Languages, and Computation| year=2003| publisher=Addison Wesley}} Here: Sect.7.6, p.304, and Sect.9.7, p.411</ref> many of the fundamental closure and (un)decidability properties of context-free languages were shown in the 1961 paper of [[Yehoshua Bar-Hillel|Bar-Hillel]], Perles, and Shamir<ref name="Bar-Hillel.Perles.Shamir.1961">{{cite journal|author1=Yehoshua Bar-Hillel |author2=Micha Asher Perles |author3=Eli Shamir | title=On Formal Properties of Simple Phrase-Structure Grammars| journal=Zeitschrift fΓΌr Phonetik, Sprachwissenschaft und Kommunikationsforschung| year=1961| volume=14| number=2| pages=143β172}}</ref> ===Languages that are not context-free=== The set <math>\{a^n b^n c^n d^n | n > 0\}</math> is a [[context-sensitive language]], but there does not exist a context-free grammar generating this language.{{sfn|Hopcroft|Ullman|1979}} So there exist context-sensitive languages which are not context-free. To prove that a given language is not context-free, one may employ the [[pumping lemma for context-free languages]]<ref name="Bar-Hillel.Perles.Shamir.1961"/> or a number of other methods, such as [[Ogden's lemma]] or [[Parikh's theorem]].<ref>{{cite web| url = https://cs.stackexchange.com/q/265| title = How to prove that a language is not context-free?}}</ref> ==Notes== {{Reflist|group=note}} ==References== {{Reflist}} === Works cited === {{Refbegin}} *{{Hopcroft and Ullman 1979}}{{sfn whitelist|CITEREFHopcroftUllman1979}} * {{cite book |first=Arto |last=Salomaa |title = Formal Languages |publisher = ACM Monograph Series |year= 1973}} {{Refend}} == Further reading == * {{cite book |first1=Jean-Michel |last1=Autebert |first2=Jean |last2=Berstel |first3=Luc |last3=Boasson |url=http://www-igm.univ-mlv.fr/~berstel/Articles/1997CFLPDA.pdf |archive-url=https://web.archive.org/web/20110516030515/http://www-igm.univ-mlv.fr/%7Eberstel/Articles/1997CFLPDA.pdf |archive-date=2011-05-16 |url-status=live |chapter=Context-Free Languages and Push-Down Automata |editor1=G. Rozenberg |editor2=A. Salomaa |title=Handbook of Formal Languages |volume=1 |publisher=Springer-Verlag |date=1997 |pages=111β174}} * {{cite book|first=Seymour |last=Ginsburg |author-link=Seymour Ginsburg | title = The Mathematical Theory of Context-Free Languages | year = 1966 | publisher = McGraw-Hill | location = New York, NY, USA}} * {{Sipser 1997|chapter='''2''': Context-Free Languages |pages=91-122}} {{Formal languages and grammars}} {{Authority control}} [[Category:Formal languages]] [[Category:Syntax]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Authority control
(
edit
)
Template:Citation needed
(
edit
)
Template:Cite book
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite web
(
edit
)
Template:Formal languages and grammars
(
edit
)
Template:Harvtxt
(
edit
)
Template:Hopcroft and Ullman 1979
(
edit
)
Template:Main
(
edit
)
Template:Mvar
(
edit
)
Template:Refbegin
(
edit
)
Template:Refend
(
edit
)
Template:Reflist
(
edit
)
Template:Sfn
(
edit
)
Template:Sfn whitelist
(
edit
)
Template:Short description
(
edit
)
Template:Sipser 1997
(
edit
)