Compilerbauhome Compilerbau: Lexikalische Analyse Prof. Dr. Uwe Schmidt FH Wedel

Lexikalische Analyse

weiter

weiter

Aufgabe
Zerlegung des Eingabe-Zeichenstrom in Symbole der Programmiersprache
 
Überlesen von nicht signifikanten Zeichen, wie Leerraum und Kommentar
weiter
Tokens
ein selbstdefiniertes Alphabet für die Symbole einer Programmiersprache
weiter
Spezifikation
der Symbole durch reguläre Ausdrücke
weiter
Wiederholung
reguläre Ausdrücke: Notation
 
ε (oder nichts)
z für alle z ∈ A
r1 | r2
r1 ⋅ r2 (oder r1r2)
r*
r+ Abkürzung für rr*
r? Abkürzung für r|ε
r{n} Abkürzung für n-fache Wiederholung: r...r
r{0} = ε
r{1} = r
r{n} = r(r{n-1}) für n > 1
r{n,} Abkürzung für mindestens n-fache Wiederholung
r{0,} = r*
r{n,} = r(r{n-1,}) für n > 0
r{n,m} Abkürzung für n-fache bis m-fache Wiederholung
r{n,n} = r{n}
r{0,m} = r?r{0,m-1} für m > 0
r{n,m} = r(r{n-1,m-1}) für n > 0, m > n
[z1-z2] (Abkürzung für z1|...|z2)
. (Abkürzung für ein beliebiges Zeichen, oft außer \n)
\n, \t, \[, \. (Ersatzsequenzen, Maskieren von einzelnen Zeichen)
"..." (Maskieren von Zeichenfolgen)
(...) Prioritätenklammern
weiter
Beispiel
R.E.Symbol
ifIF
[a-z][a-z0-9]*ID
[0-9]+NUM
([0-9]+"."[0-9]*)|("."[0-9]+)REAL
([ \n\t]+)|("--"[a-z]*\n)WHITESPACE
.ERROR
weiter
Anforderungen
an die Beschreibung
weiter
vollständig
Jedes Eingabezeichen muss zu mindestens einem R.E. passen.
genauer
Jede Zeichenfolge muss mit Hilfe der Liste der R.E.s in eine Symbolfolge zerlegt werden können.
weiter
default-Regel als letzter R.E. im Beispiel
weiter
eindeutig
Jedem Textmuster muss genau ein Symbol zugeordnet werden.
genauer
Jede Zeichenfolge muss mit Hilfe der Liste der R.E.s in GENAU eine Symbolfolge zerlegt werden können.
weiter
1.Problem
if8
  • ID("if8")
  • IF
    NUM("8")
weiter
Lösung:
longest match
Der längste Präfix, der auf einen R.E. passt wird als nächstes Symbol verarbeitet.
weiter
2.Problem
if
  • IF
  • ID("if")
weiter
Lösung:
Prioritäten
Der erste passende R.E. wird gewählt.
weiter
Konsequenz
Die Reihenfolge der R.E.s in der Spezifikation ist signifikant.
weiter
R.E.s und E.A.s
weiter
Reguläre Ausdrücke
sind deskriptiv
 
beschreiben WAS gemacht werden soll
weiter
Endliche Automaten
sind operational
 
beschreiben WIE etwas gemacht wird
weiter
Ziel
Zu jedem R.E. einen gleichwertigen endlichen Automaten konstruieren.
weiter
?
Was heißt gleichwertiger Automat?
weiter
Ziel
für die lexikalische Analyse:
Für die Kombination aller Ausdrücke ist ein R.E. (und E.A.) gesucht.
weiter
Alle R.E.s mit | zu einem zusammensetzen.
 
Alle Teilautomaten zu einem Automaten zusammenschalten,
die Startzustände zu einem Startzustand zusammenfassen.
weiter
Problem
Es entsteht ein nichtdeterministischer endlicher Automat.
weiter
Lösung
Konstruktion eines gleichwertigen deterministischen endlichen Automaten.
weiter
Arbeitsweise
eines D.E.A. bei der Zerlegung der Eingabe in eine Folge von Tokens
 
Erkennung der längsten passenden Zeichenfolge.
weiter

Letzte Änderung: 14.02.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel