Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

0 Seminar Übersetzung künstlicher Sprachen im SS 2009 Lexikalische Analyse, Lex Karin Pietzonka.

Ähnliche Präsentationen


Präsentation zum Thema: "0 Seminar Übersetzung künstlicher Sprachen im SS 2009 Lexikalische Analyse, Lex Karin Pietzonka."—  Präsentation transkript:

1 0 Seminar Übersetzung künstlicher Sprachen im SS 2009 Lexikalische Analyse, Lex Karin Pietzonka

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

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

4 3 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

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

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

7 6 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

8 7 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

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

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

11 10 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

12 11 Token Elementarbaustein selbstbestimmtoptional, z. B. Zeiger auf Symboltabelle oder Ausprägungen des Token TokenBeispielBeschreibung idabcd, Dipl.-Ing., E150d Buchstabe, auf den Buchstaben/Ziffern folgen num3, , 0alle 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

13 12 Reguläre Ausdrücke ( `+` + `-`) ? ( ) + (, ( ) + )? Basis für die Beschreibung der zu erkennenden Muster Darstellung einer Kommazahl 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 (+| - |ε)

14 13 Reguläre Sprachen und Definitionen Reguläre Sprachen: 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 ( )

15 14 Endliche Automaten Darstellung regulärer Ausdrücke durch Übergangsdiagramme StartzustandZustands- übergang Endzustand

16 15 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

17 16 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

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

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

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

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

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

23 22 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?

24 23 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

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

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

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

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

29 28 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

30 29 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

31 30 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

32 31 lex-Programm %{ #include #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);} % Beispiel: einfacher Taschenrechner

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

34 33 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 Tabellengesteuerter Automat in C Schnittstelle zum Parser-Generator yacc Implementierungsmöglichkeiten in Modula-2 GLA, Sable CC, ALEX, COCO, VCC, …

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

36 35 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

37 36 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

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

39 38 Back-Up

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

41 40 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}.

42 41 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

43 42 Endliche Automaten Definition EA = (Q,, δ, q 0, F) Q: endliche Menge von Zuständen : endliche Menge von Eingabesymbolen δ: Q × Q Übergangsfunktionen q 0 Q: Startzustand F Q: Endzustand Regulärer Ausdruck wird akzeptiert, wenn der EA einen Endzustand erreicht akzeptierte Sprache

44 43 Endliche Automaten Darstellungsformen Übergangsdiagramm Tupel EA = (Q,, δ, q 0, F) Übergangstabelle Zustand/ Übergang +-εZiffer, q0q0 q1q1 q1q1 q1q1 q1q1 q2q2 q2q2 q2q2 q3q3 q3q3 q4q4 q4q4 q4q4

45 44 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

46 45 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

47 46 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

48 47 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

49 48 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


Herunterladen ppt "0 Seminar Übersetzung künstlicher Sprachen im SS 2009 Lexikalische Analyse, Lex Karin Pietzonka."

Ähnliche Präsentationen


Google-Anzeigen