{"id":1851,"date":"2013-06-02T19:48:46","date_gmt":"2013-06-02T17:48:46","guid":{"rendered":"http:\/\/fernuni.digreb.net\/?p=1851"},"modified":"2025-11-25T23:14:28","modified_gmt":"2025-11-25T22:14:28","slug":"tib-endliche-automaten-und-kontextfreie-grammatiken-lernziele-ke6-33","status":"publish","type":"post","link":"https:\/\/fernuni.digreb.net\/?p=1851","title":{"rendered":"TIB: Endliche Automaten und kontextfreie Grammatiken (Lernziele KE6 3\/3)"},"content":{"rendered":"<h2>Lernziel 7<\/h2>\n<p style=\"padding-left: 30px;\"><em>Was sind Ableitungsb\u00e4ume kontextfreier Grammatiken?<\/em><\/p>\n<p>Wie wir aus dem\u00a0<a title=\"TIB: Grammatiken und regul\u00e4re Sprachen (Lernziele KE5)\" href=\"https:\/\/fernuni.digreb.net\/?p=1667\">Beitrag zu KE5<\/a>\u00a0bereits wissen, sind regul\u00e4re Sprachen (Typ-3, rechte Seite einer Regel besteht nur aus einem Terminal, dem ein Nonterminal folgt oder einem leeren Wort)\u00a0eine echte Teilmenge der kontextfreien Sprachen (Typ-2, linke Seite der Regel besteht nur aus einem Nonterminal). Die Typ-3-Sprachen sind nur noch ein St\u00fcck weiter eingeschr\u00e4nkt . Damit sind regul\u00e4re Sprachen auch kontextfrei, denn alle Nonterminale k\u00f6nnen unabh\u00e4ngig von ihrer Umgebung ersetzt werden (im Gegensatz zu Typ-1-Grammatiken, die auch kontextsensitive Regeln erlauben, dort kann die linke Seite der Regel auch aus einem Terminal und einem Nonterminal bestehen. Der Kontext ist also die Verbindung von Terminal und Nonterminal im Wort).<\/p>\n<p>Wenn man nach Ableitungsb\u00e4umen und kontextfreien Grammatiken sucht, findet man <a href=\"http:\/\/de.wikipedia.org\/wiki\/Syntaxbaum\">diesen Beitrag<\/a> in der Wikipedia und der Fall ist eig. klar. Leider hat das Skript auch noch 4 Seiten zum Thema der Notation f\u00fcr die kontextfreie Grammatik (die polnische Notation und die vereinfachte Notation). Anschlie\u00dfend geht es um die abstrakte Syntax, das Erzeugungssystem, die abstrakte Semantik und dann drei Arten von Ableitungsb\u00e4umen. Nun stellt sich mir die Frage, ob ich einfach ein paar Beispiele f\u00fcr den Ableitungsbaum aus dem Artikel bringen oder das Skript sezieren soll. Just in diesem Moment entscheide ich mich f\u00fcr Ersteres in Kombination mit dem Beispiel aus dem Skript.<\/p>\n<p>Zun\u00e4chst haben wir drei Arten von Ableitungsb\u00e4umen:<\/p>\n<ol>\n<li>Baum mit Wurzel \\(a\\) und Front \\(a\\in(\\Sigma\\cup\\Pi)\\). Das ist ein ein einzelner Knoten \\(a\\), der gleichzeitig auch die Wurzel ist. \\(a\\) kann nur ein Wort \u00fcber der Menge der Terminale und Nonterminale sein. Die Wurzel ist das ausgehende Zeichen, d.h. das Startsymbol (in diesem Fall ist es nicht die Startregel aus \\(R\\)).<\/li>\n<li>Baum mit Wurzel \\(A\\) (Nonterminal) und Front \\(\\epsilon\\) (leeres Wort) wenn es die folgende Abschlussregel in der Grammatik gibt: \\((R\\rightarrow\\epsilon)\\).<\/li>\n<li>Und hier endlich der &#8222;echte&#8220; Baum mit einer Wurzel \\(A\\) und einer Front \\(\\omega\\) wenn es eine Ableitungssequenz gibt, so dass man das Wort \\(\\omega\\) mittels der Regeln aus der Grammatik ableiten kann.<\/li>\n<\/ol>\n<p>Bitte macht euch noch einmal klar, dass die Front das abgeleitete Wort (oder Zeichen) ist und die Wurzel das Startsymbol (was nicht unbedingt die Startregel sein muss). Die folgende Abbildung zeigt zwei B\u00e4ume (mit gr\u00fcner Front), die auch im Skript Verwendung finden mittels der Regelmenge:<\/p>\n<p style=\"padding-left: 30px;\">\\(S\\rightarrow a\\mid b\\mid\\emptyset\\mid (S\\cup S)\\mid (SS)\\mid S^{*}\\)<\/p>\n<p><strong>Beispiel<\/strong>: Ableitung von \\(\\emptyset\\) (mittels Baumart Nr. 1)<\/p>\n<p style=\"padding-left: 30px;\">Sequenz: nicht notwendig, da nur Baumart Nr. 1<\/p>\n<p style=\"padding-left: 30px; text-align: center;\"><a href=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/emptyset.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-1858\" style=\"margin-left: 150px; margin-right: 250px;\" alt=\"emptyset\" src=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/emptyset.png\" width=\"46\" height=\"54\" \/><\/a><\/p>\n<p><strong>Beispiel<\/strong>: Ableitung von \\((\\emptyset^{*}\\cup a)\\) (mittels Baumart Nr. 3)<\/p>\n<p style=\"padding-left: 30px;\">Sequenz: \\(S\\Rightarrow(S\\cup S)\\Rightarrow(S^{*}\\cup S)\\Rightarrow(\\emptyset^{*}\\cup S)\\Rightarrow(\\emptyset^{*}\\cup a)\\)<\/p>\n<p style=\"padding-left: 30px; text-align: center;\"><a href=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/treeg1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-1857\" style=\"margin-left: 50px; margin-right: 100px;\" alt=\"treeg1\" src=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/treeg1.png\" width=\"314\" height=\"217\" srcset=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/treeg1.png 524w, https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/treeg1-300x207.png 300w\" sizes=\"auto, (max-width: 314px) 100vw, 314px\" \/><\/a><\/p>\n<p style=\"padding-left: 30px;\">Den Baum baut man so sukzessive auf. In der Abbildung sind die einzelnen Ableitungsschritte der Sequenz von \\(1-5\\) nummeriert. Am Ende liest man einfach nur das gesuchte Wort \\(\\omega\\) anhand der Bl\u00e4tter (Knoten ohne Kinder) von links nach rechts ab (auch Tiefensuche genannt).<\/p>\n<p>Baumart Nr. 2 kam f\u00fcr ein Beispiel nicht in Frage, da wir das leere Wort \\(\\epsilon\\) mangels passender Regel nicht ableiten k\u00f6nnen (siehe unsere Regelmenge) und ich zu faul war eine neue Regelmenge zu definieren. Evtl. hole ich das noch nach wenn die Zusammenfassungen zu allen Kurseinheiten online sind.<\/p>\n<p>Noch eine Kleinigkeit zur Notation:<\/p>\n<blockquote><p>Wenn das Wort \\(\\omega\\) einen Ableitungsbaum mit Wurzel \\(A\\) und Front \\(\\omega\\) hat, so gilt \\(A\\xrightarrow{\\text{*}}\\omega\\)<\/p><\/blockquote>\n<p>Es k\u00f6nnte auch mehrere Ableitungsb\u00e4ume f\u00fcr ein Wort geben. Nehmen wir wieder das Beispiel aus dem Skript:<\/p>\n<p><strong>Beispiel<\/strong>: \\(S\\rightarrow SS\\mid a\\mid b\\) und abgeleitetes Wort \\(aba\\)<\/p>\n<p style=\"padding-left: 30px;\">Sequenz 1: \\(S\\Rightarrow SS\\Rightarrow SSS\\Rightarrow aSS\\Rightarrow abS\\Rightarrow aba\\)<\/p>\n<p style=\"padding-left: 30px;\">Sequenz 2: \\(S\\Rightarrow SS\\Rightarrow aS\\Rightarrow aSS\\Rightarrow abS\\Rightarrow aba\\)<\/p>\n<p style=\"padding-left: 30px;\">Durch die unterschiedlichen Ableitungssequenzen f\u00fcr ein Wort, haben wir auch unterschiedliche Ableitungsb\u00e4ume.\u00a0Damit ist die Grammatik aus diesem Beispiel <em>mehrdeutig<\/em>.<\/p>\n<p><strong>Antwort zum Lernziel<\/strong>: der Ableitungsbaum bezeichnet die baumf\u00f6rmige Darstellung der Ableitung eines Wort \\(\\omega\\) aus einer Grammatik. Sobald der Baum aufgebaut ist, wird das Wort von links nach rechts anhand der Bl\u00e4tter abgelesen (Tiefensuche).<\/p>\n<h2>Lernziel 8<\/h2>\n<p style=\"padding-left: 30px;\"><em>Wann ist eine kontextfreie Grammatik bzw. Sprache eindeutig?<\/em><\/p>\n<p>Wie wir im letzten Beispiel gesehen haben, kann es zu einen Wort mehrere Ableitungsb\u00e4ume geben. Diese Grammatiken sind f\u00fcr die Syntaxdefinition von Programmiersprachen aufgrund dieser Mehrdeutigkeit jedoch unbrauchbar. Der Programmtext w\u00fcrde sich so auf verschiedene Weise ableiten lassen. Wir sind also auf eindeutige Grammatiken f\u00fcr Programiersprachen angewiesen.<\/p>\n<blockquote><p>Eine eindeutige Grammatik ist also dann eindeutig wenn jedes Wort aus der durch die Grammatik definierten Sprache genau einen Ableitungsbaum hat. Ebenso verh\u00e4lt es sich mit der Sprache: sie ist dann eindeutig wenn es eine eindeutige Grammatik gibt, dass die Sprache beschreibt.<\/p><\/blockquote>\n<p>Man kann die Mehrdeutigkeit auch durch die Verwendung von Pr\u00e4zedenzregeln eliminieren. Da das nicht Teil des Skripts war, lasse ich das zun\u00e4chst einmal aus. Wenn mehr Zeit ist, schreibe ich evtl. noch ein paar Zeilen dazu. Bis dahin sei auf ein <a href=\"http:\/\/www.mathematik.uni-marburg.de\/~loogen\/Lehre\/ss06\/SeminarCompilerbau\/Ausarbeitungen\/HeitzerAmbiguousParsing.pdf\">PDF der Uni Marburg<\/a> zum Thema verwiesen.<\/p>\n<p><strong>Antwort zum Lernziel<\/strong>: siehe Definition von oben.<\/p>\n<p>Ausgelassen habe ich hier die abstrakten Syntaxb\u00e4ume, da sie nicht in den Lernzielen erw\u00e4hnt werden. Aber vielleicht der Vollst\u00e4ndigkeit halber noch ein paar Worte zum Thema: Was ist also diese abstrakte Syntax?<\/p>\n<p>Sie ist nichts anderes als die <em>wesentlichen<\/em> Teile des Ableitungsbaumes zu einem Ausdruck. Genau dieser Syntaxbaum wird auch vom Compiler verwendet um den Programmcode zu interpretieren, da der Ableitungsbaum (auch &#8222;konkreter Syntaxbaum&#8220; statt Ableitungsbaum genannt) zu viele Informationen beinhaltet, die unwichtig sind. Die Informationen k\u00f6nnen auch in in anderer Form gespeichert werden.<\/p>\n<p>Dazu bem\u00fche ich wieder das Beispiel aus dem Skript mit der Regelmenge<\/p>\n<p style=\"padding-left: 30px;\">\\(S\\rightarrow a\\mid b\\mid\\emptyset\\mid (S\\cup S)\\mid (SS)\\mid S^{*}\\)<\/p>\n<p>aus der verwendeten (eindeutigen) Grammatik.<\/p>\n<p><strong>Beispiel<\/strong>: abgeleiteter Ausdruck \\((((aa)b)^{*}\\cup(b\\cup\\emptyset^{*}))\\)<\/p>\n<p style=\"padding-left: 30px;\">Sequenz: \\(S\\Rightarrow(S\\cup S)\\Rightarrow(S^{*}\\cup (S\\cup S))\\Rightarrow((SS)^{*}\\cup (b\\cup S^{*}))\\Rightarrow((SS)b^{*}\\cup (b\\cup\\emptyset^{*}))\\Rightarrow((aa)b^{*}\\cup (b\\cup\\emptyset^{*}))\\)<\/p>\n<p style=\"padding-left: 30px;\">Die folgende Abbildung zeigt den zugeh\u00f6rigen Ableitungsbaum (konkreter Syntaxbaum):<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/g2ableitungsbaum.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-1870\" alt=\"g2ableitungsbaum\" src=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/g2ableitungsbaum.png\" width=\"539\" height=\"389\" srcset=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/g2ableitungsbaum.png 898w, https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/g2ableitungsbaum-300x216.png 300w\" sizes=\"auto, (max-width: 539px) 100vw, 539px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 30px;\">F\u00fcr uns spannend sind aber nicht die konkreten Ableitungsinformationen, sondern einfach nur die abstrakte Syntax. Entfernen wir nun alle unn\u00f6tigen Knoten aus dem Ableitungsbaum (konkreter Syntaxbaum), so bekommen wir unseren sehr kompakten abstrakten Syntaxbaum.<\/p>\n<p style=\"padding-left: 30px; text-align: center;\"><a href=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/g2abstraktesyntax.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-1869\" style=\"margin-left: 50px; margin-right: 150px;\" alt=\"g2abstraktesyntax\" src=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/g2abstraktesyntax.png\" width=\"258\" height=\"260\" srcset=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/g2abstraktesyntax.png 430w, https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/g2abstraktesyntax-150x150.png 150w, https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/06\/g2abstraktesyntax-297x300.png 297w\" sizes=\"auto, (max-width: 258px) 100vw, 258px\" \/><\/a><\/p>\n<p style=\"padding-left: 30px;\">Wie man sich leicht vorstellen kann, kann dieser Baum deutlich einfacher gespeichert und geparsed werden als sein gro\u00dfer Bruder.<\/p>\n<p>Eine sch\u00f6ne Darstellung findet sich auch in einigen <a href=\"http:\/\/www.mathematik.uni-marburg.de\/~loogen\/Lehre\/ws05\/Compilerbau\/Syntax.pdf\">Folien<\/a> aus Magdeburg. Im Kurs <a href=\"http:\/\/vu.fernuni-hagen.de\/lvuweb\/lvu\/app\/Kurs\/1810\/WS2012\">1810<\/a> (Compilerbau) der FernUni wird verst\u00e4rkt darauf Bezug genommen. Wer sich diesen Kurs im Studium als Modul anh\u00f6ren m\u00f6chte (ist im Katalog B), sollte sich diese B\u00e4umchen evtl. genauer ansehen.<\/p>\n<p>Damit haben wir auch KE6 hinter uns. Bei Fehler gilt wie immer: so schnell wie m\u00f6glich in die Kommentare.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lernziel 7 Was sind Ableitungsb\u00e4ume kontextfreier Grammatiken? Wie wir aus dem\u00a0Beitrag zu KE5\u00a0bereits wissen, sind regul\u00e4re Sprachen (Typ-3, rechte Seite einer Regel besteht nur aus einem Terminal, dem ein Nonterminal folgt oder einem leeren Wort)\u00a0eine echte Teilmenge der kontextfreien Sprachen (Typ-2, linke Seite der Regel besteht nur aus einem Nonterminal). Die Typ-3-Sprachen sind nur noch &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/fernuni.digreb.net\/?p=1851\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eTIB: Endliche Automaten und kontextfreie Grammatiken (Lernziele KE6 3\/3)\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-1851","post","type-post","status-publish","format-standard","hentry","category-theoretische-informatik"],"_links":{"self":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/1851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1851"}],"version-history":[{"count":24,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/1851\/revisions"}],"predecessor-version":[{"id":3543,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/1851\/revisions\/3543"}],"wp:attachment":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}