Agenda Motivation Lexikalische Analyse Generierung eines Scanners

Slides:



Advertisements
Ähnliche Präsentationen
Fast Fourier Transformation
Advertisements

Claudio Moraga; Gisbert Dittrich
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Zusammenfassung der Vorwoche
10. Grundlagen imperativer Programmiersprachen
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
Technische Universität Dortmund
Imperative Programmierung
Kapitel 4 Syntaktische Analyse: LR Parsing.
Parser generieren Yet Another Compiler – Compiler YACC.
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
Parser - Verfahren: Rekursiver Abstieg
Sortierverfahren Richard Göbel.
Algorithmentheorie 04 –Hashing
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (02 – Endliche Automaten) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (05 – Reguläre Ausdrücke) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (04 – Automaten mit ε-Transitionen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (03 – Nichtdeterminierte endliche Automaten) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
Grundkurs Theoretische Informatik, Folie 2.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 2 Gottfried Vossen Kurt-Ulrich Witt.
Reguläre Sprachen Karin Haenelt.
© Karin Haenelt 2006, Äquivalenzen Reg.Ausdrücke, Reg.Sprachen, EA ( ) 1 Reguläre Sprachen Karin Haenelt.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Agenda Motivation Formale Sprachen Compiler Compilerentwicklung
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Grundlegende Analysen & Zwischendarstellungen
Christian Schindelhauer
Christian Schindelhauer
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
14StrukturKlasse1 Von der Struktur zur Klasse von C zu C++ Von Jens Hoffmann
1. 2 Schreibprojekt Zeitung 3 Überblick 1. Vorstellung ComputerLernWerkstatt 2. Schreibprojekt: Zeitung 2.1 Konzeption des Kurses 2.2 Projektverlauf.
20:00.
„Küsse deine Freunde“ – FlexKom-App teilen
TWS/Graph HORIZONT Produkt-Präsentation Software für Rechenzentren
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Syntaxanalyse Bottom-Up und LR(0)
Effiziente Algorithmen
Polynome und schnelle Fourier-Transformation
NEU! 1 2. Wo kommt diese Art von Rezeptor im Körper vor?
Analyse von Ablaufdiagrammen
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
PROCAM Score Alter (Jahre)
Programmierung 1. Einführung Seite 1
Vorlesung Mai 2000 Konstruktion des Voronoi-Diagramms II
Formale Sprachen Reguläre Sprachen Rudolf FREUND, Marian KOGLER.
Entwurf und Implementierung eines Scanner-Generatorsystems
MINDREADER Ein magisch - interaktives Erlebnis mit ENZO PAOLO
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Beispiele: KFG 2.Teil Beispiel 1: Sei G eine Grammatik mit den folgenden Regeln: S  Ac | Bd A  aAb | ab B  aBbb | abb Definieren Sie.
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Christian Schindelhauer Wintersemester 2006/07 2. Vorlesung
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Mensch – Maschine - Kommunikation
Wintersemester 2005 / Vorlesung
Institut für Softwarewissenschaft – Universität WienP.Brezany 1 Beispiele (Frist: ) Beispiel 1: Sei  = {a, b} ein Alphabet und Q = {q 0, q 1 } eine.
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Inhalt Einordnung und Funktion der lexikalische Analyse Grundlagen
(Syntax, Strings/Zahlen, Variablen, Arrays)
Anmerkung des Autor Diese Präsentation ist mit Powerpoint für MacOS erstellt. Leider ist sie nicht vollständig mit Powerpoint für Windows kompatibel.
Gliederung 0. Motivation und Einordnung 1. Endliche Automaten
 Präsentation transkript:

Lexikalische Analyse, Lex Karin Pietzonka

Agenda Motivation Lexikalische Analyse Generierung eines Scanners Einordnung Verfahren Generierung eines Scanners Anforderungen Manuelle Generierung Der Scannergenerator lex Weitere Scannergeneratoren Zusammenfassung & Ausblick

Motivation Motivation Lexikalische Analyse Generierung eines Scanners Einordnung Verfahren Generierung eines Scanners Anforderungen Manuelle Generierung Der Scannergenerator lex Weitere Scannergeneratoren Zusammenfassung & Ausblick

Motivation Compilerbau seit 1952 (Grace Hopper) Aufgabe: Quellprogramm Zielprogramm Wie kommt das Quellprogramm in den Compiler? Sollen bzw. müssen alle Zeichen verarbeitet / umgewandelt werden? Wie beginnt die Umwandlung des Quellprogramms? … → lexikalische Analyse Compiler

Lexikalische Analyse Motivation Lexikalische Analyse Einordnung Verfahren Generierung eines Scanners Anforderungen Manuelle Generierung Der Scannergenerator lex Weitere Scannergeneratoren Zusammenfassung & Ausblick

Einordnung Compiler ist in Phasen gegliedert Frontend: Analysiert, strukturiert und prüft den Quelltext auf Fehler Backend: Erzeugung des Zielprogramms

Aufgaben der lexikalischen Analyse Scannen Einlesen / Scannen der Eingabezeichen des Quellprogramms mit Hilfe eines Lexers / Scanners Kommentaren und Leerraum entfernen Fehlermeldungen zuordnen Lexikalische Analyse i.e.S. Eingabezeichen nach Mustern absuchen Zu Lexemen gruppieren Zuweisung von Token

Trennung lexikalische und syntaktische Analyse Generell ist Zusammenarbeit der lexikalischen und syntaktischen Analyse möglich Vorteile der Trennung Vereinfachung eines Sprachentwurfs Effizienzverbesserung Erhöhung der Portabilität

Trennung lexikalische und syntaktische Analyse Häufige Implementierung: Scan on demand

Lexikalische Analyse - Verfahren Motivation Lexikalische Analyse Einordnung Verfahren Generierung eines Scanners Anforderungen Manuelle Generierung Der Scannergenerator lex Weitere Scannergeneratoren Zusammenfassung & Ausblick

Einstiegsbeispiel Definition beliebiger Tokenklassen, z. B. Satzbausteine Lexikalische Analyse sucht nach Mustern, die in Tokenklassen definiert wurden Ein Mann steigt in sein blaues Auto . artikel nomen verb präposition pronomen adjektiv nomen punkt

Token Elementarbaustein <Tokenname, Attributwert> selbstbestimmt optional, z. B. Zeiger auf Symboltabelle oder Ausprägungen des Token Token Beispiel Beschreibung id abcd, Dipl.-Ing., E150d Buchstabe, auf den Buchstaben/Ziffern folgen num 3, 26.587, 0 alle Zahlen comp <, >, =, !=, <=, >= alle Vergleichssymbole op +, -, /, * die Grundoperatoren saz (, ), ;, ,, … andere Satzzeichen (Klammern, Semikolon etc.) if das Wort if else das Wort else literal „ Ausgabe“ alles, was in Anführungszeichen steht op +, -, /, * die Grundoperatoren

Reguläre Ausdrücke Basis für die Beschreibung der zu erkennenden Muster Darstellung einer Kommazahl ( `+` + `-`) ? (0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 ) + (, (0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 ) + )? Zusammengehörige Abschnitte mit „(…)“ Konkatenation einzelner Teile „+“ oder „|“: Auswahl der Elemente (vereinigte Menge) „?“: eine oder keine Wiederholung „+“: mindestens eine Wiederholung „*“: beliebig viele Wiederholungen, auch keine Alternative zu „(`+` + `-`)?“ ist (+| - |ε)

Reguläre Sprachen und Definitionen Sprachen, die sich mit Hilfe von regulären Ausdrücken beschreiben lassen Reguläre Definitionen: Um regulären Ausdrücken verständlichere Namen zu geben und Rekursionen zu vermeiden Definition d → regulärer Ausdruck a (wobei a ∊ ∑ und d ∉ ∑) Beispiel: Ziffer → (0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)

Endliche Automaten Darstellung regulärer Ausdrücke durch Übergangsdiagramme Startzustand Zustands-übergang Endzustand

Nichtdeterministischer endlicher Automat (NEA) NEA unterscheidet sich vom EA dadurch, dass aus einem Zustand mehrere Kanten mit der gleichen Beschriftung in verschiedene Zustände laufen können

NEA - EA Aus jedem NEA lässt sich mit dem Verfahren der Potenzmengenkonstruktion ein EA konstruieren EA kürzer und schneller In dem meisten Fällen: erster, intuitiver Entwurf NEA Umwandlung lohnt sich – mehrfache Nutzung während der lexikalischen Analyse

Ausblenden bedeutungsloser Zeichen Pattern-Matching Hauptaufgabe der lexikalischen Analyse: Mustererkennung und Zuordnung von Token Ausblenden bedeutungsloser Zeichen Wortkennung Zuordnung der Token

Worterkennung & Tokenzuordnung Bedingung: Vordefinierte reguläre Ausdrücke Zugeordnete Token Beispiel: EA für „begin“ return (BEGIN);

Worterkennung & Tokenzuordnung Problem: Mehrdeutigkeit Beispiel: „< = “ ein oder zwei Zeichen? Lösungen: Longest match Reservierte Schlüsselwörter

Worterkennung & Tokenzuordnung Reservierte Schlüsselwörter in der Symboltabelle

Generierung eines Scanners Motivation Lexikalische Analyse Einordnung Verfahren Generierung eines Scanners Anforderungen Manuelle Generierung Der Scannergenerator lex Weitere Scannergeneratoren Zusammenfassung & Ausblick

Anforderungen Implementierung des Scanners entscheidet, in welcher Form später die Eingabedaten vorliegen müssen Einfache Fragestellungen Was ist ein Wort für meinen Compiler? - z.B. „BeGin“ = „BEGIN“ Unterscheidung von Groß- und Kleinschreibung? Ist z.B. „Beginnen“ eine ID oder Schlüsselwort BEGIN + ID Sind Zahlen erlaubt? Was passiert mit Wörtern, die aus Zahlen und Buchstaben bestehen? - z.B. Farbstoff E150d Wie werden Wörter mit Bindestrichen behandelt? Was geschieht mit weiteren Zeichen im Quelltext?

Anforderungen Effizienz Eine effiziente lexikalische Analyse dient der gesamten Kompilierung Je schneller der Scanner ein klares und eindeutiges Ergebnis liefert, desto schneller können auch von der Syntaxanalyse und den folgende Phasen Ergebnisse erwartet werden Besonders beim scan on demand ist zügige Bearbeitung erforderlich

Manuelle Generierung Motivation Lexikalische Analyse Einordnung Verfahren Generierung eines Scanners Anforderungen Manuelle Generierung Der Scannergenerator lex Weitere Scannergeneratoren Zusammenfassung & Ausblick

Übergangsdiagramm erstellen Manuelle Generierung Übergangsdiagramm erstellen Beschreibung der Struktur der Symbole bzw. der Muster Programm erkennt Symbole / Token Jeder Zustand erhält Nummer und wird durch Code wiedergegeben Programm erstellen Zuordnung von Token 3 Möglichkeiten

Manuelle Generierung Zuordnung von Token Übergangsdiagramme nacheinander testen Übergangsdiagramme nacheinander testen Übergangsdiagramme parallel testen Übergangsdiagramme parallel testen Ein einziges, zusammengefasstes Übergangsdiagramm

Der Scannergenerator lex Motivation Lexikalische Analyse Einordnung Verfahren Generierung eines Scanners Anforderungen Manuelle Generierung Der Scannergenerator lex Weitere Scannergeneratoren Zusammenfassung & Ausblick

Der Scannergenerator lex Entwickelt in den 70er Jahren Unix – Standardwerkzeug Als Ergänzung zum Parser-Generator yacc Selbst vergleichbar mit einem Compiler, der aus einem lex-Programm ein C-Programm erstellt Vorteile Kürzere Entwicklungszeit im Gegensatz zur manuellen Generierung Besonders für komplizierte und komplexe Probleme geeignet Durch immer gleichen Aufbau bessere Lesbarkeit und leichte Änderungsmöglichkeiten Nutzer benötigt keine umfangreichen Programmier- und Pattern-Matching-Kenntnisse

Der Scannergenerator lex Als Eingabe wird ein lex-Programm akzeptiert Reguläre Ausdrücke definieren den zu erstellenden Scanner / Lexer Programmteil in C / Ratfor, welcher Aktionen beschreibt

lex-Programm Optionaler Deklarations- bzw. Definitionsteil Optionen, Deklarationen von Variablen, manifeste Konstanten z.B. #define Zwischen %{…%} unverändert übernommen Tabelle mit Muster & Aktionen Muster {Aktion} Muster = regulärer Ausdruck Aktion = C-Anweisung(en) Optionale Hilfsfunktionen Lokale Funktionen, die durch Übersetzungsregeln genutzt und in Aktionen eingesetzt werden

lex-Programm Beispiel: einfacher Taschenrechner %{ #include <stdlib.h> #include „global.h“   int tokenwert = NICHTS; /*Programmglobale Variable, der ggfs.Zahlenwert zugewiesen wird*/ int zeilennr = 1; /*Programmglobale Variable, enthaelt immer Nr der aktuellen Eingabezeile*/ %} %% [ \t]+ /*Leer- und Tabzeichen ueberlesen*/ \n {return (ZEILENENDE);} [0-9]+{tokenwert = strtol(yytext,NULL,10); return(ZAHL)} /*strtol wandelt den String aus yytext in eine Zahl um und weist sie tokenwert zu'/ "+" {return (PLUS);} "-" {return (MINUS);} "*" {return (MULT);} "/" {return (DIV);}

Weitere Scannergeneratoren Motivation Lexikalische Analyse Einordnung Verfahren Generierung eines Scanners Anforderungen Manuelle Generierung Der Scannergenerator lex Weitere Scannergeneratoren Zusammenfassung & Ausblick

Weitere Scannergeneratoren Flex Nachfolger von lex Ermöglicht Nutzung unter Windows Schnellere und effizientere Implementierung Tabellengesteuerter Automat in C Schnittstelle zum Parser-Generator yacc Rex GMD – Forschungszentrum Informationstechnik in Karlsruhe Implementierungsmöglichkeiten in Modula-2 GLA, Sable CC, ALEX, COCO, VCC, …

Zusammenfassung & Ausblick Motivation Lexikalische Analyse Einordnung Verfahren Generierung eines Scanners Anforderungen Manuelle Generierung Der Scannergenerator lex Weitere Scannergeneratoren Zusammenfassung & Ausblick

Zusammenfassung Aufgaben der lexikalischen Analyse Einlesen des Quelltextes Mustererkennung mit Hilfe regulärer Ausdrücke Tokenzuordnung Einfache und effiziente Scannererstellung mit Hilfe des Scannergenerators lex Keine umfangreichen Programmierkenntnisse erforderlich Erhebliche Erleichterung bei komplexen Problemen

Ausblick Entwicklung hat trotz 60jähriger Entwicklung noch kein Ende Vielzahl von Scannergeneratoren Erweiterung auf unterschiedliche Programmiersprachen Migrationscompiler, z. B. Umstellung des Toyota-Händlersystems von ROSI-SQL auf C++ Effizienzverbesserung und Kostenreduktion z.B. Übergangstabellenverkleinerung Ständig neue Erkenntnisse auf anderen Gebieten der Forschung, z.B. Größe und Kapazität von Speichermedien und Verbesserung von Prozessoren Neue Techniken für den Compilerbau und somit für die lexikalische Analyse

Lexikalische Analyse, Lex Vielen Dank für eure Aufmerksamkeit!

Back-Up

Back-Up Definition – Reguläre Ausdrücke Definition - EA Darstellungsformen EA Eingabepuffer Probleme Aufwand & Optimierungsmöglichkeiten

Reguläre Ausdrücke Definition Sei ∑ ein Alphabet, d. h. eine nicht leere, endliche Menge von Zeichen bzw. Zeichenreihen, die total geordnet sind. 1. Ø ist ein regulärer Ausdruck und bezeichnet die leere Menge. 2. ε ist ein regulärer Ausdruck und bezeichnet das leere Wort, d. h. die Menge {ε}. 3. a ist ein regulärer Ausdruck und bezeichnet die Menge {a}.

Reguläre Ausdrücke Per Induktion sind folgende Ausdrücke definiert Seien a und b reguläre Ausdrücke, die die Menge A und B beschreiben, dann a) ist (a + b) bzw. (a | b) ein regulärer Ausdruck und bezeichnet die Menge A U B (Vereinigung) b) ist (ab) ein regulärer Ausdruck und bezeichnet die Menge AB (Konkatenation) c) ist (a*) ein regulärer Ausdruck und bezeichnet die Menge A* (Kleen´sche Hülle) d) Außerdem können Klammern um Ausdrücke gesetzt werden, ohne dass sich die zugehörige Sprache ändert. Für bessere Lesbarkeit ist jedoch Klammereinsparung durch definierte Prioritäten von Vorteil

Endliche Automaten Definition EA = (Q, ∑, δ, q0, F) Q: endliche Menge von Zuständen ∑: endliche Menge von Eingabesymbolen δ: Q × ∑ → Q Übergangsfunktionen q0 ∊ Q: Startzustand F ⊆ Q: Endzustand Regulärer Ausdruck wird akzeptiert, wenn der EA einen Endzustand erreicht → akzeptierte Sprache

Endliche Automaten Darstellungsformen Übergangsdiagramm Tupel EA = (Q, ∑, δ, q0, F) Übergangstabelle Zustand/ Übergang + - ε Ziffer , q0 q1 q2 q3 q4

Eingabepuffer Einlesen wird dadurch erschwert, dass oft über das nächste Lexem hinausgeblickt werden muss (Lookahead) Beschleunigung durch Eingabepuffer 2 separate Puffer der Größe N

Probleme Probleme, wie z.B. Mehrdeutigkeiten oder Beschleunigung des Einleseprozesses können gelöst werden Großes Problem: Rechtschreibung Beispiel: „begni“ als Bezeichner identifiziert und bekommt das Token ID anstatt BEGIN zugewiesen

Probleme Lösung: Recovery – Aktionen Beispiel: Panic Mode Recovery Es werden nacheinander so lang Zeichen gelöscht, bis ein bekanntes, einwandfreies Token gefunden wird Weitere Techniken Löschen eines überflüssigen Zeichens Einfügen eines fehlenden Zeichens Ersetzen eines Zeichens Tausch benachbarter Zeichen: „begni“ → „begin“

Aufwand Kaum Studien, die den Aufwand bzw. die Kosten genau bestimmen Schätzungen nach werden ca. 50% der gesamten Ressourcen der Kompilierung für die lexikalische Analyse verwendet z.B. abhängig von: Einsatz von Leerzeichen Verwendung von Schlüsselwörtern Länge der Eingabe Lookahead-Regeln

Optimierungsmöglichkeiten Direkter Aufbau eines EA, ohne den Umweg über einen NEA Kostenreduzierung Ggfs. weniger Zustände Minimierung der Anzahl der Zustände Effiziente Mustererkennung durch Zusammenfassung der Zustände Laufzeit O(n log n), wobei n = Anzahl der Zustände Kompakterer Aufbau der Übergangstabellen