{"id":2176,"date":"2009-01-11T18:26:38","date_gmt":"2009-01-11T17:26:38","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=2176"},"modified":"2023-05-25T07:31:48","modified_gmt":"2023-05-25T05:31:48","slug":"formale-sprachen-teil-1-die-chomsky-hierarchie","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-1-die-chomsky-hierarchie.htm","title":{"rendered":"Formale Sprachen, Teil 1: Die Chomsky-Hierarchie"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-1-die-chomsky-hierarchie.htm#comments'>25 Kommentare.<\/a>)<\/small> <\/div>\n<p>Mich hat noch nie jemand gefragt: Herr Rau, was lernt man eigentlich im Informatik-Studium? Deshalb hier eine Antwort.<\/p>\n\n\n\n<p>In der Informatik geht es um Information und deren automatische Verarbeitung. Ein Teilbereich hei\u00dft theoretische Informatik, und den mochte ich im Studium recht gerne. Jedenfalls viel lieber als technischere Informatik, Signal\u00fcbertragung und dergleichen.<\/p>\n\n\n\n<p>In der theoretischen Informatik geht es unter anderem um Sprachen. Die sind dort allerdings als formale Sprachen sehr genau definiert. Denn das macht es leichter, Behauptungen \u00fcber diese Sprachen aufzustellen und diese beweisen zu k\u00f6nnen. In diesem und einigen folgenden Blogeintr\u00e4gen will ich das ein wenig erkl\u00e4ren &#8211; auch deshalb, um mir selber die Details wieder in Erinnerung zu rufen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Grundbegriffe: Alphabet, Wort, Sprache, Grammatik<\/h3>\n\n\n\n<p><strong>Alphabet:<\/strong><br>Eine endliche Menge von Zeichen, zum Beispiel:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>{a, b, c, d &#8230; z}<\/li>\n\n\n\n<li>oder auch nur {a, b}<\/li>\n\n\n\n<li>oder {Hund, Katze, Maus, der, die, das, frisst, jagt, mag}<\/li>\n\n\n\n<li>oder {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}<\/li>\n<\/ol>\n\n\n\n<p><strong>Wort:<\/strong><br>Diese Zeichen lassen sich beliebig aneinanderreihen, zum Beispiel so:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>abccddzeffgg<\/li>\n\n\n\n<li>abbbabba<\/li>\n\n\n\n<li>derHundfrisstfrisstKatzedie<\/li>\n\n\n\n<li>999022332<\/li>\n<\/ol>\n\n\n\n<p>Statt Aneinanderreihung sagt man einfach <em>Wort<\/em>. Verwirrend ist vielleicht, dass das, was in einer nat\u00fcrlichen Sprache ein Satz ist, hier <em>Wort<\/em> hei\u00dft.<\/p>\n\n\n\n<p><strong>Sprache:<\/strong><br>Jede Teilmenge aus der Menge aller m\u00f6glichen W\u00f6rter zu einem Alphabet. Zum Beispiel, angelehnt an die oben genannten Alphabete:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Die Menge aller W\u00f6rter (Aneinanderreihungen), die mit a beginnen.<br>aaabc ist ein Wort der Sprache, baaac nicht<\/li>\n\n\n\n<li>Die Menge aller W\u00f6rter, die genau sechs Zeichen lang sind.<br>aaabbb ist ein Wort der Sprache, aaabb nicht<\/li>\n\n\n\n<li>Die Menge aller W\u00f6rter, die einen sinnvollen deutschen Satz ergeben (wobei man noch genauer definieren muss, was <em>sinnvoll<\/em> hei\u00dft).<br>derHundmagdieKatze ist ein Wort der Sprache, derHundHundKatze nicht<\/li>\n\n\n\n<li>Die Menge aller W\u00f6rter, die eine Primzahl darstellen.<br>23 ist ein Wort der Sprache, 24 nicht<\/li>\n<\/ol>\n\n\n\n<p><strong>Grammatik:<\/strong><br>Wenn man eine Sprache, die aus endlich vielen W\u00f6rtern besteht, beschreiben m\u00f6chte, kann man nat\u00fcrlich einfach alle die W\u00f6rter in einer langen Liste aufz\u00e4hlen. Das ist aber un\u00fcbersichtlich. Und wenn die W\u00f6rter einer Sprache beliebig lang sein k\u00f6nnen (hei\u00dft in nat\u00fcrlicher Sprache: wenn die S\u00e4tze beliebig lang sein k\u00f6nnen), dann ist das sogar ganz unm\u00f6glich. Also gibt es endliche Grammatiken, die mit Hilfe von Ableitungsregeln die Sprache so beschreiben, dass mit Hilfe dieser Grammatik alle W\u00f6rter der Sprache erzeugt werden k\u00f6nnen.<\/p>\n\n\n\n<p>Ein ganz simples Beispiel, angelehnt an nat\u00fcrliche Sprache:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Satz =&gt; Subjekt + Pr\u00e4dikat + Erg\u00e4nzung<br>Subjekt =&gt; \"Sie\" oder \"Er\"<br>Pr\u00e4dikat =&gt; \"lacht\" oder \"springt\"<br>Pr\u00e4dikat =&gt; Pr\u00e4dikat + \"und\" + Pr\u00e4dikat<br>Erg\u00e4nzung =&gt; \"oft\" oder \"nie\"<\/code><\/pre>\n\n\n\n<p>Man f\u00e4ngt bei <em>Satz<\/em> an und ersetzt immer das links vom Pfeil durch das, was rechts vom Pfeil steht. Und das macht man immer so weiter, bis rechts nur noch Sachen in Anf\u00fchrungszeichen stehen. Mit diesen Regeln kann man dann die S\u00e4tze &#8222;Sie lacht oft&#8220;, &#8222;Sie lacht und springt nie&#8220; oder &#8222;Er lacht und lacht und lacht oft&#8220; erzeugen. Und unendlich viele mehr, wenn auch alle sehr langweilig sind.<\/p>\n\n\n\n<p>Diese Grammatiken hei\u00dfen auch Phrasenstrukturgrammatiken. Davon gibt es verschiedene Arten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Die Chomsky-Hierarchie<\/h3>\n\n\n\n<p>Sie ist nach Noam Chomsky (vor ein paar Wochen <span style=\"text-decoration: line-through;\">90<\/span> 80 geworden) benannt. Bei Chomsky treffen sich Sprachwissenschaft und Informatik. Und es wird kompliziert. Deshalb gebe ich hier einen wohl erst einmal unverst\u00e4ndlichen \u00dcberblick und werde in folgenden Blogebeitr\u00e4gen auf die einzelnen Sprachen der Hierarchie nach und nach eingehen.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Chomsky 0:<\/strong> Alle Sprachen, die sich \u00fcberhaupt durch eine Grammatik beschreiben lassen.<\/li>\n\n\n\n<li><strong>Chomsky 1:<\/strong> Eine Teilmenge davon, n\u00e4mlich die Sprachen, die sich durch eine kontextsensitive Grammatik beschreiben lassen.<\/li>\n\n\n\n<li><strong>Chomsky 2:<\/strong> Eine Teilmenge wiederum davon, n\u00e4mlich die Sprachen, die sich durch eine kontextfreie Grammatik beschreiben lassen.<\/li>\n\n\n\n<li><strong>Chomsky 3:<\/strong> Eine Teilmenge wiederum davon, n\u00e4mlich die Sprachen, die sich durch eine regul\u00e4re Grammatik beschreiben lassen.<\/li>\n<\/ul>\n\n\n\n<p>Die Fragen, die sich stellen, sind: Was bedeuten all diese W\u00f6rter? Worin unterscheiden sich die verschiedenen Sprachen? Zu welcher Art geh\u00f6ren Programmiersprachen und menschliche Sprachen, wenn man das \u00fcberhaupt sagen kann? (Und vielleicht noch: Gibt es Sprachen, die sich gar nicht durch eine Grammatik beschreiben lassen? Ja, gibt es.)<\/p>\n\n\n\n<p>Zu jeder dieser Sprachen, zu jeder Grammatik kann man einen <strong>Automaten<\/strong> konstruieren, der &#8211; im besten Fall &#8211; f\u00fcr beliebige W\u00f6rter entscheidet, ob das Wort zu einer bestimmten Sprache geh\u00f6rt oder nicht. F\u00fcr Chomsky 1-3 gibt es solche Automaten. F\u00fcr Chomsky 0 ist es ein bisschen schwieriger.<\/p>\n\n\n\n<p>Sprachen vom Typ Chomsky 0 hei\u00dfen auch <em>rekursiv aufz\u00e4hlbar<\/em> oder <em>semi-entscheidbar<\/em>. Das hei\u00dft, alle dazu geh\u00f6renden W\u00f6rter k\u00f6nnen von einem Automaten (und zwar einer Turingmaschine) aufgez\u00e4hlt beziehungsweise best\u00e4tigt werden. Wenn ein Wort allerdings nicht zur Sprache geh\u00f6rt, dann sagt die Maschine nichts dar\u00fcber. Man wei\u00df also nicht, ob die Maschine <em>noch<\/em> rechnet oder <em>f\u00fcr immer<\/em> rechnen wird. Man kann zwar die (unendlich vielen) W\u00f6rter der Sprache aufz\u00e4hlen, aber nicht die (unendlich vielen) W\u00f6rter, die <em>nicht<\/em> dazu geh\u00f6ren. Anders gesagt, es gibt keine Grammatik f\u00fcr die Sprache derjenigen W\u00f6rter, die <em>nicht<\/em> zu einer gegeben 0-Sprache geh\u00f6ren.<\/p>\n\n\n\n<p>Hier noch einmal im \u00dcberblick. In den n\u00e4chsten Eintr\u00e4gen will ich jeden Sprachtyp etwas genauer erkl\u00e4ren. Wenn man mit den einfachen Sprachen anf\u00e4ngt, geht das auch ganz harmlos.<\/p>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><tbody><tr><th>Chomsky-Hierarchie<\/th><th>Sprachtyp<\/th><th>Grammatikart<\/th><th>Akzeptierende Maschine<\/th><\/tr><tr><td>Chomsky 0<\/td><td>semi-entscheidbare\/ rekursiv aufz\u00e4hlbare Sprachen<\/td><td>allgemeine Grammatik oder Phrasenstruktur-Grammatik<\/td><td>Turingmaschine<\/td><\/tr><tr><td>Chomsky 1<\/td><td>kontextsensitive Sprache<\/td><td>kontextsensitive Grammatik<\/td><td>(nichtdeterministische) linear beschr\u00e4nkte Turingmaschine<\/td><\/tr><tr><td>Chomsky 2<\/td><td>kontextfreie Sprache<\/td><td>kontextfreie Grammatik<\/td><td>Kellerautomat<\/td><\/tr><tr><td>Chomsky 3<\/td><td>regul\u00e4re Sprachen<\/td><td>regul\u00e4re Grammatik (siehe auch <em>regul\u00e4re Ausdr\u00fccke<\/em>)<\/td><td>endliche Automaten<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><a href=\"https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-2-regulaere-sprachen.htm\">Teil 2 folgt.<\/a><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ssl-vg03.met.vgwort.de\/na\/f1d55a77d0b444a0ba056bd4d3ff597a\" alt=\"\" width=\"1\" height=\"1\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(25 Kommentare.) Mich hat noch nie jemand gefragt: Herr Rau, was lernt man eigentlich im Informatik-Studium? Deshalb hier eine Antwort. In der Informatik geht es um Information und deren automatische Verarbeitung. Ein Teilbereich hei\u00dft theoretische Informatik, und den mochte ich im Studium recht gerne. Jedenfalls viel lieber als technischere Informatik, Signal\u00fcbertragung und dergleichen. In der [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25],"tags":[227],"class_list":["post-2176","post","type-post","status-publish","format-standard","hentry","category-informatik","tag-informatik"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=2176"}],"version-history":[{"count":3,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2176\/revisions"}],"predecessor-version":[{"id":58107,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2176\/revisions\/58107"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=2176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=2176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=2176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}