Sie sind auf Seite 1von 20

LOGO

Anwendung der kontextfreien Grammatiken in den Compilern und Programmiersprachen

Gliederung
1. Einleitung 2. Allgemeine Informationen und Geschichte der kontextfreien Grammatiken 3. Definition der kontextfreien Grammatiken 4. Praktische Anwendung 5. Anwendung der kontextfreien Grammatiken in den Programmiersprachen 6. Anwendung der kontextfreien Grammatiken im Compilerbau 7. Literaturverzeichnis

Allgemeines und Geschichte


Die kontextfreien Grammatiken (kfG)
sind eine Teilklasse der Chomsky-Grammatiken, die Noam ChomskyChomsky in den 1950er Jahren ursprnglich zur Beschreibung 1950er natrlicher Sprachen eingefhrt hat formalisieren die Syntax von Programmier- und Markup-Sprachen ProgrammierMarkup(wie z.B. Java, C, HTML) dienen als Eingabe fr Parsergeneratoren (z.B. Yacc oder JavaCC) beschreiben den strukturellen Aufbau von Dokumenten

Avram Noam Chomsky


Avram Noam Chomsky(* 7. Dezember 1928 in Philadelphia, Pennsylvania, USA) ist Professor fr Linguistik am Massachusetts Institute of Technology MIT. Er entwickelte die nach ihm benannte Chomsky-Hierarchie. Seine ChomskyBeitrge zur allgemeinen Sprachwissenschaft frderten den Niedergang des Behaviorismus und den Aufstieg der Kognitionswissenschaft.

Allgemeines und Geschichte


Die folgende Tabelle fasst die vier Grammatiktypen, die Form ihrer Regeln, die Sprachen, die sie erzeugen, und die Automatentypen, die genau die erzeugten Sprachen erkennen, zusammen. Zudem wird die Abgeschlossenheit der erzeugten Sprachen bezglich einiger Operationen angegeben.

Allgemeines und Geschichte


Grammatik TypTyp-0 Beliebige formale Grammatik

Regeln

Sprachen

rekursiv aufzhlbar

Entscheidbarkeit -

Allgemeines und Geschichte


Grammatik TypTyp-1 Kontextsensitive Grammatik

Regeln

Sprachen

kontextsensitiv

Entscheidbarkeit Wortproblem

Allgemeines und Geschichte


Grammatik TypTyp-2 Kontextfreie Grammatik

Regeln

Sprachen

kontextfrei

Entscheidbarkeit Wortproblem, Leerheitsproblem

Allgemeines und Geschichte


Grammatik TypTyp-3 Regulre Grammatik

Regeln

Sprachen

regulr

Entscheidbarkeit Wortproblem, Leerheitsproblem, quivalenzproblem, Mehrdeutigkeitsproblem

Definition der kontextfreien Grammatiken


Die kfG sind solche Grammatiken, deren Produktionsregeln der Form Xu sind identisch mit den Typ-2-Grammatiken der Chomsky-Hierarchie TypChomskyEine kontextfreie Grammatik G ist ein 4-Tupel (N,T,P,S) 4N-Menge der Nichtterminale T-Menge der Terminale, /N und T endliche disjunkte Mengen/ T P-Menge der Produktionen, wobei P N(N T)* S-Startsymbol, wobei S N Eine Regel (a,b) P wird in der Form ab notiert (a,b) Die kontextfreien Grammatiken erzeugen genau die kontextfreien Sprachen

Beispiel
Sei G = (N,T,P,S) eine kontextfreie Grammatik mit: T = {x,y,z} N = {S,A,B} P enthlt 4 Produktionen bzw. Produktionsregeln: SA A xAy A xBy Bz

Praktische Anwendung der kfG

Zur Beschreibung von Programmiersprachen im Compilerbau Extensible Markup Language (XML) und Dokumenttypdefinitionen (DTD)

Anwendung zur Beschreibung von Programmiersprachen


Einzelne Aspekte einer Programmiersprache lassen sich durch regulre Ausdrcke beschreiben Aufgrund kfG lassen sich Compilerkomponenten generieren Alle in der Praxis verwendeten Programmiersprachen sind kontextsensitive Sprachen Die Backus-Naur-Form (BNF) ist mit den kontextfreien Backus-NaurGrammatiken und ihrer Bedeutung zur Beschreibung von Programmiersprachen verbunden. Eine BNF ist eine kontextfreie Grammatik, bei der die Nichtterminalzeichen durch Namen der Form "< Zeichenkette >" genauer bezeichnet werden knnen Statt des Ersetzungspfeils schreibt man " ::="

Anwendung zur Beschreibung von Programmiersprachen

Bei Programmiersprachen verwendet man das Nichtterminalzeichen <Program> als Startsymbol Automatische Erzeugung eines Algorithmus (sog. Parser) zur Lsung eines Wortproblems in kurzer Zeit (oft aus einer erweiterten Backus-Naur-Form /EBNF/) Backus-Naur/EBNF/ Die Syntax einer Programmiersprache wird durch eine kontextfreie Grammatik definiert, der man Zusatzbedingungen hinzufgt Die Eindeutigkeit der EBNF einer Programmiersprache muss getrennt nachgewiesen werden (diese Eigenschaft ist unentscheidbar)

Beispiel
Die folgenden Zeilen enthalten einige Produktionen einer kontextfreien Grammatik G zur Beschreibung einer kleinen Programmiersprache in der sog. Backus-Naur-Form: Backus-Naur<Anweisungsfolge> ::= <Anweisung> ; <Anweisungsfolge> | <Anweisung> <Anweisung> ::= <Zuweisung> | <While-Anweisung> | ... <While<Zuweisung> ::= <Bezeichner> := <arithmetischer Ausdruck> <While-Anweisung> ::= Whilewhile <logischer Ausdruck> do <Anweisungsfolge> od

Anwendung der kontextfreien Grammatiken im Compilerbau


Ein Compiler bersetzt eine Programmiersprache in Maschinensprache Dabei durchluft der bersetzungsvorgang mehrere Phasen

Lexikalische Analyse Syntaxanalyse Semantikanalyse

Anwendung der kontextfreien Grammatiken im Compilerbau


Ein einfaches Beispiel fr einen Ableitungsbaum:

Die wesentlichen Teile der Syntax von Programmiersprachen werden meist mit kontextfreien Grammatiken beschrieben Die nicht-kontextfreien Anteile der Syntax werden in der nichtanschlieenden semantischen Analyse berprft Die semantische Analyse erfolgt mit Hilfe kontextsensitiver Grammatiken

Anwendung der kontextfreien Grammatiken im Compilerbau


Fr den Compilerbau werden ausschlielich kontextfreie Grammatiken bentigt der Parser simuliert im Prinzip einen Kellerautomaten Die Grammatik muss also der (Grammatik) eines Kellerautomaten gengen Der Parser berprft, ob der Tokenstream der vorgegebenen Sprache entspricht und akzeptiert wird oder er einen Fehler enthlt und die berprfung abbricht Die zu akzeptierende Sprache generiert der Parser aus einer Grammatik Gute Parser geben im Fehlerfall Angaben aus, wo der Fehler stattgefunden hat und wie er evtl. behoben werden kann

Literaturverzeichnis
http://de.wikipedia.org/wiki/Kontextfreie_Grammatik, 02.05.2011 http://www.informatik.uni-bremen.de/theorie/teach/lehre /thi1/ http://www.informatik.uniWS1011/Folien/ KFGbeamer.pdf, 04.05.2011 http://www.fmi.uni-stuttgart.de/fk/mitarbeiter/claus/ http://www.fmi.uniInformatik_I-II_Kap_0-14_0Informatik_I-II_Kap_0-14_0-2256_2x2.pdf, 05.05.2011 http://www.ips.cs.tu-bs.de/struck/progfor08/einfuehrung.pdf, http://www.ips.cs.tu05.05.2011 http://lehre.hki.uni-koeln.de/seminare/ http://lehre.hki.unibasisinformationstechnologie- theoretische-informatik-i/praktischebasisinformationstechnologie-i/ theoretische-informatik-i/praktischeanwendung-von-grammatiken-fueranwendung-von-grammatiken-fuer-c, 05.05.2011 http://www.wi.uni-muenster.de/pi/lehre/ss09/ SeminarCompilerbau/ http://www.wi.uniSeminarCompilerbau/ abgaben/Adrian-Heinemann---Syntaxanalyse-LR1-LALR---2.pdf, abgaben/Adrian-Heinemann---Syntaxanalyse-LR1-LALR---2.pdf, 06.05.2011

LOGO