vorlesung compilertechnik sommersemester 2008 grundlagen m. schölzel
TRANSCRIPT
![Page 1: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/1.jpg)
Vorlesung CompilertechnikSommersemester 2008
Grundlagen
M. Schölzel
![Page 2: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/2.jpg)
2
Zeichenketten
Es sei eine abzählbare Menge von Zeichen, Alphabet genannt.
Eine Zeichenkette w ist eine totale Funktion:
Für w schreiben wir auch: w(0)…w(n-1) n ist die Länge der Zeichenkette. Es gibt genau eine Zeichenkette der Länge
0; diese wird mit bezeichnet. Eine Zeichenkette wird auch Wort genannt.
: {0, , 1} , mit - ® S ÎK ¥w n n
![Page 3: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/3.jpg)
3
Formale Sprache
n: Menge aller Zeichenketten über mit der Länge n:
*: Menge aller endlichen Zeichenfolgen über einem Alphabet :
+: Menge aller nicht leeren endlichen Zeichenfolgen über einem Alphabet :
Formale Sprache L: L *
{ }{ }: | : 0, , 1n w w nS = - ® SK
* :Î
S = S¥
U n
n
{0}
: n
n
+
Î -
S = S¥U
![Page 4: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/4.jpg)
4
Syntax
Syntax einer Sprache L legt fest, welche Zeichenketten über einem gegebenen Alphabet zur Sprache L gehören und welche nicht:
Es ist syn(w) = 1 gdw. w L syn ist damit die charakteristische
Funktion (Entscheidungsfunktion) der Menge L.
*: {0,1}S ®syn
![Page 5: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/5.jpg)
5
Operationen auf Wort(meng)en
Länge | . | : * eines Wortes ist definiert als:
Verkettung .. : *** zweier Zeichenketten ist definiert als:
Wir schreiben für auch kurz . Komplexprodukt .. : (*)(*)(*) zweier Wortmengen ist
definiert als:
Die Zeichenkette *ist Präfix der Zeichenkette * ( ) gdw. eine Zeichenkette * existiert, so dass = . ist echter Präfix von , falls ein + existiert, so dass = .
Spiegelung : ** ist definiert als:
{ }: ( , ) |( , )i a i aa b a a b= È + Îo
{ }: | und A B A Bab a b· = Î Î
| |: gdw. nw n w= Î S
*, , wobei und a a ae e a a a= = Î S Î Ss suu su.
![Page 6: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/6.jpg)
6
Grammatik
Mittel zur konstruktiven Definition einer Sprache. Wichtig für den Compilerbau: Neben den Worten, die zu einer
Sprache gehören, wird auch eine Struktur der Worte definiert. Grammatik G = (, M, R, S) mit
M = , S M und R (( M)* - *) ( M)* endlich
Bezeichnungen: Grundsymble/Terminalsymbole/Terminals M Metasymbole/Nicht-Terminalsymbole/Nonterminals V := M Vokabular Worte * sind terminale Worte (Zeichenketten) Worte ( M)* - * sind nichtterminale Worte (Zeichenketten) Jede Regel (l,r) R besitzt eine linke Seite l und eine rechte
Seite r (auch Alternative genannt)
![Page 7: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/7.jpg)
7
Ableitungsrelation
Durch die Regeln R einer Grammatik ist eine Ableitungsrelation definiert:
Statt (, ) schreiben wir auch für den Ableitungsschritt von nach
Eine Folge von Ableitungsschritten , ,…, n-1n wird kurz als …n-1n geschrieben und als Ableitung bezeichnet.
Durch Bildung des reflexiven und transitiven Abschlusses * von kann die durch G erzeugte Sprache definiert werden als:
Mit n wird eine Ableitung mit genau n Schritten bezeichnet Insbesondere folgt aus 0 , dass = Mit + wird eine Ableitung mit mindestens einem Schritt bezeichnet
{ }: ( , ) und und ( , ) Ra b a j cy b j dy c d®= = = Î
{ }* *( ) : |( , ) und = Î ® Î SL G Sa a a
![Page 8: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/8.jpg)
8
Semantik
Eine Möglichkeit die Semantik einer Programmiersprache zu beschreiben ist die denotationale Semantik
Die Semantik ist dann eine Funktion, die jedem Wort einer Sprache L eine Bedeutung zuordnet:
Bedeutungen sind in diesem Fall Funktionen, die einen Speicherzustand in einen anderen Speicherzustand transformieren
Ein Speicherzustand ist eine Variablenbelegung Zu einem gegebenen Wort aus L kann seine
Bedeutung mittels der Semantikfunktion basierend auf der Struktur des Wortes bestimmt werden.
: ®Lsem L B
![Page 9: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/9.jpg)
9
Funktion eines Compiler
Abstrakt kann ein Compiler damit wie folgt beschrieben werden:
Q und Z seien zwei Alphabete Q Q
* sei eine Quellsprache Z Z
* sei eine Zielsprache Ein Compiler ist eine Funktion
comp : Q* Z {error} mit
Wichtig: Der Compiler kennt die Funktionen semQ und semZ nicht.
mit ( ) ( ), falls ( )
, sonstQ Zz sem q sem z q Q
comp qerror
ì = Îïïï= íïïïî
![Page 10: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/10.jpg)
10
Chomsky-Hierarchie
Die Chomsky-Hierarchie klassifiziert Grammatiken ausschließlich auf Grund der Struktur ihrer Regeln nach: Typ-0 – Grammatiken, Typ-1 – Grammatiken, Typ-2 – Grammatiken, Typ-3 – Grammatiken.
![Page 11: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/11.jpg)
11
Typ-0 – Grammatiken
Regeln entsprechen der allgemeinen Form:
R (V *- *) V *
Es ist 0 := {L(G) | G ist Typ 0 – Grammatik} genau die Menge der aufzählbaren Sprachen.
Konsequenz: Nicht alle Sprachen aus 0 können mit Compilern übersetzt werden.
![Page 12: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/12.jpg)
12
Typ-1 – Grammatiken
Regeln entsprechen der Form R (V *- *) V + mit der Einschränkung, dass für alle (, ) R: ein A M, , V*, V+ ex., so dass = A und
= (kontextsensitive Regeln) oder || || (nicht verkürzende Regeln) gilt.
Es ist 1 := {L(G) | G ist Typ-1 – Grammatik} eine Menge von entscheidbaren Sprachen.
In dieser Klasse liegen praktisch alle Programmiersprachen
![Page 13: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/13.jpg)
13
Typ-2 – Grammatiken: kontextfreie Grammatiken (kfG)
Regeln entsprechen der Form: R M V *
Es ist 2 := {L(G) | G ist Typ-2 – Grammatik} die Menge der kontextfreien Sprachen.
Reihenfolge der Ersetzung der Metasymbole in einem Wort beeinflusst nicht dessen Ableitbarkeit zu einer terminalen Zeichenkette.
Diese Klasse ist besonders wichtig für den Compilerbau.
Mittels kontextfreier Grammatiken wird eine Obermenge (in der Regel sogar eine echte Obermenge) K einer Programmiersprache P beschrieben: P K.
![Page 14: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/14.jpg)
14
Typ-3 – Grammatiken
Regelmenge entspricht der Form: R M ((M *) *) oder R M ((* M) *)
Es ist 3 := {L(G) | G ist Typ-3 – Grammatik} die Menge der regulären Sprachen.
Diese Klasse von Sprachen spielt bei der Zerlegung des Quelltextes eine Rolle (vgl. Scanner)
![Page 15: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/15.jpg)
15
Backus-Naur-Form (BNF)
Schreibweise für die Regeln einer kontextfreien Grammatik Wir fassen Grammatikregeln (A,1),…, (A,n) mit der gleichen
linken Seite zu einer BNF-Regel A ::= 1 | … | n zusammen (i wird die i-te Alternative genannt, kurz: [A,i]). Alternativen sind also beginnend bei 1 nummeriert und durch | getrennt.
Grundsymbole werden in Gänsefüßchen eingefasst. Metasymbole werden ohne Gänsefüßchen geschrieben und
dürfen aus Buchstaben, Zahlen und Unterstrich zusammengesetzt werden.
Das Metasymbol auf der linken Seite der ersten BNF-Regel wird als Startsymbol aufgefasst.
Beispiel:S ::= "a" S "b" S | "b" S "a" S | AA ::= | "c" A
![Page 16: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/16.jpg)
16
Notationen und Bezeichnungen für kfG
Bei einer Ableitung 1 2 … n handelt es sich um eine Linksableitung/Rechtsableitung, wenn in jedem Ableitungsschritt das am weitesten links/rechts stehende Metasymbol in i ersetzt wurde (0 < i <n). Ein i wird auch Linkssatzform/Rechtssatzform genannt.
Mit [A] wird die Menge aller Alternativen eines Metasymbols bezeichnet
|[A]| ist die Anzahl der Alternativen zu einem Metasymbol Mit [A,i] wird die i-te Alternative des Metasymbols A
bezeichnet, wobei 1 i |[A]| Mit [A,i,j] wird das j-te Symbol in der i-te Alternative des
Metasymbols A bezeichnet, wobei 1 i |[A]| und 0 j |[A,i]|
Die Menge aller aus einem Metasymbol A ableitbaren terminalen Worte ist definiert als:{ }* *( ) : ( , ) und = Î ® Î SL A Aa a a
![Page 17: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/17.jpg)
17
Erweiterte BNF
Verkürzende Schreibweisen: Iteration:
Auswahl:
Optionale Auswahl:
A ::= … | B | …B ::= B C | C
A ::= … | C+ | …
A ::= … | B | …B ::= B C | A ::= … | C* | …
A ::= … | C | …C ::= 1 | … | n
A ::= … | {1 | … | n} | …
A ::= … | C | …C ::= 1 | … | n |
A ::= … | [1 | … | n] | …
![Page 18: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/18.jpg)
18
Geordneter Baum
Eine Knotenmenge B * ist ein geordneter Baum, falls gilt: B ist endlich, Wenn i B, dann auch ( ist der Vater
des Knotens i), mit * und i , Wenn (i+1) B, dann auch i (i ist der
linke Bruder des Knotens (i+1)), mit * und i .
![Page 19: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/19.jpg)
19
Konkreter Syntaxbaum
Sei : B V eine Markierung der Knoten eines geordneten Baums mit den Symbolen einer kfG G = (, M, S, R). Dann ist (B, ) genau dann ein Syntaxbaum, falls gilt:
() = S B: Falls () = A M dann i mit (A,[A,i]) R so dass
für alle j mit 0 j < |[A,i]| gilt: (.j) = [A,i,j] .|[A,i]| B
B: Falls () = a , dann gilt .0 B Achtung: Nicht jedes Blatt im konkreten
Syntaxbaum ist mit einem Terminalsymbol beschriftet
![Page 20: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/20.jpg)
20
Abstrakter Syntaxbaum
Sei : B V eine Markierung der Knoten eines geordneten Baums und G = (, M, S, R) eine kfG. Dann ist (B, ) genau dann ein abstrakter Syntaxbaum, falls gilt:
() = (S,i) mit 1 i |[S]| B, mit () = (A,i) und
[A,i] = 0A11A2…Ann und i *, Ai M gilt: hat genau n Söhne mit den Beschriftungen (Ak,nk), wobei 1 nk |[Ak]|.
Das bedeutet, dass im abstrakten Syntaxbaum auf die Knoten, die im konkreten Syntaxbaum mit Terminalsymbolen beschrifteten sind, verzichtet werden kann, wenn an jedem Knoten zusätzlich die Nummer der Alternative gespeichert wird, die zur Ableitung verwendet wurde.
![Page 21: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/21.jpg)
21
Linearisierung von Syntaxbäumen
Es sei /i := {(, (i.)) | (i., (i.)) } und n() := | dom| Die Front eines konkreten Syntaxbaums mit Beschriftung ist die
Linearisierung der Beschriftung seiner mit Terminalsymbolen beschrifteten Blätter und ist definiert als front(), wobei
Präfixlinearisierung eines abstrakten Syntaxbaums mit der Beschriftung ist prelin(,), wobei
Postfixlinearisierung eines konkreten Syntaxbaums mit der Beschriftung ist postlin(,), wobei
( / 0) ( / ( )), falls ( )
( ) : , falls
( ), sonst
front front n M
frontes s s s e
s e s
s e
ìï Îïïïïï= = Æíïïïïïïî
K
, falls ( ) :
( ) ( / 0) ( / ( )), sonstprelin
prelin prelin ne
e ss
s e s s s
ì = Æïïï= íïïïîo oK o
, falls ( ) :
( / 0) ( / ( )) ( ), sonstpostlin
postlin postlin ne
e ss
s s s s e
ì = Æïïï= íïïïîoK o o
![Page 22: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/22.jpg)
22
Erstellen von kontextfreien Grammatiken
Nach dem Entwurf einer Grammatik hat diese nicht immer die benötigten Eigenschaften – Ursachen dafür: Grammatik ist mehrdeutig Grammatik hat Linksrekursivitäten Grammatik besitzt -Regeln Grammatik besitzt bestimmte (noch näher zu
spezifizierende) Eigenschaften (nicht), die verschiedene Transformationen verhindern
Im Folgenden: Betrachtung von Techniken zur (bedeutungserhaltenden) Transformation kontextfreier Grammatiken
![Page 23: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/23.jpg)
23
Reduzierte kfG
Wir betrachten nur reduzierte Grammatiken G = (, M, R, S), d.h.: G enthält keine Symbole A M, die aus S
nicht ableitbar sind G enthält keine Symbole A M, die nicht
zu einer terminalen Zeichenkette ableitbar sind
![Page 24: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/24.jpg)
24
Eliminierung von -Regeln in kfG
Gegeben ist eine kfG G = (, M, R, S) Finden der kleinsten Menge R' mit:
Berechnen von R' durch Fixpunktiteration
Streichen aller -Regeln in R' Für die kfG G' = (, M, R', S) gilt:
L(G) – {} = L(G')
{ }( , ) |( , ) und ( , )R' R A A B R' B R'ab a b e= È Î Î
![Page 25: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/25.jpg)
25
Eliminierung von Zyklen in kfG
Eine kfG besitzt einen Zykel, wenn Ableitungen der Form A + A möglich sind.
Entfernen von Zyklen durch Eliminierung von -Regeln und dann von Regeln der Form A B durch: Finden der kleinsten Menge R' mit:
Streiche Regeln der Form A B
{ }( , ) |( , ) und ( , )R' R A C A B R' B C R'a b a b= È Î Î
![Page 26: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/26.jpg)
26
Mehrdeutigkeiten
Eine kfG G ist mehrdeutig, falls zu einem Wort mit S * unterschiedliche Syntaxbäume existieren.
Mehrdeutige Grammatiken sind ungeeignet zur Spezifikation einer Programmiersprache.
Eine Sprache L ist mehrdeutig, falls es keine eindeutige Grammatik für L gibt.
Drei Möglichkeiten der Behandlung: Mehrdeutigkeit kann nicht eliminiert werden (inherent
mehrdeutige Sprache). Transformation der Grammatik in eine eindeutige
Grammatik (nicht automatisierbar). In der Praxis wird teilweise mit mehrdeutigen
Grammatiken gearbeitet und die Mehrdeutigkeit auf anderem Wege (lernen wir später kennen) behandelt.
![Page 27: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/27.jpg)
27
Beispiel: Mehrdeutige Grammatiken (1)
Grammatik zur Erzeugung arithmetischer Ausdrücke:E ::= E "+" E | E "*" E | | E "–" E | E "/" E | "(" E ")" | "n"
Eindeutige Grammatik (ohne Prioritäten):E ::= T | T "+" E | T "*" E | T "–" E | T "/" ET ::= "n" | "(" E ")"
Eindeutige Grammatik (mit Prioritäten, Operatoren rechtsassoziativ):A ::= M "+" A | M "–" A | MM ::= T "*" M | T "/" M | TT ::= "n" | "(" A ")"
Eindeutige Grammatik (mit Prioritäten, Operatoren linksassoziativ):A ::= A "+" M | A "–" M | MM ::= M "*" T | M "/" T | TT ::= "n" | "(" A ")"
![Page 28: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/28.jpg)
28
Beispiel: Mehrdeutige Grammatiken (2)
Mehrdeutigkeit bei if-then-else (Dangling-Else):Stmt OtherStmt |
"IF" Expr "THEN" Stmt |"IF" Expr "THEN" Stmt "ELSE" Stmt
Gewünschte Bedeutung: ELSE soll zum letzten IF THEN ohne ELSE gehören
Eindeutige Grammatik:Stmt MStmt | OStmtMStmt "IF" Expr "THEN" MStmt "ELSE" MStmt |
OtherStmtOStmt "IF" Expr "THEN" Stmt |
"IF" Expr "THEN" MStmt "ELSE" OStmt
![Page 29: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/29.jpg)
29
Eliminierung von direkten Linksrekursivitäten
Ein Metasymbol A einer Grammatik G besitzt eine direkte Linksrekursivität, falls es Regeln der Form A A1 | … |An | 1 | … | m gibt, wobei A M und 1,…, n, 1,…, m V*
Falls alle 1,…, m nicht mit A beginnen, Eliminierung der Linksrekursivität mittels Ersetzung von A A1 | … |An | 1 | … | m durch:
A 1A' | … | mA' A' 1A' | …| nA' |
Eine Grammatik G besitzt eine direkte Linksrekursivität, falls es in G ein Metasymbol mit einer direkten Linksrekursivität gibt.
![Page 30: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/30.jpg)
30
Beispiel: Eliminierung direkter Linksrekursivitäten
Direkt linksrekursive Grammatik:A A "+" M | A "–" M | MM M "*" T | M "/" T | TT "n" | "(" A ")"
Transformierte Grammatik:A MA'A' "+" M A' | "–" M A' | M T M'M' "*" T M' | "/" T M' | T "n" | "(" A ")"
Problem: Assoziativität der Operatoren hat sich geändert!
![Page 31: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/31.jpg)
31
Eliminierung von indirekten Linksrekursivitäten
Eine kfG G besitzt eine indirekte Linksrekursivität, falls Ableitungen der Form A + A möglich sind, wobei A M und V*
Grammatiken darf keine -Regeln und Zyklen enthalten:
A1,…,An seien die Metasymbole der Grammatik, R die Regelmengefor i = 1 to n do for j = 1 to i-1 do Ersetze in R alle Regeln der Form Ai Aj durch Ai 1,…, Ai k, wobei Aj 1,…, Aj k alle Regeln zum Metasymbol Aj in R sind od Eliminiere alle direkten Linksrekursivitäten von Ai
od
![Page 32: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/32.jpg)
32
Links-Faktorisierung
Eliminieren eines gemeinsamen Präfixes mehrerer Alternativen zum selben Metasymbol:
(A,1),…, (A,n) wird ersetzt durch (A,A'), (A',1),…, (A',n), wobei A' ein neues Metasymbol ist
![Page 33: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/33.jpg)
33
Prinzipieller Aufbau eines Compilers
ParserQuell-text
Quell-text Scanner
Zwischencode und
Symbol- tabelle
Zwischencode und
Symbol- tabelle
Ziel-code
Ziel-code
Zielcode-erzeugung
Zielcodeunab-hängige
Optimierungen
Kontext-prüfung
ZielcodeabhängigeOptimierungen
Frontend
Backen
d
Steuerfluss im Compiler
Datenfluss im Compiler
Beschreibung der erkannten
Sprache durch Typ 3
Grammatiken
Beschreibung der erkannten
Sprache durch Typ 2
Grammatiken
Ersetzt die Beschreibung der Programmiersprache durch
eine Typ 1 Grammatik
![Page 34: Vorlesung Compilertechnik Sommersemester 2008 Grundlagen M. Schölzel](https://reader033.vdokument.com/reader033/viewer/2022052618/55204d6149795902118b4769/html5/thumbnails/34.jpg)
Ende der Grundlagen
Weiter zur Lexikalischen Analyse