Compilerbau. Einführung in Bison
|
|
- Dominik Hoch
- vor 6 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
MehrKapitel 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
MehrCompilerbau 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
MehrDer Grid-Occam-Compiler. Syntaxanalyse
Der Grid-Occam-Compiler Syntaxanalyse Grammatikgetriebener Compilerbau Grammatik Teil der Sprachdefinition Grammatik liefert Liste der Tokenklassen Grammatik hilft bei Strukturierung der abstrakten Syntax
MehrLR(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
MehrSyntaxanalyse 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
MehrLexikalische 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
Mehr9 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
MehrInhalte 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
MehrWas 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?
MehrFachseminar 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,
MehrAlphabet, 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
MehrInhalte 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
MehrEinfü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
MehrFACHHOCHSCHULE 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
MehrEinführung in die Informatik. Programming Languages
Einführung in die Informatik Programming Languages Beschreibung von Programmiersprachen Wolfram Burgard Cyrill Stachniss 1/15 Motivation und Einleitung Wir haben in den vorangehenden Kapiteln meistens
MehrVon 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
MehrSyntax 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
MehrPraktikum 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
MehrEinfü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
Mehr9.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
MehrGrammatiken 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
MehrProgrammierung 2. Übersetzer: Das Frontend. Sebastian Hack. Klaas Boesche. Sommersemester
1 Programmierung 2 Übersetzer: Das Frontend Sebastian Hack hack@cs.uni-saarland.de Klaas Boesche boesche@cs.uni-saarland.de Sommersemester 2012 Vom Programm zur Maschine Was passiert eigentlich mit unseren
MehrGrundlagen 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)
MehrProgrammiersprachen 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
MehrLexikalische 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,
Mehr4 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
MehrInhalt 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
MehrKellerautomat (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
MehrSoftware 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
MehrVU Software Paradigmen / SS 2012
VU Software Paradigmen 716.060 / SS 2012 Sandra Fruhmann sandra.fruhmann@student.tugraz.at Inhalt Grammatiken Chomsky Sprachhierarchie Parse Trees Recursive Descent Parser First-, Follow-Mengen 2 Compiler
MehrInterpreter - 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
MehrFachseminar 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
MehrFormale 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
MehrWerkzeuge zur Programmentwicklung
Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul
MehrKapitel 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
MehrAnwenundg 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
MehrAutomaten 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
Mehr1. 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
MehrProgrammiersprachen 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
MehrTeil 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
MehrVorlesung 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
MehrParser4Kids interaktive Lernumgebung
Parser4Kids interaktive Lernumgebung Parser4Kids vermittelt die grundlegende Funktionsweise eines Parsers auf eine intuitive und spielerische Art anhand des vereinfachten Modells eines Fertigbauhauses.
MehrVU Software Paradigmen / SS 2014
VU Software Paradigmen 716.060 / SS 2014 Thorsten Ruprechter ruprechter@tugraz.at Institute for Software Technology 1 Organisatorisches Ausgabe: 25.03. (heute) Fragestunde: 22.04. Abgabe: 29.04 (ausgedruckt)
MehrProgrammieren 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
MehrCompilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dr. Andreas Kunert Dipl.-Inf.
Bachelor-Programm Compilerbau im SoSe 2014 Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dr. Andreas Kunert Dipl.-Inf. Ingmar Eveslage fischer@informatik.hu-berlin.de J.Fischer 7.1 4.3 LL-Parser Prinzip der
MehrProgrammieren 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
Mehr1 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
MehrGrammatiken 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
MehrInterdisziplinä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
MehrDefinition 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
MehrVorlesung 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
MehrInformatik IC2. Balazs Simon
Informatik IC2 Balazs Simon Inhaltsverzeichnis 1 Contextfreie Sprachen 3 1.1 Ableitungsbaum..................................... 3 1.2 Schönheit........................................ 4 1.3 Normalformen......................................
MehrInformatik III. Christian Schindelhauer Wintersemester 2006/07 5. Vorlesung
Informatik III Christian Schindelhauer Wintersemester 2006/07 5. Vorlesung 09.11.2006 schindel@informatik.uni-freiburg.de 1 Äquivalenzklassen Definition und Beispiel Definition Für eine Sprache L Σ* bezeichnen
MehrTheoretische Grundlagen des Software Engineering
Theoretische Grundlagen des Software Engineering 5: Reguläre Ausdrücke und Grammatiken schulz@eprover.org Software Systems Engineering Reguläre Sprachen Bisher: Charakterisierung von Sprachen über Automaten
MehrGrundlagen 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
Mehr7. 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.,...)
MehrGrundlagen 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
Mehr9 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.
Mehr6 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,
MehrÜ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
MehrÜ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
MehrWas 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
MehrARBEITSBLATT 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
Mehr1 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
MehrAlgorithmen und Datenstrukturen I - Exkurs Formale Sprachen -
Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen - Thies Pfeiffer Technische Fakultät tpfeiffe@techfak.uni-bielefeld.de Vorlesung, Universität Bielefeld, Winter 2012/2013 1 / 1 Exkurs: Formale
MehrKapitel 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
Mehrkontextfreie 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
MehrJava 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
MehrDeklarationen 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.
MehrDas 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
MehrFormale 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
MehrGrammatik 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
MehrLR(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
MehrCompiler, Ü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:
MehrKontextfreie Sprachen
Kontextfreie Sprachen Bedeutung: Programmiersprachen (Compilerbau) Syntaxbäume Chomsky-Normalform effiziente Lösung des Wortproblems (CYK-Algorithmus) Grenzen kontextfreier Sprachen (Pumping Lemma) Charakterisierung
MehrTheorie 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
MehrAutomaten 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
MehrFachseminar. 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
Mehr2.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
MehrBegriffe (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
MehrAlgorithmen & 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
MehrGrundlagen 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
MehrPropädeutikum. Dipl.-Inf. Frank Güttler
Propädeutikum 2015 Vorbereitungskurs Informatikstudium Erfolgreich Studieren Programmieren (C-Kurs) guettler@informatik.uni-leipzig.de Universität Leipzig Institut für Informatik Technische Informatik
MehrProgrammierkurs C++ Kapitel 6 Module Seite 1
Programmierkurs C++ Kapitel 6 Module Seite 1 (Quell-)Module Unter einem Modul versteht man einen Teil des Programms, der eigenständig übersetzt werden kann. In der Syntax der Programmiersprachen werden
MehrEinleitung 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
MehrAlgorithmen 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
MehrJava 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.
MehrAlgorithmen & 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
MehrFormale 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)...
Mehr3.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*
MehrUmformung 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
Mehr2.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
Mehr7 Einführung in den Compilerbau
7 Einführung in den Compilerbau 7. 1 Allgemeines 7. 2 Übersetzung 7.1 Allgemeines 7.1.1 Definitionen Wichtige Begriffe bei Programmiersprachen: (1) Menge der erlaubten Zeichen Groß-, Kleinbuchstaben, Sonderzeichen
MehrProgrammierung 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.
MehrGrundlagen der Theoretischen Informatik
Grundlagen der Theoretischen Informatik Sommersemester 2015 22.04.2015 Viorica Sofronie-Stokkermans e-mail: sofronie@uni-koblenz.de 1 Bis jetzt 1. Terminologie 2. Endliche Automaten und reguläre Sprachen
MehrGrundbegriffe. 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
Mehr10 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
MehrÜ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
Mehr