Attributierte Grammatiken

Ähnliche Dokumente
Einführung - Parser. Was ist ein Parser?

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

Kapitel 5: Syntaxdiagramme und Grammatikregeln

Syntaxanalyse Ausgangspunkt und Ziel

Kapitel 2. Methoden zur Beschreibung von Syntax

Von der Grammatik zum AST

Attributierte Grammatiken

Einführung in die Programmiertechnik

Kapitel 4: Syntaxdiagramme und Grammatikregeln

Sprachen sind durch folgenden Aufbau gekennzeichnet:

Grundlagen der Programmierung 3 A

Compilerbau Syntaxanalyse 68. LR(1)-Syntaxanalyse

Lexikalische Analyse, Tokenizer, Scanner

Lexikalische Programmanalyse der Scanner

Alphabet, formale Sprache

Einführung in die Informatik. Programming Languages

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

Deterministischer Kellerautomat (DPDA)

Theoretische Grundlagen der Informatik

Software Entwicklung 1

3 Syntax von Programmiersprachen

Shift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion

Konstruieren der SLR Parsing Tabelle

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

Theoretische Informatik I

5. Syntaxanalyse und der Parser-Generator yacc. 5.5 Aufsteigende Analyse. Absteigende Analyse versus aufsteigende Analyse. 5.5 Aufsteigende Analyse

MODIFIKATIONEN DES TOMITA-PARSERS FÜR ID/LP UND FEATURE GRAMMARS Jens Woch

LPalin-Bin & GPalin-Bin

Shift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion

Abstrakte Syntax von Prolog (1)

3 Syntax von Programmiersprachen

Grammatiken in Prolog

Compilerbau 12. Übungsblatt, Sommersemester 2015 Abgabetermin:

Fachseminar Compilerbau

Kapitel 2: Methoden zur Beschreibung von Syntax

Übersicht: Inhalt und Ziele. Kapitel 2: Methoden zur Beschreibung von Syntax. Aufbau von Programmen. Syntax von Programmiersprachen

Äquivalente Grammatiken / attributierte Grammatik

Inhalt Kapitel 11: Formale Syntax und Semantik

Theoretische Informatik I

7. Syntax: Grammatiken, EBNF

Syntax von Programmiersprachen

9 Compilerbau-Werkzeuge

Universität Duisburg - Essen

Fragenkatalog 2. Abgabegespräch Formale Modellierung 3 Reguläre Sprachen

Syntax von Programmiersprachen

Kontextsensitive Sprachen

Übersetzerbau Cluj-Napoca, Rumänien 2007

Programmierkurs Java

Theoretische Informatik I

Ein Ausflug in den Compilerbau

Einführung in die Informatik. Programming Languages

Grundlagen der Programmierung 2 (Comp-A)

Compilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dr. Andreas Kunert Dipl.-Inf.

Berechnung kürzester Wege

Automaten und formale Sprachen Klausurvorbereitung

3.1 Reservierte Wörter

Definition Compiler. Bekannte Compiler

Tagesprogramm

Theoretische Grundlagen der Informatik

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

Theoretische Grundlagen der Informatik. Vorlesung am 8. Januar INSTITUT FÜR THEORETISCHE INFORMATIK

Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte

1 Attributierte Grammatiken. 2 Zyklische AG. 3 Codeerzeugung mit AGs. Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 28

So schreiben Sie ein Parser-Programm

Formale Sprachen. Inhaltsverzeichnis. M. Jakob. 10. Dezember Allgemeine Einführung. Aufbau formaler Sprachen

6 Kontextfreie Grammatiken

3.4 Struktur von Programmen

Theoretische Grundlagen der Informatik

Formale Sprachen und Automaten

VOM PROBLEM ZUM PROGRAMM

Vorlesung Programmieren

Formale Sprachen und Automaten

Der Compilergenerator Coco/R

Seminar. Algorithmische Geometrie

LR-Parsing. Präsentation vom 19. Dez Adriana Kosior, Sandra Pyka & Michael Weidauer. Automatische Syntaxanalyse (Parsing) Wintersemester 12/13

Parsing regulärer Ausdrücke. Karin Haenelt

Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen

2.2 Syntax, Semantik und Simulation

5.5 Aufsteigende Analyse. 5.5 Aufsteigende Analyse (2) Typische Konflikte. Konflikte

Bericht 1/90. fur Top-Down-Parser mit. automatischer Fehlerbehandlung

Syntax von Programmiersprachen

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen

Universität Duisburg - Essen

Simulation und Testen von Algorithmen

Punktrechnung geht vor Strichrechnung 3*4 + 5 = = 17. Das Minuszeichen vor einem Produkt ändert nur bei einem Faktor das Vorzeichen.

Formale Sprachen und Grammatiken

SYNTAXGESTEUERTE ÜBERSETZUNG

Grundlagen der Informatik III Wintersemester 2010/ Vorlesung Dr.-Ing. Wolfgang Heenes

Grammatiken und ANTLR

Praktikum Compilerbau Sitzung 4 Abstrakter Syntaxbaum

Transkript:

Attributierte Grammatiken O.Univ.-Prof. Dipl.-Ing. Dr. Wolfgang Pree www.softwareresearch.net Copyright Software Research Lab, All Rights Reserved

Inhalt Merkmale attributierter Grammatiken Beispiel 2

Merkmale attributierter Grammatiken (ATG) 3

Allgemeine Merkmale von ATG Datenorientierte Entwurfsmethode Grundidee: Eingangsinformation steuert Verarbeitungsprozeß maßgeblich Beschreibung der Daten durch eine Grammatik Erweitern der Grammatik durch "Übersetzungsaktionen" Verwendung bewährter Techniken des Übersetzerbaus(lexikalische Analyse, Syntaxanalyse) 4

Wann sind ATG anwendbar? wenn im wesentlichen ein Eingabestrom vorliegt wenn Eingabeinformation genügend strukturiert ist ATG sind geeignet für Entwurf von Programmen Spezifikation von Programmen Dokumentation von Programmen 5

Algorithmische Interpretation von ATG (I) Grammatikregeln werden als Erkennungsprozesse aufgefaßt. Das aus der Grammatik abgeleitete Programm heißt Syntaxanalysator (Parser) Es setzt einen lexikalischen Analysator voraus, der Terminalsymbole erkennt und liefert. Arbeitsweise des Syntaxanalysators Jede Ableitungsregel wird von links nach rechts durchlaufen Zur Alternativenauswahl wird das nächste Eingabesymbol verwendet Bei jedem Terminalsymbol fordert der Syntaxanalysator vom lexikalischen Analysator das nächste Eingabesymbol an Bei jedem Nonterminalsymbol unterbricht der Syntaxanalysator die Abarbeitung der laufenden Regel arbeitet das angetroffene Nonterminalsymbol ab setzt dann an der Abbruchstelle fort. 6

Semantische Aktionen in Ableitungsregeln Schreibweise: Pseudocode zwischen "sem" und "endsem" Beispiel 1: Zählung der Buchstaben eines Wortes Wort = Buchstabe sem b:=1 endsem { Buchstabe sem b:=b+1 endsem } sem Write(b," Buchstaben") endsem. Beispiel 2: Binärzahl in umgekehrte Reihenfolge transformieren BinZahl = "0" [BinZahl] sem Write("0") endsem "1" [BinZahl] sem Write("1") endsem. 7

Semantische Werte der Grammatiksymbole Ausgangsattribute entstehen bei der Erkennung eines Symbols entsprechen Ausgangsparametern Eingangsattribute werden einem Symbol zu seiner Erkennung mitgegeben entsprechen Eingangsparametern Beispiele Ziffer wert Telegramm words longwords BewegungsSatz stammnr 8

Entwurfsvorgang mit ATG Syntaktische Struktur der Eingabe als kontextfreie Grammatik darstellen Attribute für den Verarbeitungsprozeß finden Semantische Werte von Symbolen überlegen Angabe mit Name, Typ und Bedeutung Attributierte Grammatiksymbole spezifizieren Semantische Prozeduren spezifizieren ausserhalb der Grammatik definierte Prozeduren Attributierte Grammatik aufstellen 9

ATG-Beispiel: Bewegung eines Roboterarms 10

ATG-Beispiel Verbale Formulierung Die Eingabe beginnt mit den Koordinaten des Startpunkts, auf die beliebig viele lineare und kreisförmige Teilbewegungen folgen können. Die Eingabe wird mit dem Code E abgeschlossen. Die Beschreibung einer linearen Teilbewegung beginnt mit der Anzahl der Einzelschritte, die benutzt werden sollen, um den Zielpunkt anzusteuern. Darauf folgen der Code L und die Koordinaten des Zielpunkts. Die Beschreibung einer Kreisbewegung beginnt ebenfalls mit der Anzahl der (linearen) Einzelschritte, auf die der Code C und die Koordinaten eines Übergangspunktes und des Zielpunkts folgen. Der Zielpunkt soll in einer Kreisbahn angesteuert werden, auf der der Übergangspunkt liegt. 11

ATG-Beispiel Punkt-Koordinaten werden durch drei ganze Zahlen zwischen 0 und 2000 angegeben, die in runde Klammern eingeschlossen und durch Kommas voneinander getrennt werden. Jede Zahl bedeutet eine absolute Millimeterangabe. Wenn ihr ein + oder vorangestellt ist, bedeutet die Zahl eine (zum jeweiligen Ausgangspunkt der Teilbewegung) relative Distanz. Beispiel: (200,100,100) 5 L ( 100,+200,0) 20 C (+700,+700,+1200) (+0,+1400,+0) E 12

ATG-Beispiel Bedeutung: Start beim Punkt x=200, y=100, z=100. Lineare Bewegung in 5 Schritten zum Punkt x=100, y=300, z=0. Kreisbewegung in 20 Schritten zum Punkt x=100, y=1700, z=0, wobei der Punkt x=800, y=1000, z=1200 auf der Kreisbahn liegen soll. 13 Nachteile von verbalen Beschreibungen: oft unklar; nur durch Beispiele verständlich ungenau (wo sind Leerzeichen vorgeschrieben, bzw. wo dürfen welche stehen?) Formulierungsregeln mit Nebenbedingungen und Bedeutungsangaben vermischt

ATG-Beispiel Robo = Position { Move } E. Position = ( Coordinate, Coordinate, Coordinate ). Move = Number ( L Position C Position Position ). Coordinate = [ + ] Number. Number = digit { digit }. Terminalsymbole: L, C, E, +,, (,,, ), Terminalklasse: digit Nonterminalsymbole: Robo, Position, Move, Coordinate, Number, Space 14

ATG-Beispiel Robo erkennt eine vollständige Bewegungsbeschreibung Position <x0, y0, z0, x, y, z> erkennt eine Position mit den Koordinaten x, y und z. x0, y0 und z0 bedeuten die Ursprungsposition, auf die sich relative Koordinatenangaben beziehen. Move <x0, y0, z0, x, y, z> erkennt eine Bewegung beginnend bei (x0,y0,z0) und liefert den Endpunkt (x,y,z) der Bewegung. Coordinate <v0, v> erkennt eine Koordinate mit dem Wert v. v0 ist ein Ursprungswert, auf den sich relative Angaben beziehen. Number <v> erkennt eine ganze Dezimalzahl mit dem Wert v. Space erkennt eine beliebig lange Folge von Leerzeichen, die auch leer sein kann. 15 digit <d> erkennt eine Ziffer mit dem Wert d.

ATG-Beispiel Robo = Space Position <0, 0, 0, x0, y0, z0> sem InitMoves(x0, y0, z0) endsem { Move <x0, y0, z0, x, y, z> sem x0:=x; y0:=y; z0:=z endsem } E Space. 16

ATG-Beispiel Position <x0, y0, z0, x, y, z> = ( Space Coordinate <x0, x>, Space Coordinate <y0, y>, Space Coordinate <z0, z> ) Space. 17 Coordinate <v0, v> = sem sign:= endsem [ + sem sign:= + endsem sem sign:= endsem ] Number <v> sem if sign= + then v:=v0+v; else if sign= then v:=v0 v endsem.

ATG-Beispiel Move <x0, y0, z0, x, y, z> = Number <steps> ( L Space Position <x0, y0, z0, x, y, z> sem AddLine(x, y, z, steps) endsem C Space Position <x0, y0, z0, x1, y1, z1> Position <x0, y0, z0, x, y, z> sem AddArc(x, y, z, x1, y1, z1, steps) endsem ). 18

ATG-Beispiel Number <v> = digit <d> sem v:=d endsem { digit <d> sem v:=10*v+d endsem } Space. Space = { }. 19

ATG-Beispiel Semantische Routinen: Datenkapsel Moves zur Verwaltung einer Liste von Teilbewegungen mit folgenden Zugriffsroutinen: InitMoves(x0, y0, z0) Initialisiert die Teilbewegungsliste mit dem Startpunkt (x0,y0,z0). AddLine(x, y, z, steps) Erweitert die Teilbewegungsliste um eine lineare Bewegung zum Punkt (x,y,z) in steps Schritten. AddArc(x, y, z, x1, y1, z1, steps) Erweitert die Teilbewegungsliste um eine kreisförmige Bewegung über den Punkt (x1,y1,z1) zum Punkt (x,y,z) in steps Schritten. 20