Compilerbau. Einführung in Bison
|
|
|
- Dominik Hoch
- vor 8 Jahren
- Abrufe
Transkript
1 Compilerbau Einführung in Bison
2 Überblick 1. Bison a) Eingabespezifikation 1. Prolog 2. Definitionsteil 3. Regelteil 4. Epilog b) Bison-Bezeichner und -Funktionen c) Konflikte und Mehrdeutigkeiten d) Debug-Funktionalität e) Designprozess der syntaktischen Analyse 2. Beispielprogramme Compilerbau 2
3 Analysephase (Frontend) Analysephase zerlegt in 3 Phasen: 1. Lexikalische Analyse Zerlegung des Quelltextes in zusammengehörende Token 2. Syntaktische Analyse Überprüfung, ob eingelesener Quellcode der Syntax (Grammatik) der Quellsprache entspricht Eingabe wird in Syntaxbaum umgewandelt 3. Semantische Analyse Überprüfung der statischen Semantik Variablendeklaration und Zuweisungen werden geprüft (attributierter Syntaxbaum) Compilerbau 3
4 Parsergenerator Konstruiert automatisch Code aus Grammatik Schritte für Bottom-up-Parser Konstruiere aus Grammatik den Zustandsübergangsgraph/CFSM Z. B.: LALR(1), LR(1) Erzeuge Code für Parser Wichtig Nutzung einer Standardschnittstelle zum Scanner Yacc Yet another compiler compiler Parsergenerator für UNIX Entwickelt Mitte der 70er Bison Auch nur ein Tier Weiterentwicklung von YACC durch GNU Abwärtskompatibel zu Yacc Entwickelt Ende der 80er Compilerbau 4
5 Bison Einführung ist ein Parsergenerator erzeugt C/C++ Programm, das die syntaktische Analyse eines Tokenstroms durchführt ist optimiert für deterministische, kontextfreie LALR(1)-Grammatiken nächste anwendbare Regel eindeutig durch schon gelesenen Eingabe und Lookahead der restlichen Eingabe benötigt eine Spezifikation (Grammatik) in Backus-Naur-Form (BNF) Compilerbau 5
6 Flex und Bison Quellcode Scanner Parser Zwischencode Flex Spezifikation lexikalischer Einheiten (Token) reguläre Ausdrücke Lexer Spezifikationsdatei (example.l) Übersetzen nach example.c Bison Spezifikation der syntaktischen Struktur kontextfreie Grammatik Bison Spezifikationsdatei (example.y) Einbinden des Scanners in den Parser Übersetzen nach example.tab.c Compilerbau 6
7 Bison Kompilierung (1) Zwischencode Lex- Spezifikation Lex-Compiler Automat mit Übergangstabelle (C-Programm) C-Compiler Bison- Spezifikation Bison-Compiler Bison-Parser (C-Programm) C-Compiler Festlegung der Regeln & dazugehörigen Aktionen C-Programm main() yyparse() yylex() yyerror() Quellcode Scanner *.tab.h Token Parser Compilerbau 7
8 Bison Kompilierung (2) Bison- Programm parser.y bison C-Programm parser.tab.c gcc Ausführbares Programm Parser bison d parser.y gcc c parser.tab.c gcc o parser parser.tab.o Kompilierung und Start bison -<option> <dateiname> d erstellt Headerdatei *.tab.h t setzt Debugfunktionalität (#define YYDEBUG 1) v erstellt Infodatei zum generierten Parser parser.tab.c enthält yyparse() zum Starten der Syntaxanalyse Compilerbau 8
9 Bison Eingabespezifikation Vier Teile %{ <Prolog> %} <Definitionsteil> %% <Regelteil> %% <Epilog> %{ Einbindung von C-Header-Dateien Definitionen für Makros Deklaration von Funktionen und Variablen %} Definition von Terminal- und Nichtterminalsymbolen Festlegen von Präzedenzen Festlegen des Startsymbols lsym: rsym 11 {<Aktion 11 >} rsym 1n {<Aktion 1n >} rsym 21 {<Aktion 21 >} rsym 2n {<Aktion 2n >} rsym 31 {<Aktion 31 >} rsym 3n {<Aktion 3n >} ; Definition von Funktionen wie z. B. main, yyerror, yylex hier möglich Compilerbau 9
10 Prolog Einbindung von C-Header-Dateien Deklaration von Konstanten Deklaration von Funktionen Beispiel %{ %} #include <stdio.h> #include <string.h> void yyerror(char* msg); extern int yylex(); yyerror(char*) Fehlerausgabefunktion von bison yylex() Aufruf des Scanners Compilerbau 10
11 Definitionsteil 1. Definition von Token 2. Festlegen des Startsymbols 3. Festlegung von Präzedenz- und Assoziationsbedingungen 4. Einbinden von C/C++-Code 5. Definition von beliebigen Rückgabetypen später bei semantischer Analyse Compilerbau 11
12 Definitionsteil Definition von Token (1) Syntax %token <name> {" " <name>} Gültige Namen für Token sind alle C-Identifier Konvention Tokennamen in Großbuchstaben Werden in #define konvertiert Beispiel %token NAME1 %token NAME2 %token NAMEn %token NAME1 NAME2 NAMEn Compilerbau 12
13 Definitionsteil Option d (1) Generierung von symbolischen Konstanten Option d beim Aufruf von bison erzeugt zusätzlich zu *.tab.c die Headerdatei *.tab.h *.tab.h enthält C-Konstantendefinitionen für definierte Token Stehen auch in der *.tab.c-datei Verwendung in der Lexer-Spezifikationsdatei *.tab.h im Definitionsteil der Lex-Spezifikationsdatei einbinden Rückgabewert der Aktionen bei matchenden RA: symbolische Konstante für den erkannten Token Compilerbau 13
14 Definitionsteil Option d (2) Generierung von symbolischen Konstanten numid.y %token NUMBER %token ID %% %% #define NUMBER 257 #define ID 258 numid.tab.h Verwendung in der Lexer-Spezifikationsdatei %{ #include "numid.tab.h" %} %% [+-]?(0 [1-9][0-9]*) {printf("%d\n", NUMBER); return(number);} [a-za-z_][a-za-z0-9_]* {printf("%d\n", ID); return(id);} numid.l Compilerbau 14
15 Definitionsteil Definition von Token (2) flex liefert bison Token als Integer-Werte int yylex() Zum konsistenten Gebrauch der Tokenkodierung in flex und bison gelten folgende Konventionen: Token ist ein einzelnes Zeichen (Literal) ASCII-Wert wird verwendet (1 256) Token ist eine Zeichenkette, die von flex durch einen regulärer Ausdruck erkannt wird Tokenname in bison definieren und entsprechende symbolische Konstanten erzeugen ( 257) Konstanten flex zugänglich machen und dort als Rückgabewert verwenden Token 0 signalisieren Ende des Eingabetextes Compilerbau 15
16 Definitionsteil Festlegen des Startsymbols Syntax %start <name> Definition nicht zwingend, aber empfohlen Default Linke Seite der ersten Regel als Startsymbol Beispiel %start nonterminal Compilerbau 16
17 Definitionsteil Präzedenz- und Assoziationsbedingungen (1) Präzedenzen/Prioritäten von Operatoren um Mehrdeutigkeiten zu vermeiden Beispiel Keller Eingabe Aktion $ E+E*E+E^E$ Shift $E +E*E+E^E$ Shift $E+ $E+E * ^ 2 = (5 + (1 * 3)) + (2^2) = 12 E*E+E^E$ Shift *E+E^E$ Shift/Reduce Shift, um gewünschte Ableitung zu erhalten Nicht aus Grammatik erkennbar Lösung 1: Grammatik umstellen (siehe VL) Lösung 2: Präzedenzen einfügen expr ::= expr '+' expr expr '-' expr expr '*' expr expr '/' expr expr '^' expr E: expr Compilerbau 17
18 Definitionsteil Präzedenz- und Assoziationsbedingungen (2) Syntax %left <name> {" " <name>} linksassoziativ %right <name> {" " <name>} rechtsassoziativ %nonassoc <name> {" " <name>} keine Assoziativität Reihenfolge der %left und %right Angaben bestimmen die Präzedenzen der Token Präzedenz nimmt von oben nach unten zu Mehrere Operatoren pro Deklaration möglich gleiche Präzedenz Gleichzeitig auch Tokendeklaration %left, %right, %nonassoc anstelle von %token Compilerbau 18
19 Definitionsteil Präzedenz- und Assoziationsbedingungen (3) Beispiel 1 %left op a op b op c = (a op b) op c %right op a op b op c = a op (b op c) %nonassoc op a op b op c ist ein Fehler Beispiel 2 %left '+' '-' %left '*' '/' %right '^' '+' ' ' '*' '/' linksassoziativ '^' rechtsassoziativ '*' und '/' höhere Präzedenz als '+' und ' ' '^' höchste Präzedenz '*' und '/' sowie '+' und ' ' jeweils gleiche Präzedenz Compilerbau 19
20 Regelteil 1. Spezifikation der Produktionen und der dazugehörigen Regeln 2. Festlegung der Nichtterminale (implizit) 3. Semantische Aktionen später bei semantischer Analyse Compilerbau 20
21 Regelteil Spezifikation der Regeln Syntax (vereinfacht) <Metasymbol> ":" {<Symbol>} {" " {<Symbol>}} ";" Rekursion möglich (rechts- oder links) Überführung der Regeln A ::= X 11 X 12 X 1n X 21 X 22 X 2n X m1 X m2 X mn Grammatik A Nichtterminale X ij Nichtterminale Terminale A : X 11 X 12 X 1n X 21 X 22 X 2n X m1 X m2 X mn ; Bisonregeln (Aktionen später) Compilerbau 21
22 Regelteil Epsilonregel Regel lsym ::= ε rsym 1 rsym 2 lsym : /* leer */ rsym 1 rsym 2 ; oder lsym : epsilon rsym 1 rsym 2 ; epsilon : /* leer */ ; Compilerbau 22
23 Regelteil Festlegung der Nichtterminale Terminalsymbole Token aus dem Definitionsteil Literale in Hochkommata Nichtterminalsymbole Implizit definiert durch linke Seite einer Regel Jedes Nichtterminalsymbol muss auf der linken Seite von mindestens einer Regel stehen Compilerbau 23
24 Regelteil Grammatikvereinfachungen (1) anythings ::= thing* somethings ::= thing+ maybething ::= [thing] Grammatik anythings: /* EMPTY */ anythings thing ; somethings: thing somethings thing ; maybething: /* EMPTY */ thing ; Bisonregeln Compilerbau 24
25 Regelteil Grammatikvereinfachungen (2) inopt ::= a [b] c trailrep ::= a b+ anyrep ::= a b* c Grammatik inopt : a /* EMPTY */ c a b c ; trailrep: a b trailrep b ; anyrep : a b_rep c ; b_rep : /* EMPTY */ b_rep b ; Bisonregeln Compilerbau 25
26 Regelteil Präzedenzen von Regeln (1) Problem Präzedenzen eines Operators oftmals vom Kontext abhängig Beispiel 8 / - 2 * 2 = (8 / (-2)) * 2 = -8 E: expr Keller Eingabe Aktion $ E/ E*E$ Shift $E / E*E$ Shift $E/ E*E$ Shift $E/ E*E$ Shift $E/ E *E$ Shift $E/ E* E$ Shift $E/ E*E $ Reduce $E/ E $ Reduce $E/E $ Reduce $E $ Accept %left '+' '-' %left '*' '/' expr : expr '*' expr expr '-' expr '-' expr da '*' höhere Präzedenz als ' ' = 8 / (-(2 * 2)) = -2 Compilerbau 26
27 Regelteil Präzedenzen von Regeln (2) Syntax %prec <Terminalsymbol> Am Ende einer Regel (vor einer eventuellen Aktion) Effekt Präzedenz + Assoziativität der Regel d. h. des rechtesten Terminalsymbol der Regel = Präzedenz + Assoziativität des definierten Tokenplatzhalters Terminalsymbol %left '+' '-' %left '*' '/' %nonassoc UMINUS expr : expr '*' expr expr '-' expr '-' expr %prec UMINUS Compilerbau 27
28 Regelteil Fehlerbehandlung Default Beim ersten Fehler abbrechen Aufruf einer Funktion yyerror(char*) mit syntax error Größere Fehlermeldung mittels (im Definitionsteil) #define YYERROR_VERBOSE yes Wünschenswert präzise Information über aufgetretenen Fehler Grund, Zeilennummer Fortsetzung der Syntaxanalyse an geeigneten Punkt Dazu gibt es das spezielle Nichtterminal error Später mehr Compilerbau 28
29 Epilog Code wird unverändert nach *.tab.c kopiert Einbinden von benutzerdefinierten Funktionen, die in den Aktionen benutzt werden können Bereitstellung der Funktionen int yylex() (falls nicht von Flex) int main() Überschreiben der Funktion void yyerror(char*) Compilerbau 29
30 Bison-Bezeichner und -Funktionen int yyparse() liest Tokenstrom mittels yylex yylex kann von Flex generiert sein Rückgabewert ist Fehlerstatus 0: alles OK Ermittelt Ableitungsbaum der Eingabe void yyerror(char* s) Zuständig für die Ausgabe der Fehlermeldung Anpassung der Fehlermeldung durch Überschreiben der Funktion Muss implementiert werden Compilerbau 30
31 Konflikte und Mehrdeutigkeiten (1) Konflikte Shift/Reduce-Konflikt Reduce/Reduce-Konflikt Im Konfliktfall ist Generierung einer Aktionsund Goto-Tabelle hilfreich Mittels Option v beim Kompilieren Erzeugt Tabelle *.output Konflikte lassen sich direkt aus der Tabelle ablesen Compilerbau 31
32 Konflikte und Mehrdeutigkeiten (2) Default-Konfliktlösung Shift/Reduce-Konflikt es wird shift angewendet Reduce/Reduce-Konflikt es wird erste Regel im Regelteil zur Reduktion verwendet Besser: Konflikte selbst auflösen durch Umformung der Grammatik oder Festlegung von Präzedenz- und Assoziativitätsbedingungen Compilerbau 32
33 Debug-Funktionalität Im Definitionsteil #define YYDEBUG 1 Oder mittels Option t beim Kompilieren Im Quellcode Ein: yydebug = 1; Aus: yydebug = 0; Ausgabe welches Token von yylex gelesen wurde bei Shift: Tiefe und Inhalt des Stacks bei Reduce: angewendete Regel und Inhalt des Stacks Debug-Fehlermeldung im Fehlerfall #define YYERROR_VERBOSE yes Compilerbau 33
34 Designprozess der syntaktischen Analyse Übersicht 1. Spezifikation der Grammatik für jede Regel eine Aktion 2. Implementierung eines Scanners für die Erkennung der Token *.tab.h inkludieren 3. Implementierung einer Kontrollfunktion Funktion zum Aufruf des Parsers 4. Implementierung von Fehlerbehandlungsroutinen falls beim Parsen Fehler auftreten yyparse() yylex() main() yyerror() Compilerbau 34
35 Beispielprogramme ETF Parser für die Expression/Term/Faktor-Grammatik Compilerbau 35
Definition Compiler. Bekannte Compiler
Compiler Inhalt: Definition Compiler / bekannte Compiler Klassifikationen von Compilern Analyse-Synthese-Modell der Kompilierung Analyse des Quellprogramms Synthesephase Die Phasen eines Compilers Symboltabellenverwaltung
Kapitel 5: Syntax-Analyse
Kapitel 5: Syntax-Analyse Aufgabe Die Token-Folge wird strukturiert in Anweisungen, Ausdrücke etc., um die Semantische Analyse und Code-Erzeugung zu ermöglichen Themen Kontextfreie Grammatik Äquivalente
Compilerbau Syntaxanalyse 68. LR(1)-Syntaxanalyse
Compilerbau Syntaxanalyse 68 LR(1)-Syntaxanalyse Bei der LL(1)-Syntaxanalyse wird allein aufgrund des nächsten Tokens die zu verwendende Produktion ermittelt. Bei der LR(1)-Syntaxanalyse braucht diese
LR(1) Itemmengenkonstruktion
LR(1) Itemmengenkonstruktion Grammatik: S A$ xb A aab B B x Sprache: {xb} {anxbn n 0} nicht LL(1) x FIRST(B) x FIRST(A) also: FIRST/FIRST Konflikt bei S A$ xb nicht SLR(1) (Abb. 2.96) betrachte Item B
Syntaxanalyse Ausgangspunkt und Ziel
Syntaxanalyse Ausgangspunkt und Ziel Ausgangspunkt: Kontextfreie Grammatik Im Normalfall BNF, manchmal EBNF BNF = Backus-Naur-Form = Produktionsregeln EBNF = erweiterte BNF (+ reguläre Ausdrücke) Prüfung
Lexikalische Programmanalyse der Scanner
Der Scanner führt die lexikalische Analyse des Programms durch Er sammelt (scanned) Zeichen für Zeichen und baut logisch zusammengehörige Zeichenketten (Tokens) aus diesen Zeichen Zur formalen Beschreibung
9 Compilerbau-Werkzeuge
9.1 Überblick In der Praxis des Compilerbaus werden heute vielfach Werkzeuge eingesetzt, die Routineaufgaben erleichtern sollen. In erster Linie ist dabei an die Punkte Generierung eines Scanners Generierung
Inhalte der Vorlesung. 6. Syntaxgesteuerte Übersetzung. 6. Syntaxgesteuerte Übersetzung. Attributierter Syntaxbaum
Inhalte der Vorlesung 6. Syntaxgesteuerte Übersetzung 1.Einführung 2.Lexikalische Analyse 3.Der Textstrom-Editor sed 4.Der Scanner-Generator lex (2 Termine) 5.Syntaxanalyse und der Parser-Generator yacc
Was ist ein Compiler?
Was ist ein Compiler? Was ist ein Compiler und worum geht es? Wie ist ein Compiler aufgebaut? Warum beschäftigen wir uns mit Compilerbau? Wie ist die Veranstaltung organisiert? Was interessiert Sie besonders?
Fachseminar Compilerbau
Fachseminar Compilerbau WS 08/09 Matthias Schiller Syntaktische Analyse 1. Prinzip der Top-Down-Analyse 2. LL(1)-Grammatiken Modell-Vorstellung Der Scanner liefert als Ergebnis der lexikalischen Analyse,
Alphabet, formale Sprache
n Alphabet Alphabet, formale Sprache l nichtleere endliche Menge von Zeichen ( Buchstaben, Symbole) n Wort über einem Alphabet l endliche Folge von Buchstaben, die auch leer sein kann ( ε leere Wort) l
Inhalte der Vorlesung. 4. Der Scanner-Generator lex. 4. Der Scanner-Generator lex. 4.1 lex: Grundlagen
Inhalte der Vorlesung 4. Der Scanner-Generator lex 1.Einführung 2.Lexikalische Analyse 3.Der Textstrom-Editor sed 4.Der Scanner-Generator lex (2 Termine) 5.Syntaxanalyse und der Parser-Generator yacc (3
Einführung - Parser. Was ist ein Parser?
Gliederung 1. Einleitung 1.1 Was ist ein Parser? 1.2 Was ist ein tabellengesteuerter TD-Parser? 1. Tabellengesteuerter TD-Parser 2.1 Funktionsweise 2.2 Darstellung als Pseudocode 2.3 Konstruktion von prädiktiven
FACHHOCHSCHULE MANNHEIM
für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen
Von der Grammatik zum AST
Von der Grammatik zum AST Welche Eigenschaften soll ein Parser haben? Wann ist eine Grammatik eindeutig? Wie sollte eine Grammatik aussehen? Theoretischer Hin tergrund: FIRST, FOLLOW Einschränkungen von
Syntax von Programmiersprachen
"Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt Syntax von Programmiersprachen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang WS 07/08
Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen
Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009 Überblick Teil 1: Lexen und Parsen Die Sprache LFP +C Professur
Einführung in die Informatik Grammars & Parsers
Einführung in die Informatik Grammars & Parsers Grammatiken, Parsen von Texten Wolfram Burgard Cyrill Stachniss 12.1 Einleitung Wir haben in den vorangehenden Kapiteln meistens vollständige Java- Programme
9.4 Grundlagen des Compilerbaus
Kap09.fm Seite 717 Dienstag, 7. September 2010 2:06 14 9.4 Grundlagen des Compilerbaus 717 so dass die Benutzung dieser Regeln zum Aufbau eines + -Knotens bzw. eines Negations- Knotens im abstrakten Syntaxbaum
Grammatiken und ANTLR
Grammatiken und ANTLR Zusatzfolien zu Algo Blatt 6 Author: Henry Schaefer http://www.majeeks.de/folien_blatt6.pdf Grammatik Definition: syntaktische Beschreibung einer Sprache (H.S.) Definiton Grammatik
Programmierung 2. Übersetzer: Das Frontend. Sebastian Hack. Klaas Boesche. Sommersemester
1 Programmierung 2 Übersetzer: Das Frontend Sebastian Hack [email protected] Klaas Boesche [email protected] Sommersemester 2012 Vom Programm zur Maschine Was passiert eigentlich mit unseren
Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny
Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 5 Compilerbau 5.1 Einführung Ein Compiler (Übersetzer) ist ein Computerprogramm, das ein in einer Quellsprache geschriebenes Programm (Quellprogramm)
Programmiersprachen und Übersetzer
Programmiersprachen und Übersetzer Sommersemester 2010 19. April 2010 Theoretische Grundlagen Problem Wie kann man eine unendliche Menge von (syntaktisch) korrekten Programmen definieren? Lösung Wie auch
Lexikalische Analyse, Tokenizer, Scanner
Lexikalische Analyse, Tokenizer, Scanner Frühe Phase des Übersetzers Aufgabenteilung: Scanner (lokale) Zeichen (Symbol-)Analyse Parser Syntax-Analyse Aufgabe des Scanners: Erkennung von: Zahlen, Bezeichner,
4 Lexikalische Analyse und Parsing
4 Lexikalische Analyse und Parsing Lexikalische Analyse und Parsing sind die wichtigsten Bereiche des Compilerbaus. Prinzipien und Techniken des Compilerbaus beschränken sich nicht auf die Erstellung von
Inhalt Kapitel 5: Syntax
Inhalt Kapitel 5: Syntax 1 Syntax und Semantik 2 Formale Sprachen 3 Backus-Naur Form 4 Chomsky Grammatik 5 Reguläre Ausdrücke 6 Endliche Automaten 180 Syntax und Semantik Syntax Syntax: Festlegung des
Kellerautomat (1/4) Kellerautomat (2/4) Kellerautomat (3/4) Kellerautomat (4/4)
Kellerautomat (1/4) Kellerautomat (2/4) Kontextfreie Grammatiken können von Kellerautomaten (Push Down Automata, PDA) erkannt werden PDAs sind eine Erweiterung der endlichen Automaten um ein einfaches
Software Entwicklung 2. Übersetzerbau 1
Software Entwicklung 2 Übersetzerbau 1 Übersetzerbau I Inhalt Aufgaben von Übersetzern Weitere Anwendungen von Übersetzern Arten von Übersetzern Grundlagen: Sprachdefinition Grammatik: BNF, EBNF, Syntaxdiagramme
Interpreter - Gliederung
Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache
Fachseminar WS 2008/09
Fachseminar WS 2008/09 Fachgebiet: Compilerbau Thema: Lexikalische Analyse (Scanner) Referent: Ali Sediq Betreuer: Prof. Dr. Helmut Weber 1 Inhaltsverzeichnis Lexikalische Analyse 1.0 Grundprobleme der
Formale Sprachen, reguläre und kontextfreie Grammatiken
Formale Sprachen, reguläre und kontextfreie Grammatiken Alphabet A: endliche Menge von Zeichen Wort über A: endliche Folge von Zeichen aus A A : volle Sprache über A: Menge der A-Worte formale Sprache
Werkzeuge zur Programmentwicklung
Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul
Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9
Kapitel 4 Einführung in den Scannergenerator Flex Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9 Generatoren für die lexikalische Analyse Scannergeneratoren werden eingesetzt um die
Anwenundg regulärer Sprachen und endlicher Automaten
Proseminar Theoretische Informatik Dozent: Prof. Helmut Alt Anwenundg regulärer Sprachen und endlicher Automaten Madlen Thaleiser 30. Oktober 2012 Reguläre Sprachen Regulärer Ausdruck definiert über einem
Automaten und formale Sprachen Klausurvorbereitung
Automaten und formale Sprachen Klausurvorbereitung Rami Swailem Mathematik Naturwissenschaften und Informatik FH-Gießen-Friedberg Inhaltsverzeichnis 1 Definitionen 2 2 Altklausur Jäger 2006 8 1 1 Definitionen
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
Programmiersprachen und Übersetzer
Programmiersprachen und Übersetzer Sommersemester 2009 5. April 2009 Vorteile bei der Verwendung höherer Programmiersprachen Vorteile bei der Verwendung höherer Programmiersprachen 1. Einfache Notation
Teil 7: Interpreterbau Prof. Dr. Max Mühlhäuser FG Telekooperation TU Darmstadt
Grundzüge der Informatik 1 Teil 7: erpreterbau Prof. Dr. Max Mühlhäuser FG Telekooperation TU Darmstadt Agenda Definitionen Unterschied Übersetzer/erpreter EBNF zur Definition der Sprachsyntax erpreterphasen
Vorlesung Informatik I
Vorlesung Informatik I Universität Augsburg Wintersemester 2010/2011 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik Programmieren in C Der Compilierungsprozess 1 Aufbau eines C-Programms 1. Direktiven
VU Software Paradigmen / SS 2014
VU Software Paradigmen 716.060 / SS 2014 Thorsten Ruprechter [email protected] Institute for Software Technology 1 Organisatorisches Ausgabe: 25.03. (heute) Fragestunde: 22.04. Abgabe: 29.04 (ausgedruckt)
Programmieren in Java
Programmieren in Java Vorlesung 07: Parsen Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 32 Inhalt Vorlesungsüberblick
Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff
Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind
1 Grammar Engineering. 2 Abstrakte Syntax als abstrakte Algebra. 3 LL(1)-Parser. 4 LR Parser. 5 Fehlerbehandlung. 6 Earley Parser
1 Grammar Engineering 2 Abstrakte Syntax als abstrakte Algebra 3 LL(1)-Parser 4 LR Parser 5 Fehlerbehandlung 6 Earley Parser Zusatzfolien Syntaktische Analyse Wintersemester 2008/09 1 / 44 Grammar Engineering
Grammatiken in Prolog
12. Grammatiken in Prolog 12-1 Grammatiken in Prolog Allgemeines: Gedacht zur Verarbeitung natürlicher Sprache. Dort braucht man kompliziertere Grammatiken als etwa im Compilerbau, andererseits sind die
Interdisziplinäre fachdidaktische Übung: Modelle für Sprachen in der Informatik. SS 2016: Grossmann, Jenko
Interdisziplinäre fachdidaktische Übung: Modelle für Sprachen in der SS 2016: Grossmann, Jenko Die Beschreibung orientiert sich am Begriffssystem der Beschreibung natürlicher Sprachen Sprache in der steht
Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014
Definition von domänenspezifischen Sprachen mit Xtext: Einführung 19. November 2014 Überblick Was ist zu tun, wenn wir selbst einen Ansatz für modellgetriebenen Entwicklung definieren wollen? Anforderungserfassung
Vorlesung Programmieren
Vorlesung Programmieren 14 Parsen, Suchen und Sortieren 19./26.01.2015 Prof. Dr. Ralf H. Reussner Version 1.0 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION
Theoretische Grundlagen des Software Engineering
Theoretische Grundlagen des Software Engineering 5: Reguläre Ausdrücke und Grammatiken [email protected] Software Systems Engineering Reguläre Sprachen Bisher: Charakterisierung von Sprachen über Automaten
Grundlagen der Programmierung 2 (Comp-D)
Grundlagen der Programmierung 2 (Comp-D) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 31. Mai 2007 Operationen auf Grammatiken Ziel: Normalisierungen, Vereinfachungen
7. Formale Sprachen und Grammatiken
7. Formale Sprachen und Grammatiken Computer verwenden zur Verarbeitung von Daten und Informationen künstliche, formale Sprachen (Maschinenspr., Assemblerspachen, Programmierspr., Datenbankspr., Wissensrepräsentationsspr.,...)
Grundlagen der Informatik Vorlesungsskript
Grundlagen der Informatik Vorlesungsskript Prof. Dr. T. Gervens, Prof. Dr.-Ing. B. Lang, Prof. Dr. F.M. Thiesing, Prof. Dr.-Ing. C. Westerkamp 16 AUTOMATISCHES ÜBERSETZEN VON PROGRAMMEN MIT MAKE... 2 16.1
9 Theoretische Informatik und Compilerbau
9 Theoretische Informatik und Compilerbau Theoretische Informatik und Mathematik schaffen die Basis für viele der technischen Entwicklungen, die wir in diesem Buch besprechen. Die boolesche Algebra (S.
6 Kontextfreie Grammatiken
6 Kontextfreie Grammatiken Reguläre Grammatiken und damit auch reguläre Ausdrücke bzw. endliche Automaten haben bezüglich ihres Sprachumfangs Grenzen. Diese Grenzen resultieren aus den inschränkungen,
Übungsaufgaben zu Formalen Sprachen und Automaten
Universität Freiburg PD Dr. A. Jakoby Sommer 27 Übungen zum Repetitorium Informatik III Übungsaufgaben zu Formalen Sprachen und Automaten. Untersuchen Sie das folgende Spiel: A B x x 2 x 3 C D Eine Murmel
Übersetzergenerierung mit lex und yacc
Übersetzergenerierung mit lex und yacc 0. Überblick und Organisatorisches Jan Bredereke SoSe 2004, Universität Bremen otivation Übersetzer: Grundlegende Werkzeuge welche Fehler kann er finden? Konstrukt
Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen
Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen (Kontextsensitive) Sprachen L 2 Menge aller kontextfreien
ARBEITSBLATT ZU FORMALEN SPRACHEN
ARBEITSBLATT ZU FORMALEN SPRACHEN Aufgabe 1: Gegeben ist die folgende Formale Sprache L(G) mit G = (T, N, P, S). Die Produktionen lauten ZUWEISUNG ::= name zuweisungsoperator AUSDRUCK semikolon AUSDRUCK
1 Syntax von Programmiersprachen
1 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ): formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmier-Sprache Festlegung, wie Programme
Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -
Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen - Thies Pfeiffer Technische Fakultät [email protected] Vorlesung, Universität Bielefeld, Winter 2012/2013 1 / 1 Exkurs: Formale
Kapitel 2. Methoden zur Beschreibung von Syntax
1 Kapitel 2 Methoden zur Beschreibung von Syntax Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt 2 Ziele Zwei Standards zur Definition der Syntax von
kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung
Theoretische Informatik Rainer Schrader Zentrum für Angewandte Informatik Köln 14. Juli 2009 1 / 40 2 / 40 Beispiele: Aus den bisher gemachten Überlegungen ergibt sich: aus der Chomsky-Hierarchie bleiben
Java für Fortgeschrittene Proseminar im Sommersemester 2009 Compilertechnik - Parser, Scanner & Co.
Java für Fortgeschrittene Proseminar im Sommersemester 2009 Compilertechnik - Parser, Scanner & Co. Andrea Cuno Technische Universität München 22.06.2009 Zusammenfassung Reguläre Ausdrücke in Java bieten
Deklarationen in C. Prof. Dr. Margarita Esponda
Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.
Das erste C++ Programm
Das erste C++ Programm // Program: power8.c // Raise a number to the eighth power. #include int main() { // input std::cout > a; // computation int
Formale Sprachen und Automaten
Formale Sprachen und Automaten Kapitel 1: Grundlagen Vorlesung an der DHBW Karlsruhe Thomas Worsch Karlsruher Institut für Technologie, Fakultät für Informatik Wintersemester 2012 Ziel Einführung der wichtigsten
Grammatik Prüfung möglich, ob eine Zeichenfolge zur Sprache gehört oder nicht
Zusammenhang: Formale Sprache Grammatik Formale Sprache kann durch Grammatik beschrieben werden. Zur Sprache L = L(G) gehören nur diejenigen Kombinationen der Zeichen des Eingabealphabets, die durch die
LR(k)-Parser. CYK-Algorithmus ist zu langsam.
LR(k)-Prser Ziele: Effizienter (und deterministischer) Test, ob ein gegebenes Wort w in der Sprche L(G) enthlten ist. Flls j: Konstruktion des Syntxbums Flls nein: Hinweise zum Fehler CYK-Algorithmus ist
Compiler, Übersetzer. Allgemeine Erklärung / Definition
Compiler, Übersetzer Allgemeine Erklärung / Definition Ein Übersetzer ist ein Programm, das ein S 1 -Wort den Quelltext in ein S 2 -Wort umwandelt den Zieltext wobei die Semantik erhalten bleibt. Frage:
Kontextfreie Sprachen
Kontextfreie Sprachen Bedeutung: Programmiersprachen (Compilerbau) Syntaxbäume Chomsky-Normalform effiziente Lösung des Wortproblems (CYK-Algorithmus) Grenzen kontextfreier Sprachen (Pumping Lemma) Charakterisierung
Theorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie
Theorie der Informatik 17. März 2014 6. Formale Sprachen und Grammatiken Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 6.1 Einführung
Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2013
Automaten und Formale Sprachen alias Theoretische Informatik Sommersemester 2013 Dr. Sander Bruggink Übungsleitung: Jan Stückrath Sander Bruggink Automaten und Formale Sprachen 1 Deterministische Kellerautomaten
Fachseminar. Semantische Analyse
Fachseminar Vortragender: Arton Berisha Thema : Semantische Analyse Kursleiter: Prof. Dr. Helmut Weber Agenda 1. Einleitung 1.1 Phasen eines Compilers 1.2 Symboltabelle 2. Semantische Analyse 2.1 Was ist
2.6 Deterministisches Top-Down-Parsen
48 2.6 Deterministisches Top-Down-Parsen Als nächstes wollen wir uns mit Methoden zur syntaktischen Analyse befassen. Der lexikale canner eines Compilers liest die Eingabe Zeichen für Zeichen und erzeugt
Begriffe (Wiederholung)
Begriffe (Wiederholung) Sprache Menge aller Sätze Alphabet terminales / nicht terminales terminales A. Zeichen aus denen die Sätze der Sprache bestehen nicht terminales A. Hilfszeichen zum Bilden von Regeln
Algorithmen & Programmierung. Ausdrücke & Operatoren (1)
Algorithmen & Programmierung Ausdrücke & Operatoren (1) Ausdrücke Was ist ein Ausdruck? Literal Variable Funktionsaufruf Ausdruck, der durch Anwendung eines einstelligen (unären) Operators auf einen Ausdruck
Grundlagen der Informatik III Wintersemester 2010/2011 22. Vorlesung Dr.-Ing. Wolfgang Heenes
Grundlagen der Informatik III Wintersemester 2010/2011 22. Vorlesung Dr.-Ing. Wolfgang Heenes int main() { printf("hello, world!"); return 0; } msg: main:.data.asciiz "Hello, world!".text.globl main la
Propädeutikum. Dipl.-Inf. Frank Güttler
Propädeutikum 2015 Vorbereitungskurs Informatikstudium Erfolgreich Studieren Programmieren (C-Kurs) [email protected] Universität Leipzig Institut für Informatik Technische Informatik
Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens
Grundlagen von C Jonas Gresens Proseminar C Grundlagen und Konzepte Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität
Algorithmen und Formale Sprachen
Algorithmen und Formale Sprachen Algorithmen und formale Sprachen Formale Sprachen und Algorithmen Formale Sprachen und formale Algorithmen (formale (Sprachen und Algorithmen)) ((formale Sprachen) und
Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel
Java für Anfänger Teil 2: Java-Syntax Programmierkurs 11.-15.10.2010 Manfred Jackel 1 Syntax für die Sprache Java public class Welcome { } Schlüsselworte Reservierte Worte Keywords Wortsymbol Syntax: griech.
Algorithmen & Programmierung. Formale Sprachen Die Logik hinter dem Compiler
Algorithmen & Programmierung Formale Sprachen Die Logik hinter dem Compiler Natürlichsprachliche Programme? Können Programme natürlichsprachlich formuliert werden? Kaufe zwei Tüten Mehl und Gemüse!? Implizites
Formale Sprachen. Eine Einführung. Tim Lethen Düsseldorf Version II (04-06)
Formale Sprachen - Eine Einführung Tim Lethen Düsseldorf Version II (04-06) INHALT 0 Einleitung... 3 1 Grundlegende Definitionen... 3 2 Grammatiken... 4 2.1 Definitionen... 4 2.2 Logische Grammatiken (DCGs)...
3.4 Struktur von Programmen
3.4 Struktur von Programmen Programme sind hierarchisch aus Komponenten aufgebaut. Für jede Komponente geben wir Regeln an, wie sie aus anderen Komponenten zusammengesetzt sein können. program ::= decl*
Umformung NTM DTM. Charakterisierung rek. aufz. Spr. Chomsky-3-Grammatiken (T5.3) Chomsky-0-Grammatik Rek. Aufz.
Chomsky-0-Grammatik Rek. Aufz. Satz T5.2.2: Wenn L durch eine Chomsky-0- Grammatik G beschrieben wird, gibt es eine NTM M, die L akzeptiert. Beweis: Algo von M: Schreibe S auf freie Spur. Iteriere: Führe
2.11 Kontextfreie Grammatiken und Parsebäume
2.11 Kontextfreie Grammatiken und Parsebäume Beispiel: Beispiel (Teil 3): Beweis für L(G) L: Alle Strings aus L der Länge 0 und 2 sind auch in L(G). Als Induktionsannahme gehen wir davon aus, dass alle
Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder
Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Syntax und Semantik): 1. Was ist Syntax? Was ist Semantik? Erläutern Sie den Unterschied. 2.
Grundlagen der Theoretischen Informatik
Grundlagen der Theoretischen Informatik Sommersemester 2015 22.04.2015 Viorica Sofronie-Stokkermans e-mail: [email protected] 1 Bis jetzt 1. Terminologie 2. Endliche Automaten und reguläre Sprachen
Grundbegriffe. Grammatiken
Grammatiken Grammatiken in der Informatik sind ähnlich wie Grammatiken für natürliche Sprachen ein Mittel, um alle syntaktisch korrekten Sätze (hier: Wörter) einer Sprache zu erzeugen. Beispiel: Eine vereinfachte
10 Die Programmiersprache C99: Zusammenfassung
10 Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 25. September 2014, 18:40 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9
Informatik I 2 Übung 9 Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Quellcode Strukturieren Wenn alle Funktionen in einer Datei zusammengefasst sind wird es schnell unübersichtlich Mehrere
