Compiler; Übersetzungsprogramme. Grundlagen der Programmierung 3 A. Compiler für Programmiersprachen. Phasen eines Compilers
|
|
- Leander Fertig
- vor 6 Jahren
- Abrufe
Transkript
1 ompiler; Übersetzungsprogramme Grundlagen der Programmierung 3 A ompiler A: Phasen; Scanner Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Ein Übersetzer (ompiler) ist ein Programm, das ein Wort einer formalen Sprache S 1 (den Quelltext) in ein Wort einer anderen formalen Sprache S 2 (den Zieltext) umwandelt, wobei die Semantik erhalten bleibt. (Semantik meist separat erklärt) Beispiele: Programme in Haskell, Java, Python, oder PASAL, werden in Maschinenkode,, Assembler, oder Bytecode übersetzt. LaTex-Eingaben werden in eine PDF-Datei (bzw. ps-datei) übersetzt Grundlagen der Programmierung 2 (ompiler-a) 2/28 ompiler für Programmiersprachen Phasen eines ompilers Ein ompiler ist ein Programm, das ein S 1 -Programm (das Quellprogramm) in ein S 2 -Programm (das Zielprogramm) umwandelt, wobei die (operationale) Semantik erhalten bleibt Lexikalische (Scanning): Text des Programms wird in Tokenstrom umgewandelt Syntaxanalyse (Parsing): Tokenstrom wird entsprechend der Grammatik in einen Syntaxbaum transformiert Semantische : Typcheck, Scope von Variablen,... Zwischencode-Erzeugung: Generierung von ode für eine abstrakte Maschine odeoptimierung: Verbesserung des Zwischencodes ode-erzeugung: Erzeugung des Ausgabe-Programms (z.b. in, Assembler) Grundlagen der Programmierung 2 (ompiler-a) 3/28 Grundlagen der Programmierung 2 (ompiler-a) 4/28
2 Phasen eines ompilers: Diagramm T-Diagramme nach N. Wirth Quelltext (String) Lexikalische Syntaxbaum Zwischencode Syntaktische Semantische Zwischencodeerzeugung odeoptimierung odegenerierung Tokenstrom Syntaxbaum (annotiert) Zwischencode (optimiert) S 3 S 3 Intp Übersetzung von S 1 nach S 2 Programm ist geschrieben in S 3 Im rechten Diagramm: ein Interpreter für S 3 ist vorhanden. ompiler kann ausgeführt werden. S 3 maschinennaher ode Grundlagen der Programmierung 2 (ompiler-a) 5/28 Grundlagen der Programmierung 2 (ompiler-a) 6/28 Zusammensetzen von ompilern: Zusammensetzen von ompilern: S 4 S 4 Intp S 2 S 3 S 5 S 5 Intp Hintereinanderausführung: übersetzt S 1 S 3, falls S 4 und S 5 -Interpreter vorhanden sind. S 4 S 4 S 5 S 6 S 6 Intp S 5 S 5 Intp Das rechteste (blaue) T-Diagramm steht für den resultierenden ompiler. Konstruierbar: lauffähiger Übersetzer von S 1 nach S 2 der nur einen S 5 -Interpreter benötigt Grundlagen der Programmierung 2 (ompiler-a) 7/28 Grundlagen der Programmierung 2 (ompiler-a) 8/28
3 T-Diagramme; Anwendung: Bootstrapping Anwendung der T-Diagramme: Bootstrapping Konstruktion eines ompilers für die Programmiersprache P möglichst viel bereits in P geschrieben. Untersprachen: P XXL P L P ore 1. P ore -ompiler für einen kleinen Ausschnitt von P 2. P L -Übersetzer nach P ore, geschrieben in P ore 3. P L - ompiler zusammensetzen ; (Resultat: blau) P L P ore P ore P ore P L P ore P ore P L Darauf aufbauend kann man weiter konstruieren P XXL P L Resultat: P L P L P XXL P L P L P XXL Ein ompiler, der die volle Sprache P XXL übersetzt. und der in P L geschrieben ist. Grundlagen der Programmierung 2 (ompiler-a) 9/28 Grundlagen der Programmierung 2 (ompiler-a) 10/28 Phasen eines ompilers Phasen eines ompilers: Diagramm Lexikalische (Scanning): Text des Programms wird in Tokenstrom umgewandelt Syntaxanalyse (Parsing): Tokenstrom wird entsprechend der Grammatik in einen Syntaxbaum transformiert Semantische : Typcheck, Scope von Variablen,... Quelltext (String) Syntaxbaum Lexikalische Syntaktische Semantische Tokenstrom Zwischencode-Erzeugung: Generierung von ode für eine abstrakte Maschine Zwischencodeerzeugung Syntaxbaum (annotiert) odeoptimierung: Verbesserung des Zwischencodes ode-erzeugung: Erzeugung des Ausgabe-Programms (z.b. in, Assembler) Zwischencode odeoptimierung odegenerierung Zwischencode (optimiert) maschinennaher ode Grundlagen der Programmierung 2 (ompiler-a) 11/28 Grundlagen der Programmierung 2 (ompiler-a) 12/28
4 Beispiele zu den Phasen Lexikalische Z.B. IF 13 == X1 THEN A wird zu: ( IF, 13, ==, X1, THEN, A ) Syntaxanalyse (Parsing): Test, ob das Programm der Grammatik entspricht. Umwandlung in Herleitungsbaum, dann in Syntaxbaum: Z.B. ( IF, 13, ==, X1, THEN, A ) wird zu: IFTHEN IF 13 == X1 THEN A == 13 X1 Semantische Typüberprüfungen: Z.B. 1 + a wird zurückgewiesen. Scopeprüfungen: Sind Variablen/Funktionen/... definiert? Sind sie an der richtigen Stelle deklariert? A Weitere Komponenten Symboltabelle speichert wesentliche Attribute (Typ, Gültigkeitsbereich, etc.) der Bezeichner des Quellprogramms. Fehlerbehandlung der Fehler, Lokalisierung im Quellprogramm, Meldung an den Benutzer. Evtl. automatische Behebung des Fehlers und Fortsetzung der Übersetzung Grundlagen der Programmierung 2 (ompiler-a) 13/28 Grundlagen der Programmierung 2 (ompiler-a) 14/28 Weitere mögliche Phasen Front-End und Back-End Einleseroutine; Zeichenbehandlung abhängig vom Prozessor bzw. Betriebssystem I.a. Standard-Routinen (Einlesen, Zeichenkodierung) Präprozessor Vorverarbeitung des Quellprogramms (i.a. Makro-Expansion) Assembler Objektcode. übersetzt das Assemblerprogramm in Binder/Lader Umsetzung in ausführbaren Maschinenkode plus Hinzunahme von anderem Objektcode z.b. aus Bibliothek Aufteilung des ompilers: Front-End: maschinenunabhängiger Teil (z.b. Syntaxanalyse, lexikalische, Typüberprüfung, Zwischencode-Erzeugung, Zwischencode-Optimierung). Back-End: maschinenspezifischer Teil (z. B. I/O, odegenerierung) Grundlagen der Programmierung 2 (ompiler-a) 15/28 Grundlagen der Programmierung 2 (ompiler-a) 16/28
5 Worte, Zeichenketten, formale Sprachen Beispiele Gegeben: ein Alphabet Σ Definitionen: Eine Zeichenkette (String) ist endliche Folge von Σ-Symbolen ε bezeichnet den leeren String Σ : die Menge aller Worte über Σ formale Sprache über Σ: ist definiert als eine Teilmenge von Σ Beispiele Σ = {a, b, c}, ac, aaaabcc sind Strings über Σ. Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}: Die Ziffernrepräsentationen aller natürlichen Zahlen ist eine formale Sprache über Σ. Z.B. 111, 7, ,... Σ = {A,..., Z, a,..., z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ), (,...}. Alle möglichen Haskell-Programme (als Strings) sind eine formale Sprache über Σ. Z.B. die Zeichenfolge: main = map quadrat [] Grundlagen der Programmierung 2 (ompiler-a) 17/28 Grundlagen der Programmierung 2 (ompiler-a) 18/28 Reguläre formale Sprachen: Formalismen Reguläre Ausdrücke: Beispiele Beschreibungsmöglichkeiten für reguläre formale Sprachen: reguläre Ausdrücke (rechts- bzw. links-)reguläre Grammatik (nur ein Nichtterminal am rechten bzw. linken Ende von rechten Seiten von Produktionen erlaubt) DEA (deterministischer endlicher Automat): akzeptierte Sprache NEA (nicht-deterministischer endlicher Automat): akzeptierte Sprache Diese sind alle äquivalent in folgendem Sinn: die gleichen formalen Sprachen sind damit definierbar 0+( )( ) positive ganze Zahlen (als Text) (A Z)(A Z + a z) Worte, die mit Großbuchstaben beginnen (A Z)(A Z + a z)(a Z + a z) Worte aus drei Buchstaben, die mit Großbuchstaben beginnen Nicht regulär: alle geklammerten Ausdrücke wie (1 + ((2 + 3) + 9) Grundlagen der Programmierung 2 (ompiler-a) 19/28 Grundlagen der Programmierung 2 (ompiler-a) 20/28
6 Lexikalische (Tokenizer, Scanner) Scanner: Etwas genauer Aufgaben-Aufteilung des ompilers: Zuerst Scanner (lokale) Zeichen (Symbol-) Dann Parser Syntax- (kommt noch) Aufgaben des Scanners: Erkennung von: Zahlen, Bezeichner, Namen, Schlüsselworte, Strings d.h. reguläre Ausdrücke Aufbau der Symboltabelle Zeichenstrom Tokenstrom und Weitergabe an den Parser Einlesen des Programmtexts als lineare Zeichenkette Beseitigung von Kommentaren, Leer- und Tabulatorzeichen. Zusammenfassen von Teilstrings (Schlüsselworte, Bezeichner, Zahlenwerte, u ä) Ergebnis: Strom von Token Ein Token kann bestehen aus: Markierung: Art des Tokens (Schlüsselwort, Name, Zahl,... ) Attribute: wie String, Zahlwert, Position im Eingabefile. Es gibt Scanner-Generatoren (Z.B. lex). Allerdings ist es oft einfacher, einen Scanner selbst zu schreiben. Z.B. unter Benutzung endlicher Automaten. Üblich: Eigenes Ende-Token für Eingabestrom. Grundlagen der Programmierung 2 (ompiler-a) 21/28 Grundlagen der Programmierung 2 (ompiler-a) 22/28 Beispiel für Tokens Grammatik-Zerlegung: Eingabe Tokenmarkierung Attribut Position in der Eingabe if Keyword if Num x1 Id x Mult ode( ) 2000 <= Relop ode(<=) (501,30) Scanner Parser Zahl ::= Ziffer Ziffer Zahl Ziffer ::= Bezeichner ::= har har RestBez RestBez ::= Alphanum RestBez Alphanum Alphanum ::= Ziffer har E ::= E + T T T ::= T F F F ::= (E) Zahl Bezeichner Parseralphabet = {Tokenmarkierungen} Parseralphabet im Beispiel: {+,*,Zahl, Bezeichner,),( } Der Parser behandelt alle Bezeichner als ein einziges Terminal Grundlagen der Programmierung 2 (ompiler-a) 23/28 Grundlagen der Programmierung 2 (ompiler-a) 24/28
7 ompiler-phasen: Struktur und Typen Fehlererkennung des Scanners Typen der Funktionen, in Haskell-Notation: Scanner: deterministischer Teil-Parser: Teil-Parser mit Backtracking Gesamt-Parser: String -> [Token] [Token] -> ([Token], Syntaxbaum) Tokenliste -> (Rest der Tokenliste, Syntaxbaum der konsumierten Tokenliste) [Token] -> [([Token], Syntaxbaum)] Tokenliste -> Liste der Möglichkeiten [Token] -> Syntaxbaum falsche Zahlen Z.B. 123.a falsche Escape-Folgen in Strings, ein fehlendes String-Endezeichen, oder evtl. Längenüberschreitungen. Bezeichner, die nicht der Konvention entsprechen Ungültige Symbole in bestimmten Kontexten Nicht erkennbar für den Scanner: Klammerfehler, Klammerfehler bzgl. (tief) geschachtelter Kommentare falsche Schlüsselworte. Grundlagen der Programmierung 2 (ompiler-a) 25/28 Grundlagen der Programmierung 2 (ompiler-a) 26/28 Scannen von Kommentaren und Strings Scannen von Kommentaren: String im Eingabestrom: = Unterstring mit linkem und rechtem Begrenzungssymbol. Bekannte Problematik: String im String? Beachte: trennt, erzeugt aber keine Klammerstruktur sinnvolle Lösungsalternativen: Escape-symbol \ als Kommando: \ im String \\ im String \ Verdopplung: im String Nachteil: Exponentiell große Strings könnten in der Eingabe erforderlich sein abhängig von der Tiefe bzw. der Anzahl Scanner-Durchgänge. Zeilenkommentare geklammerte Kommentare Anfangssymbol z.b. * oder ; oder % oder oder //. Kommentar-Begrenzer: Z.B. Anfang: /, Ende: /. Aktuelle Programmiersprachen: nur eine Klammerebene; Echte Kommentar-Schachtelung muss vom Parser erkannt werden. Beachte Zeilenkommentar im String sind Stringzeichen. Der Scanner darf keine Leerzeichen in Strings entfernen Grundlagen der Programmierung 2 (ompiler-a) 27/28 Grundlagen der Programmierung 2 (ompiler-a) 28/28
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
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
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
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
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
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
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
MehrEinführung Compilerbau
Reinhard Tartler 1. Juni 2005 Vorlesung Syntaxanalyse SS 2005 Denition Übersetzung eines Textes von Sprache L1 in andere Sprache L2 unter Beibehaltung der Semantik Sprache deniert eine abstrakte Maschine
Mehr1. Der Einstieg in Java
1. Der Einstieg in Java Was heißt Programmieren? 1. Der Einstieg in Java Lernziele: Am Ende dieses Kapitels sollen Sie wissen, aus welchen Bestandteilen ein Java-Programm besteht, Java-Programme übersetzen
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
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
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
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?
Mehr1. Der Einstieg in Java. Was heißt Programmieren?
1. Der Einstieg in Java Lernziele: Am Ende dieses Kapitels sollen Sie wissen, aus welchen Bestandteilen ein Java-Programm besteht, Java-Programme übersetzen und ausführen können, Möglichkeiten der Kommentierung
MehrSyntaktische Analyse (Parsen)
Syntaktische Analyse (Parsen) Gegeben: eine kontextfreie Grammatik G und ein String w. Fragen: Vorgehen: gehört w zu L(G)? Welche Bedeutung hat w? Konstruiere Herleitungsbaum zu w P raktische Informatik
MehrProgrammieren I. Formale Sprachen. www.kit.edu. Institut für Angewandte Informatik
Programmieren I Formale Sprachen KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Formale Sprachen: Allgemeines Sprachen werden
MehrVorlesung Theoretische Informatik
Vorlesung Theoretische Informatik Automaten und Formale Sprachen Hochschule Reutlingen Fakultät für Informatik Masterstudiengang Wirtschaftsinformatik überarbeitet von F. Laux (Stand: 09.06.2010) Sommersemester
MehrEinführung in die Computerlinguistik Einführung in Python (1)
Einführung in die Computerlinguistik Einführung in Python (1) Dozentin: Wiebke Petersen 10. Foliensatz Wiebke Petersen Einführung CL 1 Compiler Ein Compiler (auch Übersetzer oder Kompilierer genannt) ist
MehrCompiler. Kapitel. Syntaktische Analyse. Kapitel 4. Folie: 1. Syntaktische Analyse. Autor: Aho et al.
Folie: 1 Kapitel 4 Übersicht Übersicht Syntax: Definition 4 syn-tax: the way in which words are put together to form phrases, clauses, or sentences. Webster's Dictionary Die Syntax (griechisch σύνταξις
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
MehrStruktur und Implementierung von Programmiersprachen I. (Compilerbau) SS 2006
Struktur und Implementierung von Programmiersprachen I (Compilerbau) SS 2006 http://infosun.fmi.uni-passau.de /cl/passau/sips2006/index.html Vorlesung und Übung: Dr. Christoph Herrmann 1/1 Einordnung im
MehrKapitel 1. Programmierkurs. 1.2 Allgemeiner Aufbau des Computers. 1.1 Hallo, Computer...?
Kapitel 1 Programmierkurs Birgit Engels, Anna Schulze ZAIK Universität zu Köln Einführung Hallo, Computer...? Aufbau eines Computers Was ist eine Programmiersprache? Der Programmierprozess Warum Java?
MehrGrundbegriffe der Informatik
Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen
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
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
MehrEinführung in die Systemprogrammierung
Einführung in die Systemprogrammierung Sprachen und Übersetzer Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 4. Juni 2015 Sprachen vs. Übersetzer Sprache C11 Übersetzer GNU C
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
Mehr2. Kapitel LEXIKALISCHE ANALYSE. Compilerbau Prof. Dr. Wolfgang Schramm
2. Kapitel LEXIKALISCHE ANALYSE Compilerbau Prof. Dr. Wolfgang Schramm Lexikalische Analyse (Scanner) 1/2 1 Aufgabe Erkennen von lexikalischen Elementen. Erstellung einer internen Darstellung für lexikalische
Mehr1 ÜBERSETZER. Compilerbau 1
1 ÜBERSETZER 1 A.V.Aho, J.D.Ullmann: Principles of Compiler Design, Addison Wesley (1977) J.Amsterdam: Building a computer in Software, BYTE (Okt. 1985) Programming Project: A SIMPL Compiler, BYTE (Dez.
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die
MehrTheoretische Informatik I
Theoretische Informatik I Einheit 2.4 Grammatiken 1. Arbeitsweise 2. Klassifizierung 3. Beziehung zu Automaten Beschreibungsformen für Sprachen Mathematische Mengennotation Prädikate beschreiben Eigenschaften
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)
Mehr09.10.2015. 02.10.2015 + 07.10.2015 Seite 1. 02.10.2015 + 07.10.2015 Seite 2
02.10.2015 + 07.10.2015 Seite 1 02.10.2015 + 07.10.2015 Seite 2 1 Anzahl der Klassenarbeiten: Mindestens zwei Klassenarbeiten pro Halbjahr (= 4 KA pro Jahr) Im ersten Ausbildungsjahr gibt es jedoch kein
Mehr4 Ausklang. ALP 2, Hannes Federrath, Sommersemester 2001
ALP 2, Hannes Federrath, Sommersemester 2001 4 Ausklang Inhalt des Kapitels im Überblick: In diesem Kapitel sollen zum Ausklang der Vorlesung folgende Schwerpunkte behandelt werden: Software-Entwicklungsprozess
MehrPrinzipien der Softwareentwicklung S. Strahringer
Gliederung 1 Einführung Was ist ein Programm? Vorteile (und Nachteile) von PHP Erste PHP-Programme Ausführung von PHP-Programmen 2 Grundbegriffe der Programmierung Anweisungen, Variablen, Datentypen und
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.,...)
MehrÄquivalente Grammatiken / attributierte Grammatik
Äquivalente Grammatiken / attributierte Grammatik Linksfaktorisierung Elimination von Linksrekursion Umwandlung von EBNF in BNF Attributierte Grammatik Semantikfunktionen und Übersetzungsschema Synthetisierte,
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.
MehrCompiler und Codegenerierung. Hw-Sw-Co-Design
Compiler und Codegenerierung Hw-Sw-Co-Design Wo sind wir? System Verhalten Modul Architektur Block SW HW Logik Struktur Compiler und Codegenerierung Compiler - Aufbau Codegenerierung Codeoptimierung Codegenerierung
MehrJAVA als erste Programmiersprache Semesterkurs
JAVA als erste Programmiersprache Semesterkurs 0 - Einstieg WS 2012 / 2013 Prof. Dr. Bodo Kraft Prof. Dr. Bodo Kraft FH Aachen University of Applied Sciences Fachbereich Medizintechnik und Technomathematik
MehrMotivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.
Kontextfreie Kontextfreie Motivation Formale rundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen Bisher hatten wir Automaten, die Wörter akzeptieren Frank Heitmann heitmann@informatik.uni-hamburg.de
MehrCompiler. Die unsichtbaren Diener Der Compiler und seine Artgenossen. Laszlo Böszörmenyi Compiler 1/ 22
Compiler Die unsichtbaren Diener Der Compiler und seine Artgenossen Laszlo Böszörmenyi Compiler 1/ 22 Wozu Compiler? Eine der ältesten und grundlegendsten Technologien Compilertechnologie hat viele Anwendungsgebiete
MehrFormale Sprachen und Grammatiken
Formale Sprachen und Grammatiken Jede Sprache besitzt die Aspekte Semantik (Bedeutung) und Syntax (formaler Aufbau). Die zulässige und korrekte Form der Wörter und Sätze einer Sprache wird durch die Syntax
MehrSprachen/Grammatiken eine Wiederholung
Sprachen/Grammatiken eine Wiederholung Was sind reguläre Sprachen? Eigenschaften regulärer Sprachen Sprachen Begriffe Symbol: unzerlegbare Grundzeichen Alphabet: endliche Menge von Symbolen Zeichenreihe:
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
MehrGrammatiken. Einführung
Einführung Beispiel: Die arithmetischen Ausdrücke über der Variablen a und den Operationen + und können wie folgt definiert werden: a, a + a und a a sind arithmetische Ausdrücke Wenn A und B arithmetische
MehrGrundlagen von Python
Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren
MehrMathematische Grundlagen der Informatik 2
Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Emanuel Duss emanuel.duss@gmail.com 12. April 2013 1 Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Dieses Dokument basiert
MehrPragmatik von Programmiersprachen
Pragmatik von Programmiersprachen Im Kontext der Notation von Quelltexten Mike Becker, 11. Dezember 2014 Szenario: IT Dienstleister Unternehmen: Produkte: Kunden: IT Dienstleistung Beratung und Software
MehrEinführung in den Compilerbau
Einführung in den Compilerbau Überblick und Einleitung Dr. Armin Wolf 1. Vorlesung SoSe 2010, Universität Potsdam 1 Organisatorisches Ablage von Unterlagen (Folien,Literatur etc.) unter der URL http://www.constraint-programming.de/compilerbaupotsdamsose2010/
MehrSprachbeschreibung und Erweiterung
Sprachbeschreibung und Erweiterung Worte, Sprachen, reguläre Ausdrücke, Automaten, BNF, Grammatik, Syntax- Diagramme, Spracherweiterungen do, for, break, switch Formale Beschreibung von Programmiersprachen
MehrGrafische Interaktionssysteme/ dynamische Visualisierung des endlichen Automaten
Sprachliche Informationsverarbeitung 29.01.2007 HS Intelligente Systeme Prof. Dr. J. Rolshoven (WS 06/07) Grafische Interaktionssysteme/ dynamische Visualisierung des endlichen Automaten Referentin: Melinda
MehrL4. Erster Schritt zum Programmieren
L4. Erster Schritt zum Programmieren 1 Programmierung in Hoch Beispielprogramme in FORTRAN, PASCAL und C Die Programmiersprache C Erstellung und Übersetzung eines C-Programms Das Programm Hello World Eingabe
MehrPraktikum Compilerbau
Implementation eines s 20. April 2005 Vorlesungen Vorlesungen, die nützliche für das Praktikum liefern: Automaten, Formale Sprachen und Berechenbarkeit bau Abstrakte Maschinen Programm-Optimierung Fertigkeiten
MehrAusarbeitung des Interpreter Referats
Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache
MehrDSLs mit Xtext entwerfen. 17.08.2012, A. Arnold
DSLs mit Xtext entwerfen 17.08.2012, A. Arnold Copyright 2012 anderscore GmbH Inhalt 1. Was sind DSLs? 2. Xtext Konzepte 3. Einführung ins Sprachdesign 4. Hands On! 3 4 8 20 2 Was sind DSLs? Domain Specific
MehrGrundbegriffe der Informatik
Grundbegriffe der Informatik Tutorium 27 29..24 FAKULTÄT FÜR INFORMATIK KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Definition
MehrÜbungsblatt 3: Algorithmen in Java & Grammatiken
Humboldt-Universität zu Berlin Grundlagen der Programmierung (Vorlesung von Prof. Bothe) Institut für Informatik WS 15/16 Übungsblatt 3: Algorithmen in Java & Grammatiken Abgabe: bis 9:00 Uhr am 30.11.2015
MehrGrundbegriffe der Informatik
Grundbegriffe der Informatik Tutorium 4 26..25 INSTITUT FÜR THEORETISCHE INFORMATIK KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
MehrReguläre Ausdrücke. Prof.Dr.Christian Wagenknecht mit Beiträgen von Herrn Dr.Michael Hielscher
Reguläre Ausdrücke Prof.Dr.Christian Wagenknecht mit Beiträgen von Herrn Dr.Michael Hielscher Prof.Dr.Chr. Wagenknecht Formale Sprachen und Automaten 1/44 Definition reguläre Ausdrücke für reguläre Sprachen
Mehr2 Der Schnelleinstieg *
7 2 Der Schnelleinstieg * Eine Programmiersprache können Sie auf verschiedene Art und Weise lernen. Sie können sich zuerst mit den Konzepten befassen und anschließend mit der Praxis oder umgekehrt. Damit
MehrProgrammierkurs Python I
Programmierkurs Python I Michaela Regneri 2009-10-30 (Folien basieren auf dem gemeinsamen Kurs mit Stefan Thater, der für diese Vorlesung auf Alexander Kollers Java-Kurs basierte) Organisatorisches Wöchentliche
MehrAdressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung
Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 sabel@ki.informatik.uni-frankfurt.de
MehrGrundlagen der Informatik II. Teil I: Formale Modelle der Informatik
Grundlagen der Informatik II Teil I: Formale Modelle der Informatik 1 Einführung GdInfoII 1-2 Ziele/Fragestellungen der Theoretischen Informatik 1. Einführung abstrakter Modelle für informationsverarbeitende
MehrEinleitung und Begriffliches. Einleitung. Programmiersprachen. Software-Komplexität ist inhärent und hat vor allem folgende Ursachen
Einleitung Einleitung und Begriffliches Software-Komplexität ist inhärent und hat vor allem folgende Ursachen Komplexität des gegebenen Problems Schwierigkeiten beim Management des Entwicklungsprozesses
MehrEinführung in PROLOG. Christian Stocker
Einführung in PROLOG Christian Stocker Inhalt Was ist PROLOG? Der PROLOG- Interpreter Welcher Interpreter? SWI-Prolog Syntax Einführung Fakten, Regeln, Anfragen Operatoren Rekursion Listen Cut Funktionsweise
MehrBeispiel einer Übersetzung
Beispiel einer Übersetzung Ausdruck in C aktuelle_zeit = Startzeit + vergangene_minuten*60 + vergangene_sekunden; Ausdruck im Instruktionssatz des R10000 LW r1,minuten LW r1,sekunden ADDI r2,r0,60 ADD
Mehrden Einsatz von generierenden Werkzeugen und Theorien und von Software-Engineering-Methoden
U- Übersetzer Vorlesung WS /8 Uwe Kastens Ziele: grundlegende Verfahren der Sprachimplementierung erlernen den Einsatz von generierenden Werkzeugen und von Standardverfahren kennen und schätzen lernen
MehrPraktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization
Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10 Übersicht In den ersten Wochen: Einführung in objektorientierte Programmierung mit C++ Anschließend: Einführung in die programmierbare
MehrKapitel 2. Lexikalische Analyse. Lexikalische Analyse Wintersemester 2008/09 1 / 39
Kapitel 2 Lexikalische Analyse Lexikalische Analyse Wintersemester 2008/09 1 / 39 1 Eingliederung in den Übersetzer / Zielvorgaben 2 Theoretische Grundlage: Endliche Automaten 3 Implementierung Implementierung
Mehr2 Grundlagen der Programmierung
2 Grundlagen der Programmierung In diesem Kapitel bereiten wir die Grundlagen für ein systematisches Programmieren. Wichtigstes Ziel ist dabei die Herausarbeitung der fundamentalen Konzepte von Programmiersprache.
MehrJava Einführung Programmcode
Java Einführung Programmcode Inhalt dieser Einheit Programmelemente Der erste Programmcode Die Entwicklungsumgebung: Sun's Java Software Development Kit (SDK) Vom Code zum Ausführen des Programms 2 Wiederholung:
MehrErzeugung von Übersetzern formaler Sprachen anhand der Grammatik. Jede Grammatik hat zwei Typen von Zeichen
Grammatiken Erzeugung von Übersetzern formaler Sprachen anhand der Grammatik Terminals / Nonterminals Jede Grammatik hat zwei Typen von Zeichen Terminals (Symbole, Token) die Grundsymbole der Sprache z.b.
MehrCompilerbau I Sommersemester 2008
Fachbereich 12 Informatik und Elektrotechnik Programmiersprachen Kurt Sieber Benedikt Meurer Compilerbau I Sommersemester 2008 Übungsblatt 1 Aufgabe 1 Der erweiterte reguläre Ausdruck α{m, n erkennt zwischen
MehrSyntax (= Satzgefüge), vgl. auch Grammatik
1 Natürliche Sprachen Natürliche Sprachen bezeichnen wie das Wort "Sprache" ausdrückt zunächst das Gesprochene. Das Schweizerdeutsch etwa ist eine typische natürliche Sprache. Mit der Erfindung der Aufzeichnung
MehrTheoretische Informatik I
Theoretische nformatik inheit 3 Kontextfreie Sprachen 1. Kontextfreie Grammatiken 2. Pushdown Automaten 3. igenschaften kontextfreier Sprachen Theoretische nformatik inheit 3.1 Kontextfreie Grammatiken
MehrNino Simunic M.A. Computerlinguistik, Campus DU
Vorlesung 2. Sitzung Grundlegende Programmiertechniken Wintersemester 2007/2008 Dozent Nino Simunic M.A. Computerlinguistik, Campus DU Grundlegende Programmiertechniken, WS 2007/2008 Programm, Algorithmus
MehrKapitel 1. Grundlagen
Grundlagen Dieses Kapitel beschreibt die nötigen Schritte zur Erstellung eines lauffähigen C- Programms. Diese Schritte können Sie auf Ihrem System anhand von einführenden Beispielen nachvollziehen. Die
MehrEinführung in Betriebssysteme
Einführung in Betriebssysteme APPLE ios Entwicklung von ios Entwickelt auf der Basis von MacOS X UNIX Vorgestellt am 9.1.2007 Zusammen mit iphone Markenname von Cisco Internetwork Operating System Für
MehrFormale Sprachen. Anwendungen formaler Sprachen Adressen, Kaffeeautomaten, Programmiersprachen. Rudolf Freund, Marian Kogler
Formale Sprachen Anwendungen formaler Sprachen Adressen, Kaffeeautomaten, Programmiersprachen Rudolf Freund, Marian Kogler (http://xkcd.com/208) Gültige Adressen: Favoritenstraße 9, 1040 Wien Reumannplatz
MehrVorlesung C-Kurs 9:15-10:45 Mathe 11:15-12:45 1. Woche Hörsaal 1 2. Woche Hörsaal 7
Vorlesung C-Kurs 9:15-10:45 Mathe 11:15-12:45 1. Woche Hörsaal 1 2. Woche Hörsaal 7 Seminare / Praktikum M1/C1 : Mathe 13:15-14:45, C-Kurs 15:15-16:45h M2/C2 : C-Kurs 13:15-14:45, Mathe 15:15-16:45h M*
MehrEinführung in die Programmierung mit Java
Einführung in die Programmierung mit Martin Wirsing 2 Ziele Begriffsbildungen: Informatik, Algorithmus, Programm... Warum als Programmiersprache verwenden? Ein einfaches -Programm erstellen, übersetzen
MehrEs gibt zwei verschiedene Arten, wie Programme auf dem Rechner ausgeführt werden:
3 Grundlagen 3.1 Starten eines C++ Programms Es gibt zwei verschiedene Arten, wie Programme auf dem Rechner ausgeführt werden: 1. Programme, die vom Interpreter der Programmiersprache Zeile für Zeile interpretiert
MehrIT-Basics 2. DI Gerhard Fließ
IT-Basics 2 DI Gerhard Fließ Wer bin ich? DI Gerhard Fließ Telematik Studium an der TU Graz Softwareentwickler XiTrust www.xitrust.com www.tugraz.at Worum geht es? Objektorientierte Programmierung Konzepte
MehrNotation um Grammatik G hervorzuheben: Eine kontextfreie Grammatik erzeugt eine kontextfreie Sprache. Informatik I -1- WS 2005/2006
Die Sprache einer Grammatik Definition: Sei G = (V, T, P, S) eine kontextfreie Grammatik. Dann umfasst die Sprache L(G) alle Zeichenketten aus Terminalsymbolen, die sich vom Startsymbol ableiten lassen.
MehrSkripte. Beispiel. http://www.icp.uni-stuttgart.de. M. Fyta Computergrundlagen 73/93
Skripte Wie kann ich mir komplexe Befehle merken? Gar nicht aber der Computer kann es für mich! Einfach die Befehle in eine Textdatei schreiben und ausführbar machen #! (Shebang) in der ersten Zeile bestimmt
MehrEinfache Rechenstrukturen und Kontrollfluss II
Einfache Rechenstrukturen und Kontrollfluss II Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer http://www.pst.informatik.uni-muenchen.de/lehre/ss06/infoii/ SS 06 Ziele Lernen imperative
MehrAKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen
L AKTUEL ZU fritz JOBST JAVA 8 PROGRAMMIEREN IN JAVA 7. Auflage Im Internet: Alle Beispielprogramme und Lösungen 4 1 Der Einstieg in Java keinem Fall zulässig. Die Schreibweisen Hello.java für den Namen
MehrHandout zur Vorlesung DBSP PHP I Unit 4 DBSP. Unit PHP I. Programmierparadigma Grundlegende Elemente eines PHP Programms (I)
Handout zur Vorlesung Vorlesung DBSP Unit PHP I Programmierparadigma Grundlegende Elemente eines PHP Programms (I) 1 Prof. Dr. rer. nat. Nane Kratzke Praktische Informatik und betriebliche Informationssysteme
MehrVorlesung Informatik II
Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 02. JAVA: Erstes Programm 1 Das erste Java-Programm
Mehr4. 4. Algorithmen und Datenstrukturen in deskriptiven Programmiersprachen
Kapitel Kapitel 4 Deskriptive Programmierung SS 2008 4. 4. Algorithmen und Datenstrukturen in in deskriptiven Programmiersprachen Deskriptive Programmierung 1 Sprachverarbeitung in in Prolog Prolog Prolog
MehrZ 50. Z O Z Int Z Komma Z Real Ziffer Komma Ziffer
10 Endliche Automaten 10.1 Einführungsbeispiele Beispiel 1: Warenautomat Ein Flasche Cola kostet 1,50. Münzen zu 1 und 50 ct werden angenommen. Cola und evtl. Restgeld werden ausgegeben. Auch der Rückgabeknopf
MehrBetriebssysteme Teil 4: Übersetzung von C-Programmen
Betriebssysteme Teil 4: Übersetzung von C-Programmen 18.10.13 1 Übersicht Übersetzungsprozess gcc(i) als Steuerprogramm Assembler Binder Hauptprogramme in C In dieser Einheit werden nur die Grundprinzipien
MehrEin erstes Java-Programm
Ein erstes Java-Programm public class Rechnung { public static void main (String [] arguments) { int x, y; x = 10; y = -1 + 23 * 33 + 3 * 7 * (5 + 6); System.out.print ("Das Resultat ist "); System.out.println
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
MehrEinführung in die Programmierung mit Java
Einführung in die Programmierung mit Java Martin Wirsing 2 Ziele Begriffsbildungen: Informatik, Algorithmus, Programm... Warum Java als Programmiersprache verwenden? Ein einfaches Java-Programm erstellen,
MehrBrainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen
Brainfuck 1 Brainfuck 1.1 Brainfuck Geschichte und Umfeld Brainfuck ist eine sogenannte esoterische Programmiersprache. Sie wurde 1993 vom Schweizer Urban Müller entworfen mit dem Ziel, eine Sprache mit
MehrZusammenfassung. 1 Wir betrachten die folgende Signatur F = {+,,, 0, 1} sodass. 3 Wir betrachten die Gleichungen E. 4 Dann gilt E 1 + x 1
Zusammenfassung Zusammenfassung der letzten LV Einführung in die Theoretische Informatik Woche 7 Harald Zankl Institut für Informatik @ UIBK Wintersemester 2014/2015 1 Wir betrachten die folgende Signatur
MehrTheoretische Grundlagen der Informatik
Theoretische Grundlagen der Informatik Vorlesung am 12.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik
MehrEntwurf von Algorithmen - Kontrollstrukturen
Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer
Mehr