Die Chomsky-Normalform (Abk.: CNF) ist in der theoretischen Informatik eine Normalform für kontextfreie Grammatiken. Sie ist nach dem Linguisten Noam Chomsky benannt und kommt beim CYK-Algorithmus zum Einsatz. Eine kontextfreie Grammatik in Chomsky-Normalform hat eine einfache Struktur der Produktionsregeln und erfüllt auch die Eigenschaften kontextsensitiver Grammatiken.
Zu jeder kontextfreien Sprache gibt es eine Grammatik in Chomsky-Normalform. Aus jeder kontextfreien Grammatik kann eine Grammatik in Chomsky-Normalform konstruiert werden, die dieselbe Sprache erzeugt. Die Grammatik wird dann auch eine Chomsky-Normalform der kontextfreien Grammatik genannt.
Eine weitere Normalform für kontextfreie Grammatiken ist die Greibach-Normalform. Eine Erweiterung der Chomsky-Normalform auf kontextsensitive Grammatiken stellt die Kuroda-Normalform dar. Die Chomsky-Normalform wird auf Grund der gleichen Abkürzung leicht mit der Konjunktiven Normalform (engl. conjunctive normal form) verwechselt.
Eine formale Grammatik ist in Chomsky-Normalform, wenn jede Produktion aus eine der folgenden Formen hat:
wobei , und Nichtterminalsymbole aus sind und ein Terminalsymbol aus ist. ist das Startsymbol und das leere Wort. Wenn die Produktion zur Grammatik gehört, dann darf nicht auf der rechten Seite einer Produktion stehen.
Lässt man bei der ersten Produktion auf der rechten Seite beliebig viele anstatt zwei Nichtterminalsymbole zu, so spricht man von einer schwachen Chomsky-Normalform.
Liegt eine kontextfreie Grammatik vor, so lässt sich daraus schrittweise eine Grammatik in Chomsky-Normalform generieren, die dieselbe Sprache erzeugt:
Es gilt, die Grammatik über dem Alphabet mit den Regeln
in Chomsky-Normalform zu bringen.
1. Neue Startvariable hinzufügen
2. -Übergänge entfernen
Eine neue -Regel ist entstanden, die wiederum gleich behandelt werden muss:
3. Alle Einheits-Regeln entfernen. Diese sind und .
danach
und zum Schluss
4. Längere Verkettungen sind nicht erlaubt, deshalb führen wir eine zusätzliche Variable ein und ersetzen durch die Regel und :
Nun bleiben nur noch die Regeln und . Deshalb wird eine weitere Variable verwendet, die zusammen mit der Regel das Terminalsymbol in den genannten Regeln ersetzen kann.
Somit ist die Grammatik in Chomsky-Normalform umgewandelt.