Compilerbau. Einführung in Bison

Größe: px
Ab Seite anzeigen:

Download "Compilerbau. Einführung in Bison"

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

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

Mehr

Kapitel 5: Syntax-Analyse

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

Mehr

Compilerbau Syntaxanalyse 68. LR(1)-Syntaxanalyse

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

Mehr

Der Grid-Occam-Compiler. Syntaxanalyse

Der 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

Mehr

LR(1) Itemmengenkonstruktion

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

Mehr

Syntaxanalyse Ausgangspunkt und Ziel

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

Mehr

Lexikalische Programmanalyse der Scanner

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

Mehr

9 Compilerbau-Werkzeuge

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

Mehr

Inhalte der Vorlesung. 6. Syntaxgesteuerte Übersetzung. 6. Syntaxgesteuerte Übersetzung. Attributierter Syntaxbaum

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

Mehr

Was ist ein Compiler?

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?

Mehr

Fachseminar Compilerbau

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,

Mehr

Alphabet, formale Sprache

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

Mehr

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. 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

Mehr

Einführung - Parser. Was ist ein Parser?

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

Mehr

FACHHOCHSCHULE MANNHEIM

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

Mehr

Einführung in die Informatik. Programming Languages

Einfü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

Mehr

Von der Grammatik zum AST

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

Mehr

Syntax von Programmiersprachen

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

Mehr

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen

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

Mehr

Einführung in die Informatik Grammars & Parsers

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

Mehr

9.4 Grundlagen des Compilerbaus

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

Mehr

Grammatiken und ANTLR

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

Mehr

Programmierung 2. Übersetzer: Das Frontend. Sebastian Hack. Klaas Boesche. Sommersemester

Programmierung 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

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

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)

Mehr

Programmiersprachen und Übersetzer

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

Mehr

Lexikalische Analyse, Tokenizer, Scanner

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,

Mehr

4 Lexikalische Analyse und Parsing

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

Mehr

Inhalt Kapitel 5: Syntax

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

Mehr

Kellerautomat (1/4) Kellerautomat (2/4) Kellerautomat (3/4) Kellerautomat (4/4)

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

Mehr

Software Entwicklung 2. Übersetzerbau 1

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

Mehr

VU Software Paradigmen / SS 2012

VU 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

Mehr

Interpreter - Gliederung

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

Mehr

Fachseminar WS 2008/09

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

Mehr

Formale Sprachen, reguläre und kontextfreie Grammatiken

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

Mehr

Werkzeuge zur Programmentwicklung

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

Mehr

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 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

Mehr

Anwenundg regulärer Sprachen und endlicher Automaten

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

Mehr

Automaten und formale Sprachen Klausurvorbereitung

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

Mehr

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. 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

Mehr

Programmiersprachen und Übersetzer

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

Mehr

Teil 7: Interpreterbau Prof. Dr. Max Mühlhäuser FG Telekooperation TU Darmstadt

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

Mehr

Vorlesung Informatik I

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

Mehr

Parser4Kids interaktive Lernumgebung

Parser4Kids interaktive Lernumgebung Parser4Kids interaktive Lernumgebung Parser4Kids vermittelt die grundlegende Funktionsweise eines Parsers auf eine intuitive und spielerische Art anhand des vereinfachten Modells eines Fertigbauhauses.

Mehr

VU Software Paradigmen / SS 2014

VU 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)

Mehr

Programmieren in Java

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

Mehr

Compilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dr. Andreas Kunert Dipl.-Inf.

Compilerbau. 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

Mehr

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

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

Mehr

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 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

Mehr

Grammatiken in Prolog

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

Mehr

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 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

Mehr

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014

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

Mehr

Vorlesung Programmieren

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

Mehr

Informatik IC2. Balazs Simon

Informatik IC2. Balazs Simon Informatik IC2 Balazs Simon Inhaltsverzeichnis 1 Contextfreie Sprachen 3 1.1 Ableitungsbaum..................................... 3 1.2 Schönheit........................................ 4 1.3 Normalformen......................................

Mehr

Informatik III. Christian Schindelhauer Wintersemester 2006/07 5. Vorlesung

Informatik 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

Mehr

Theoretische Grundlagen des Software Engineering

Theoretische 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

Mehr

Grundlagen der Programmierung 2 (Comp-D)

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

Mehr

7. Formale Sprachen und Grammatiken

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.,...)

Mehr

Grundlagen der Informatik Vorlesungsskript

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

Mehr

9 Theoretische Informatik und Compilerbau

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.

Mehr

6 Kontextfreie Grammatiken

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,

Mehr

Übungsaufgaben zu Formalen Sprachen und Automaten

Ü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 Ü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

Mehr

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 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

Mehr

ARBEITSBLATT ZU FORMALEN SPRACHEN

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

Mehr

1 Syntax von Programmiersprachen

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

Mehr

Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -

Algorithmen 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

Mehr

Kapitel 2. Methoden zur Beschreibung von Syntax

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

Mehr

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

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

Mehr

Java für Fortgeschrittene Proseminar im Sommersemester 2009 Compilertechnik - Parser, Scanner & Co.

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

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

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.

Mehr

Das erste C++ Programm

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

Mehr

Formale Sprachen und Automaten

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

Mehr

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

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

Mehr

LR(k)-Parser. CYK-Algorithmus ist zu langsam.

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

Mehr

Compiler, Übersetzer. Allgemeine Erklärung / Definition

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:

Mehr

Kontextfreie Sprachen

Kontextfreie Sprachen Kontextfreie Sprachen Bedeutung: Programmiersprachen (Compilerbau) Syntaxbäume Chomsky-Normalform effiziente Lösung des Wortproblems (CYK-Algorithmus) Grenzen kontextfreier Sprachen (Pumping Lemma) Charakterisierung

Mehr

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. 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

Mehr

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2013

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

Mehr

Fachseminar. Semantische Analyse

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

Mehr

2.6 Deterministisches Top-Down-Parsen

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

Mehr

Begriffe (Wiederholung)

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

Mehr

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

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

Mehr

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 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

Mehr

Propädeutikum. Dipl.-Inf. Frank Güttler

Propä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

Mehr

Programmierkurs C++ Kapitel 6 Module Seite 1

Programmierkurs 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

Mehr

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

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

Mehr

Algorithmen und Formale Sprachen

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

Mehr

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

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.

Mehr

Algorithmen & Programmierung. Formale Sprachen Die Logik hinter dem Compiler

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

Mehr

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) 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)...

Mehr

3.4 Struktur von Programmen

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*

Mehr

Umformung NTM DTM. Charakterisierung rek. aufz. Spr. Chomsky-3-Grammatiken (T5.3) Chomsky-0-Grammatik Rek. Aufz.

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

Mehr

2.11 Kontextfreie Grammatiken und Parsebäume

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

Mehr

7 Einführung in den Compilerbau

7 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

Mehr

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

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.

Mehr

Grundlagen der Theoretischen Informatik

Grundlagen 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

Mehr

Grundbegriffe. Grammatiken

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

Mehr

10 Die Programmiersprache C99: Zusammenfassung

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

Mehr

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Ü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