Äquivalente Grammatiken / attributierte Grammatik



Ähnliche Dokumente
Grammatiken in Prolog

Programmiersprachen und Übersetzer

Was ist ein Compiler?

Programmierkurs Java

1. Formale Sprachen 1.2 Grammatiken formaler Sprachen

Formale Sprachen und Grammatiken

Algorithmen und Datenstrukturen

Grundbegriffe der Informatik

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Informatik I Tutorium WS 07/08

Formale Sprachen, reguläre und kontextfreie Grammatiken

SWE1 / Übung 2 ( )

Kurzanleitung MAN E-Learning (WBT)

Theoretische Informatik 2 (WS 2006/07) Automatentheorie und Formale Sprachen 19

2.11 Kontextfreie Grammatiken und Parsebäume

Theoretische Informatik I

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Beispiel(unten ist der Spielfeldrand):

Erwin Grüner

4. 4. Algorithmen und Datenstrukturen in deskriptiven Programmiersprachen

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Test-Driven Design: Ein einfaches Beispiel

Einführung in die Java- Programmierung

Grundbegriffe der Informatik

Theoretische Grundlagen der Informatik

7. Bewässerung: Mehrmals pro Woche

Praktikum Compilerbau

Grundbegriffe der Informatik

Überblick. Lineares Suchen

5. Übung: PHP-Grundlagen

Eine Logikschaltung zur Addition zweier Zahlen

Formale Sprachen. Der Unterschied zwischen Grammatiken und Sprachen. Rudolf Freund, Marian Kogler

Computerarithmetik ( )

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Erfahrungen mit Hartz IV- Empfängern

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Physik & Musik. Stimmgabeln. 1 Auftrag

Kleines Handbuch zur Fotogalerie der Pixel AG

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Anleitung Redmine. Inhalt. Seite 1 von 11. Anleitung Redmine

MPDS4 MODELLE IMPORTIEREN

Mathematische Grundlagen der Informatik 2

Summenbildung in Bauteiltabellen mit If Then Abfrage

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Anleitung zur Prüfungsmeldung im SB-Portal

HIER GEHT ES UM IHR GUTES GELD ZINSRECHNUNG IM UNTERNEHMEN

Übung 9 - Lösungsvorschlag

1 Vom Problem zum Programm

Spiel und Spaß im Freien. Arbeitsblat. Arbeitsblatt 1. Zeichnung: Gisela Specht. Diese Vorlage darf für den Unterricht fotokopiert werden.

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Grundlagen der Theoretischen Informatik, SoSe 2008

Übungen Programmieren 1 Felix Rohrer. Übungen

Kapitel 2. Methoden zur Beschreibung von Syntax

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Kurzanleitung OOVS. Reseller Interface. Allgemein

Anleitung über den Umgang mit Schildern

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

1. Weniger Steuern zahlen

ACDSee Pro 2. ACDSee Pro 2 Tutorials: Übertragung von Fotos (+ Datenbank) auf einen anderen Computer. Über Metadaten und die Datenbank

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

Java-Programmierung mit NetBeans

Das sagt die UN-Behinderten-Rechts-Konvention zu Barriere-Freiheit Wie barriere-frei ist Deutschland?

15.3 Bedingte Wahrscheinlichkeit und Unabhängigkeit

Studentische Lösung zum Übungsblatt Nr. 7

Satzhilfen Publisher Seite Einrichten

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen

Formale Systeme. Binary Decision Diagrams. Prof. Dr. Bernhard Beckert WS 2010/2011 KIT INSTITUT FÜR THEORETISCHE INFORMATIK

Suchmaschinen. Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6

Mediator 9 - Lernprogramm

Zahlensysteme. von Christian Bartl

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Objektorientierte Programmierung

Wortproblem für kontextfreie Grammatiken

4 Aufzählungen und Listen erstellen

IT-Basics 2. DI Gerhard Fließ

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Zeichen bei Zahlen entschlüsseln

PVL 3 - Roulette. (5 Punkte) Abgabe bis

FH-SY Chapter Version 3 - FH-SY.NET - FAQ -

Einrichtung eines Zugangs mit einer HBCI-Chipkarte bei der Commerzbank

Zusammenführen mehrerer Dokumente zu einem PDF In drei Abschnitten erstellen Sie ein Dokument aus mehreren Einzeldokumenten:

Einführung in die Theoretische Informatik

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Einführung in LINUX Der Editor vi

SEP 114. Design by Contract

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

7 Rechnen mit Polynomen

Die Größe von Flächen vergleichen

Bitte wenden. Name: KURSARBEIT NR. 4 (10 DIFF GA) Seite 1

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Die integrierte Zeiterfassung. Das innovative Softwarekonzept

Virtuelle COM-Schnittstelle umbenennen

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Transkript:

Äquivalente Grammatiken / attributierte Grammatik Linksfaktorisierung Elimination von Linksrekursion Umwandlung von EBNF in BNF Attributierte Grammatik Semantikfunktionen und Übersetzungsschema Synthetisierte, ererbte und L-attributierte Grammatik

Linksfaktorisierung Eingabe: Eine Grammatik G. Ausgabe: Eine äquivalente links-faktorisierte Grammatik. Methode:Bestimme für jedes Nichtterminal A dasjenige α, das längstes gemeinsames Präfix zweier oder mehrerer Alternativen von A ist. Wenn es ein nichttriviales gemeinsames Präfix gibt (α ε,), ersetze alle A- Produktionen A α β1 α β2... α βn γ (wobei γ für alle nicht mit α beginnenden Alternativen steht), durch A α A' γ A' β1 β2... βn Dabei ist A' ein neues Nichtterminal. Wiederhole diese Transformation so lange, bis es für kein Nichtterminal mehr Alternativen mit gemeinsamem Präfix gibt.

Beispiel für Linksfaktorisierung stmt if expr then stmt if expr then stmt else stmt other Faktorisierung: stmt if expr then stmt else-teil other else-teil else stmt ε (In diesem Fall ist die faktorisierte Grammatik immer noch mehrdeutig)

Elimination von Links-Rekursion ersetze Grammatik-Regeln der Form A A α A β durch: A β A A α A A ε Beispiel: ergibt: E E + T E T β = T E T R R + T R R ε A = R A = E, α = + T

Vergleich EBNF / BNF Die etwas einfacher aussehenden Regeln der EBNF lassen sich einfach in BNF umsetzen, indem einfach für komplexe EBNF-Konstrukte neue Regeln definiert werden (das zeigt auch den formalen Zusammenhang von EBNF und BNF): E T (+ T )* ergibt: E T R Idee: R ( + T )* R + T R R ε

Attributierte Grammatiken Ordne jedem Grammatiksymbol ein Attribut zu Die Attribute der Terminalsymbole werden durch den Scanner definiert Die Attribute der Nichtterminalsymbole werden durch Semantikfunktionen definiert. Semantische Funktionen mit Seiteneffekt heißen Übersetzungsschema Beispiel 1 (synthetisierte Attribute): // Übersetzungsschema E:a E:b + T:c // a = b + c // System.out.println("+"); E:a T:b // a = b // System.out.println(b); Beispiel 2 (ererbte Attribute): E:a T:b R:{c,d} // a = d; c = b R:{a,b} + T:c R:{d,e} // b = e; d = a + c R:{a,b} ε // b = a;

Weitere Beispiele 1. L-attributiert (ererbt von links nach rechts) decl type:a varlist:b // b = a varlist:a var:b // declare(b, a) varlist:a var:b COMMA varlist:c // declare(b, a); c = a type:a INT // a = INT_TYPE type:a FLOAT // a = FLOAT_TYPE 2. Nicht L-attributiert decl VAR varlist:a COLON type:b // a = b 3. S-attributiert (synthetisiert) decl type:a varlist :b // declareall(b, a) varlist:a var:b // a = new List(b) varlist:a var:b COMMA varlist:c // a = prepend(b, c)

Mögliche Übersetzungsaktionen Direkte Auswertung (Kommandosprache, arithmetische Ausdrücke) Direkte Übersetzung (einfacher Bytecode, einfache Quelltextänderung) Speicherung der Information in Datenbank (z.b. XML-Parser) Speicherung von Information in Symboltabellen (Deklarationen) Erzeugung eines abstrakten Syntaxbaums Ein abstrakter Syntaxbaum (+ Symboltabelle) erfordert eine nachfolgende Weiterverarbeitung (Typprüfung, Optimierung, Auswertung, Codegenerierung)

EBNF-erweitert um Auswertung von Ausdrücken Die Grundidee einer Erweiterung einer Syntaxerkennung um Übersetzungsaktionen besteht darin, zunächst den Syntaxsymbolen Attribute, d.h. Werte zuzuordnen (String, Zahl, Objekt) und dann in die Syntaxregeln Programmiersprachkonstrukture einzubetten. Bei einem LL(1) Parser ist die richtige Abfolge der Aktionen immer gewährleistet, da die Abarbeitung der Regeln streng deterministisch (innerhalb einer Regel von links nach rechts) verläuft. Die genaue Form der Formulierung hängt bei LL(1) Generatoren vom verwendeten Werkzeug ab. Bei rekursivem Abstieg, wird einfach, das Programm zur Syntaxerkennung geeignet erweitert. Da die Symbolerkennung beim Scanner ihren Ausgangspunkt nimmt, muss natürlich bereits der Scanner die nötigen Informationen (Zahlenwerte, Strings) weitergeben. Auf einer etwas theoretischeren Ebene bezeichnet man eine entsprechend erweiterte Grammatik als attributierte Grammatik (BNF+Regeln am Ende) bzw. in der gerade besprochenen relativ freien Form als Übersetzungsschema. In dem folgenden Beispiel werden Attrribute (im rekursiven Abstieg) rekursiv verarbeitet.

EBNF-erweitert um Auswertung von Ausdrücken expression term:s ( + term:t {s+=t;} )* {RESULT=s;} term z:z {RESULT=z;} ( expression:e ) {RESULT=e;} double expression() { double sum = term(); while (lookahead() == PLUS) { // ( + term )* match(plus); sum += term(); } return sum; } double term() { if (lookahead() == ZAHL) { match(zahl); return tokenvalue(); } else if (lookahead() == KLAUF) { match(klauf); double returnvalue = expression(); match(klzu); return returnvalue; } else throw new SyntaxException(); }