Software Entwicklung 2. Übersetzerbau 1

Ähnliche Dokumente
Alphabet, formale Sprache

7. Syntax: Grammatiken, EBNF

Kapitel IV Formale Sprachen und Grammatiken

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

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

Kapitel 2. Methoden zur Beschreibung von Syntax

Grammatik Prüfung möglich, ob eine Zeichenfolge zur Sprache gehört oder nicht

Syntax von Programmiersprachen

Syntax von Programmiersprachen

Inhalt Kapitel 11: Formale Syntax und Semantik

Kapitel 2: Methoden zur Beschreibung von Syntax

Sprachen sind durch folgenden Aufbau gekennzeichnet:

Grammatiken. Grammatiken sind regelbasierte Kalküle zur Konstruktion von Systemen und Sprachen Überprüfung von Systemen und Sprachen

Syntax von Programmiersprachen

Grundlagen der Programmierung 3 A

Einführung in die Informatik. Programming Languages

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

Definition Compiler. Bekannte Compiler

2.2 Syntax, Semantik und Simulation

Sprachanalyse. Fachseminar WS 08/09 Dozent: Prof. Dr. Helmut Weber Referentin: Nadia Douiri

Compilerbau für die Common Language Run-Time

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

Grundlagen der Programmierung 2 (Comp-A)

Definition 4 (Operationen auf Sprachen) Beispiel 5. Seien A, B Σ zwei (formale) Sprachen. Konkatenation: AB = {uv ; u A, v B} A + = n 1 An

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 2 (Comp-A)

3 Syntax von Programmiersprachen

Grammatiken. Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V. Startsymbol S V. Kurzschreibweise G = (V, Σ, P, S)

3 Syntax von Programmiersprachen

Was ist ein Compiler?

Kapitel 5: Syntaxdiagramme und Grammatikregeln

Kontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 45

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

Vorlesung Automaten und Formale Sprachen Sommersemester Beispielsprachen. Sprachen

Kontextfreie Sprachen. Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester Kontextfreie Sprachen

Grammatiken und ANTLR

Einführung in die Informatik. Programming Languages

7. Formale Sprachen und Grammatiken

Compiler; Übersetzungsprogramme. Grundlagen der Programmierung 3 A. Compiler für Programmiersprachen. Phasen eines Compilers

Theoretische Grundlagen des Software Engineering

Kapitel 2. Methoden zur Beschreibung von Syntax

Theoretische Informatik Mitschrift

Lexikalische Programmanalyse der Scanner

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

Theorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie

Grundbegriffe. Grammatiken

Kontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 48

Syntaxanalyse Ausgangspunkt und Ziel

Einführung. (Compiler) Prof. Dr. Oliver Braun. Letzte Änderung: :49. Einführung 1/26

Theoretische Grundlagen der Informatik

Programmierkurs Java

Deterministischer Kellerautomat (DPDA)

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

Ein Fragment von Pascal

Software Entwicklung 2. Übersetzerbau 2

5. Die syntaktische Analyse

Es gibt keinen Algorithmus zum Schreiben eines Programms bzw. Algorithmus.

Pumping-Lemma 2 Pumping-Lemma Sei L eine von einem endlichen Automaten erkannte Sprache. Dann existiert eine natürliche Zahl p N derart, dass jedes Wo

Programmiersprachen und Übersetzer

3.1 Reservierte Wörter

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

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

Kapitel 4: Syntaxdiagramme und Grammatikregeln

Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive

(Prüfungs-)Aufgaben zu formale Sprachen

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2011

Varianten endlicher Automaten

2.1 Allgemeines. Was ist eine Sprache? Beispiele:

Programmiersprachen und Übersetzer

Theoretische Informatik I

Abschnitt 5. Grammatiken

6 Kontextfreie Grammatiken

9.4 Grundlagen des Compilerbaus

Einführung in die Programmierung für NF. Übung

Compiler. Einführung. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München. Letzte Änderung:

Compiler: Einführung

Grundlagen der Theoretischen Informatik

Einführung in die Programmiertechnik

Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -

Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -

3. Vorlesung: Endliche Automaten Markus Kr otzsch Lehrstuhl Wissensbasierte Systeme

WS06/07 Referentin: Katharina Blinova. Formale Sprachen. Hauptseminar Intelligente Systeme Dozent: Prof. Dr. J. Rolshoven

Sprachen und Programmiersprachen

Übungsblatt 6. Vorlesung Theoretische Grundlagen der Informatik im WS 18/19

Theorie der Informatik

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2012

Algorithmen und Formale Sprachen

Von der Grammatik zum AST

Info B VL 1: Einführung p.1

Nachklausur zur Vorlesung Informatik 3 mit einigen Anmerkungen zu Lösungen

Lexikalische Analyse, Tokenizer, Scanner

Transkript:

Software Entwicklung 2 Übersetzerbau 1

Übersetzerbau I Inhalt Aufgaben von Übersetzern Weitere Anwendungen von Übersetzern Arten von Übersetzern Grundlagen: Sprachdefinition Grammatik: BNF, EBNF, Syntaxdiagramme Produktionen, Ketten, Kettenmengen Satzform, Satz, Ableitung Chomsky-Hierarchie Aufbau von Compilern Aufgaben der Compiler-Komponenten: Analyseteil Aufgaben der Compiler-Komponenten: Syntheseteil Einpaß- vs. Mehrpaß-Compiler 2

Lernziele Wissen, welche Arten von Übersetzern es gibt BNF, EBNF und Syntaxdiagramme anwenden können und insbesondere ineinander überführen können Die Begriffe Terminalsymbol, Nichtterminalsymbol, Kette, Ableitung und Sprache definieren können Die Chomsky-Hierarchie anwenden können Aufgaben der unterschiedlichen Teile eines Übersetzers kennen 3

Compiler Aufgaben von Übersetzern Die Aufgabe der Übersetzung von Texten einer Sprache A in eine andere Sprache B ist für natürlich gesprochene und geschriebene Sprachen allgemein bekannt. Analog ist es in der Informatik die zentrale Aufgabe eines Übersetzers, alle Sätze einer Quellsprache A, die Programme, in gleichbedeutende Sätze einer Zielsprache, die Zielprogramme, zu transformieren. Der Begriff Übersetzer ist dabei die übergeordnete Bezeichnung von Werkzeugen für diese Aufgabe. In Abhängigkeit von den Eigenschaften der Quellsprache und den Eigenschaften der Zielsprache werden spezialisierte Begriffe verwendet. Mit den gleichen Techniken können Softwarekomponenten realisiert werden, die z.b. Kommandosyntax an Kommandoschnittstellen analysieren. 4

Compiler Weitere Anwendungen von Übersetzern Formatierer wie nroff und troff in UNIX sind in Wirklichkeit Übersetzer, die Text und Formatierkommandos übersetzen Precompiler wie equ (Formatierung von Ausdrücken), tbl (Erzeugung von Tabellen), pic (Zeichnen von Bildern) erlauben eine Erweiterung von nroff und troff. Ein silicon compiler übersetzt die Layout- und Aufbauspezifikation für VLSI- Schaltkreise in eine VLSI-Schaltkreismaske. Abfrageprogramme für Datenbanken. z.b. geschrieben in SQL werden durch Übersetzer in physikalische Zugriffsbefehle auf die Datenbankdateien transformiert. Programme geschrieben in einer Roboterprogrammiersprache werden durch einen Compiler in eine Zwischensprache, z.b. IRDATA (Industrial Robot Data) übersetzt. 5

Compiler Arten von Übersetzern Quellprogramm Übersetzer Zielprogramm Assemblerprogramm Assembler Maschinenprogramm Problemorientiertes Programm Compiler Assemblerprogramm Assembler Maschinenprogramm Problemorientiertes Programm Compiler Maschinenprogramm Problemorientiertes Programm Compiler Programm in einer Zwischensprache Interpreter Programm in einer erweiterten Programmiersprache Precompiler Problemorientiertes Programm Problemorientiertes Programm Interpreter 6

Compiler Grundlagen: Sprachdefinition Beispiel: Regeln zur Bildung gültiger Sätze: SATZ ::= SUBJEKT PRÄDIKAT. SUBJEKT ::= "Peter" "Siegfried". PRÄDIKAT ::= "arbeitet" "schläft". Gültige Sätze dieser Sprache: Peter arbeitet Siegfried arbeitet Peter schläft Siegfried schläft Ungültiger Satz dieser Sprache: Peter arbeitet nicht 7

Compiler Grundlagen: Sprachdefinition Beispiel (erweitert): Regeln zur Bildung gültiger Sätze: SATZ ::= SUBJEKT PRÄDIKAT ZUSATZ. SUBJEKT ::= "Peter" "Siegfried". PRÄDIKAT ::= "arbeitet" "schläft". ZUSATZ ::= "nicht" e. Gültige Sätze dieser Sprache: Peter arbeitet Siegfried arbeitet Peter schläft Siegfried schläft Peter arbeitet nicht Siegfried arbeitet nicht Peter schläft nicht Siegfried schläft nicht 8

Grammatik Viertupel aus N: Vokabular der nicht-terminalen Symbole: z.b. SATZ, SUBJEKT, PRÄDIKAT S: Startsymbol aus N: z.b. SATZ T: Vokabular der terminalen Symbole: z.b. Peter, Siegfried, arbeitet, schläft P: Menge der Produktionsregeln: siehe Beispiel N und T sind disjunkt! Vokabular V = N T 9

Grammatik Die Backus-Naur-Form (BNF) 1960 von Backus und Naur zur Beschreibung von Algol 60 eingeführt: syntax ::= production syntax e. production ::= identifier "::=" expression ".". expression ::= term I expression " " term. term ::= factor I term factor. factor ::= identifier string. identifier ::= letter I identifier letter I identifier digit. string ::= stringhead """. stringhead ::= """ I stringhead letter. letter ::= "A" I...I "Z". digit ::= "0" I... I "9". 10

Grammatik Die erweiterte Backus-Naur-Form (EBNF) 1977 von Wirth zur Verbesserung der Lesbarkeit eingeführt: syntax ::= {production}. production ::= identifier "::=" expression ".". expression ::= term {" " term}. term ::= factor {factor}. factor ::= identifier string "(" expression ")" "[" expression "]" "{" expression "}". identifier ::= letter {letter digit}. string ::= """ {character} """. letter ::= "A" I...I "Z". digit ::= "0" I... I "9". 11

Grammatik Die erweiterte Backus-Naur-Form (EBNF) ::= : Zuweisungsoperator zwischen linker und rechter Seite einer Produktion : Alternative { } : Wiederholung (kein mal, einmal und beliebig oft) [ ] : Option (kein mal oder einmal) ( ) : Klammerung Beispiel: Sprache, die die Sätze e, a, aa, aaa,... enthält. BNF: S ::= A. A ::= aa e. EBNF: S ::= A. A ::= {a}. 12

Grammatik Die erweiterte Backus-Naur-Form (EBNF) Das erweiterte Beispiel in EBNF: SATZ ::= SUBJEKT PRÄDIKAT. SUBJEKT ::= "Peter" "Siegfried". PRÄDIKAT ::= ("arbeitet" "schläft") ["nicht"]. 13

Grammatik Syntaxdiagramme Anstelle von Produktionen in BNF oder EBNF können auch Syntaxdiagramme angegeben werden: SATZ SUBJEKT SUBJEKT PRÄDIKAT Peter PRÄDIKAT Siegfried arbeitet schläft nicht 14

Grammatik Produktionsregeln Jedes Syntaxdiagramm beschreibt eine Produktionsregel der Sprache Die Produktionsregeln beschreiben, welche Symbolfolgen der Sprache legal bzw. erlaubt sind Notationen Syntaxdiagramme Erweiterte Backus Naur Form (EBNF) Backus Naur Form (BNF). 15

Grammatik Ketten (Symbol-)Kette: Endliche Folge von Symbolen über einem Vokabular V 1 = BeginSym ReadSym LParen <idlist> RParen SemiColonEndSym EofSym 2 = BeginSym <StatementList> EndSym EofSym Eine Kette kann aus nicht-terminalen und terminalen Symbolen bestehen. Abkürzungen a n : Kette aus n gleichen Symbolen a a 3 = aaa e leere Kette, d.h. die Kette aus null Symbolen a + : Menge {a n :n 1} a + = {a, aa, aaa, aaaa,..} a : Menge {a n : n 0} a = {e, a, aa, aaa, aaaa,..}. Offensichtlich ist a = a + {e}. 16

Grammatik Kettenmengen V + : Menge aller nichtleeren Ketten, die sich aus den Symbolen von V bilden lassen V + = V V 2... V : Menge aller Ketten, einschließlich der leeren Kette, die sich aus den Symbolen von V bilden lassen V = {e} V + Die Menge V ist immer endlich Die Mengen a +, a, V +, und V* sind immer unendlich Für V= {a, b, c} sind V + = {a, b, c, aa, ab, ac, ba, bb, bc, ca, cb, cc, aaa,...} V ={ e,a, b, c, aa, ab, ac, ba, bb, bc, ca, cb, cc, aaa,...} 17

Grammatik Definition des Begriffs Sprache (informal) Sprache = Menge von Symbolketten, die von der Syntax als wohlgeformt definiert sind. Produktionsregeln beschreiben Ersetzungen von Symbolketten durch Symbolketten Ausgangspunkt: Startsymbol S Wiederholtes Ersetzen gemäß den Regeln der Grammatik durch Symbolketten, bis eine Symbolkette entsteht, die nur noch terminale Symbole enthält. 18

Grammatik Syntaxanalyse Beginn mit dem Syntaxdiagramm Start bzw. der Produktion, auf deren linker Seite das Nichtterminal-Symbol Start vorkommt Alle Syntaxdiagramme bzw. Produktionsregeln solange anwenden, bis nur noch terminale Symbole vorhanden sind Jede Sequenz terminaler Symbole, die so erzeugt werden kann, ist gültig Umgekehrt gilt, dass jede Sequenz terminaler Symbole, die nicht durch eine Sequenz von Ersetzungen nicht-terminaler Symbole erzeugt werden kann, illegal ist. 19

Grammatik Syntax-Analyse durch rekursiven Abstieg Rekursiv anwendbare Analyseroutinen, die durch den Syntaxbaum absteigen, den sie bei der Programmbearbeitung erkennen Einfachste Syntaxanalyse-Technik wird in vielen Compilern verwendet Grundidee Zu jedem nicht-terminalen Symbol existiert eine (gleichnamige) Analyseprozedur, die jede terminale Symbolfolge erkennt, die durch das nicht-terminale Symbol erzeugt werden kann. In einer Analyse-Prozedur können sowohl nicht-terminale als auch terminale Symbole auftauchen. 20

Grammatik Satzform, Satz, Ableitung Satzformen Das Startsymbol S selbst und alle Symbolketten, die aus S durch die Anwendung der Produktionen hervorgehen Sätze Satzformen, die nur aus terminalen Symbolen bestehen Sind und zwei Satzformen und geht aus durch Anwendung einer Produktion hervor, dann =>. (Ableitung) 21

Grammatik Ableitungen Direkte Ableitung Eine Kette produziert direkt eine Kette geschrieben =>, wenn es irgendwelche Ketten 1 und 2 gibt, so daß = 1 2 = 1 2 und die Produktion ::= zur Grammatik gehört heißt dann eine direkte Ableitung von Mehrfache Ableitung Eine Kette produziert eine Kette geschrieben => +, wenn es eine Folge direkter Ableitungen = 0 => 1 => 2 =>...=> n = mit n 1 gibt. Diese Folge heißt mehrfache Ableitung der Länge n 22

Grammatik Definition des Begriffs Sprache (formal) Wenn G eine Grammatik mit dem Startsymbol S ist, dann wird eine Kette Satzform genannt, wenn S=> gilt. Ein Satz ist eine Satzform, die nur aus terminalen Symbolen besteht. Eine Sprache L(G) ist die Menge aller Sätze, die sich aus dem Startsymbol ableiten lassen: L(G)= { S => + T } 23

Compiler Grammatiken: Syntaxdefinition Die Chomsky-Hierarchie ist eine Aufteilung von Sprachen in Klassen: Reguläre Sprachen (Typ 3): Können durch endliche Automaten dargestellt werden Werden durch Scanner analysiert Dürfen nur Produktionen der folgenden Form enthalten: A a und A a B bzw. A a und A B a. (Kleinbuchstaben stellen Terminalsymbole dar, Großbuchstaben repräsentieren nichtterminale Symbole) Kontextfreie Sprachen (Typ 2) Können durch Kellerautomaten dargestellt werden Werden durch Parser analysiert Auf der linken Seite jeder Produktion muß stets genau ein Nichtterminal-Symbol stehen, z.b.: A a B b Die rechte Seite darf aus einer beliebigen Kombination von terminalen und nichtterminalen Symbolen bestehen 24

Compiler Chomsky-Hierarchie Kontextsensitive Sprachen (Typ 1) Produktionen haben die Form g mit, T *, V +, g N + Die rechte Seite von Produktionen muß mindestens so lang sein wie die linke Seite (längenmonoton) Auf der rechten Produktionsseite darf nur dann das leere Symbol (e) stehen, wenn die linke Produktionsseite das Startsymbol S ist, und dieses auf keiner rechten Produktionsseite in der Grammatik auftritt: S e Rekursiv aufzählbare Sprachen (Typ 0) Jede wohlgeformte Grammatik, in der die Terminalsymbole, Nichtterminal-Symbole und das Startsymbol definiert sind, ist vom Chomsky-Typ 0 25

Compiler Chomsky-Hierarchie α ::= β αaβ ::= ασβ A ::= α Typ 3-Grammatik (reguläre Grammatik) A ::= ab A ::= a α = beliebige Kette aus N und T 26

Compiler Chomsky-Hierarchie Für den Compilerbau sind nur reguläre und kontextfreie Sprachen interessant Reguläre Grammatiken: Definition der Bezeichner und Schlüsselworte, sowie von Konstanten und anderen Symbolen der Sprache Scanner: Zerlegung des Eingabetextes in Symbole Kontextfreie Grammatiken: Festlegung der Regeln, wie aus Symbolen korrekte Sätze der Sprache gebildet werden Parser: Syntaxanalyse 27

Compiler Chomsky-Hierarchie Kontextsensitivität: Übersetzung eines deutschen Textes ins Englische Ich mag Montage nicht. Version 1: I don t like mondays. Version 2: I don t like assembly. 28

Compiler Aufbau von Compilern compiler front end Analyse Synthese compiler back end Symboltabelle Quellprogramm Lexikalische Analyse (Scanner) Syntax-Analyse (Parser) Semantische Analyse (Semantische Routinen) Optimierung (Optimizer) Codeerzeugung (Code Generator) Quellprogramm Symbole (tokens) Syntaxbaum Zwischensprache Zwischensprache 29

Compiler Aufgaben der Compiler-Komponenten: Analyseteil Scanner: Durchführung der lexikalischen Analyse: Das Quellprogramm wird zeichenweise gelesen. Die individuellen Zeichen werden zu Symbolen (tokens) zusammengefaßt, die die Eingabe für den Parser darstellen. Beispiele für Symbole sind Bezeichner, Zahlen, Operatoren, Begrenzer wie Klammern und Semikolon. Parser: Durchführung der syntaktischen Analyse: Das aus Symbolen bestehende Programm wird in seine grammatischen Bestandteile zerlegt und die Struktur als Syntaxbaum dargestellt. 30

Compiler Aufgaben der Compiler-Komponenten: Analyseteil Semantische Routinen: Durchführung der semantischen Analyse: Überprüfung der statischen Semantik jedes Sprachkonstrukts, wie Gültigkeitsbereiche von Bezeichnern, Korrespondenz zwischen Deklaration und Anwendung von Bezeichnern, Typverträglichkeit von Operatoren in Ausdrücken. Ist das Konstrukt semantisch korrekt, so wird es in eine Zwischensprache transformiert. Die semantische Analyse kann mit der Syntaxanalyse gemeinsam stattfinden. In diesem Fall verschmelzen diese beiden Analyseteile zu einem Analyseteil. Erfolgt die semantische Analyse separat, dann wird der Syntaxbaum, das Ergebnis der Syntaxanalyse, bei der semantischen Analyse durch semantische Informationen ergänzt. Als Ergebnis liefert der Analyseteil des Compilers, die Feststellung, ob das Quellprogramm korrekt ist eine speicherinterne Darstellung des Quellprogramms, die für den Syntheseteil gut geeignet ist, speicherinterne Tabellen, die für die weitere Verarbeitung der Zwischendarstellung benötigt werden. 31

Compiler Beispiel: Lexikalische und syntaktische Analyse Quellprogramm Prämie:= 100 + Dienstjahre * Leistungsfaktor; Lexikalische Analyse Id AssignOp Number PlusOp Id TimesOp Id SemiColon Symboltabelle 1: Prämie 2: Dienstjahre 3: Leistungsfaktor Id/1 AssignOp Number/100 PlusOp Id/2 TimesOp Id/3 SemiColon Syntaxanalyse Id/1 AssignOp Number/100 PlusOp Id/2 TimesOp Id/3 SemiColon Symbole Symbole und Symbolklassen Variable Term Term Syntaxbaum Ausdruck Zuweisung 32

Compiler Aufgaben der Compiler-Komponenten: Syntheseteil Optimierer: Transformation des Programms in der Zwischensprache in ein funktional äquivalentes Programm in der Zwischensprache, das hinsichtlich bestimmter Kriterien (z.b. Geschwindigkeit) verbessert ist. Der Optimierer kann bei vielen Compilern auch deaktiviert werden. Code-Generator: Erzeugung des Zielprogramms aus der Zwischendarstellung. Symboltabelle: Sowohl der Analyseteil als auch der Syntheseteil des Compilers greifen auf die sogenannte Symboltabelle zu. In der Symboltabelle werden die Bezeichner mit ihren Attributen gespeichert. Falls keine Optimierung gefordert wird, so kann die Code-Generierung in die semantischen Routinen integriert werden (keine Zwischendarstellung) 33

Compiler Einpaß- vs. Mehrpaß-Compiler Mehrpaß-Compiler: Nacheinanderausführung der in der statischen Compilerstruktur aufgeführten Komponenten Man spricht dann von einem Mehrpaß-Compiler, da eine Komponente nach der anderen ausgeführt wird. Als Ergebnis jeder Komponente entsteht ein Programm in einer Zwischensprache, das auf einen externen Speicher geschrieben und vom nächsten Paß wieder gelesen wird Einpaß-Compiler: Zeitlich verzahnte Ausführung der einzeinen Compilerkomponenten Der Parser ruft den Scanner auf, wenn er das nächste Quellsymbol benötigt. Er ruft die semantischen Routinen auf, wenn er eine syntak- tisch korrekte Konstruktion an sie weitergeben will. 34

Compiler Einpaß- vs. Mehrpaß-Compiler Quellprogramm Lexikalischer Analysator Externspeicher Syntaxanalysator Externspeicher Symbole Syntaxbaum Symbole Lexikalischer Analysator Syntaxanalysator Baumteile Semantischer Analysator Semantischer Analysator Externspeicher Optimierung und Codeerzeugung Zielprogramm Zwischensprache Legende: Steuerfluss Datenfluss Quellprogramm Zielprogramm Optimierung und Codeerzeugung Zwischensprache 35