3.4 Struktur von Programmen

Ähnliche Dokumente
3 Syntax von Programmiersprachen

1 Syntax von Programmiersprachen

4 Kontrollfluss-Diagramme

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl

2.1 Grundlagen: Kontextfreie Grammatiken

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Java Einführung Operatoren Kapitel 2 und 3

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Programmieren I. Kapitel 5. Kontrollfluss

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

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

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

Vorlesung Programmieren

Kapitel 3: Variablen

Einstieg in die Informatik mit Java

Vorlesung Programmieren

Brückenkurs Programmieren

Operatoren (1) Operatoren (2)

Werkzeuge zur Programmentwicklung

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

JAVA-Datentypen und deren Wertebereich

1 Klassen anlegen und Objekte erzeugen

Java I Vorlesung Imperatives Programmieren

Sprachen sind durch folgenden Aufbau gekennzeichnet:

Syntax von Programmiersprachen

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

Unterlagen. CPP-Uebungen-08/

C-Programmierung: Ausdrücke und Operatoren#Division.2F

1 Klassen anlegen und Objekte erzeugen

Programmierkurs Python I

Dr. Monika Meiler. Inhalt

Einstieg in die Informatik mit Java

C- Kurs 03 Ausdrücke und Operatoren

Programmierkurs Java

Primitive Datentypen

Grundlagen der Informatik 4. Kontrollstrukturen I

Kapitel IV Formale Sprachen und Grammatiken

Modellierung und Programmierung 1

Kapitel 2. Methoden zur Beschreibung von Syntax

4. Zahlendarstellungen

Von der Chomsky-Hierarchie

Programmierpraktikum

Einführung Java Programmieren in Java Arrays Schleifen Fehler. Einführung in Java. Arne Hüffmeier. Michelle Liebers, Dennis Hoffmann

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

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Einführung in die Informatik. Programming Languages

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Lexikalische Programmanalyse der Scanner

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Programmierkurs I. Gliederung: Deklarationsteil als BNF 2. Blöcke in Ada95 (Lebenszeit, Sichtbarkeit von Variablen)

Programmieren I. Operatoren und Ausdrücke Heusch 6.2 Ratz Institut für Angewandte Informatik

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Der Grid-Occam-Compiler. Übersicht über die OCCAM-Sprachdefinition

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren

Einfache Rechenstrukturen und Kontrollfluß

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Beispiel: Start. Stop

Einführung in die Programmierung für NF. Algorithmen, Datentypen und Syntax

Einführung in die Informatik 1

7. Syntax: Grammatiken, EBNF

Elementare Konzepte von

Allgemeine Hinweise:

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

Einführung in die Informatik 1

Grundlagen der Programmierung - Datenstrukturen

Einstieg in die Informatik mit Java

Programmierkurs Python I

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

2. Programmierung in C

Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen

Kapitel 4: Elementare Konzepte von Programmiersprachen. Variablen Referenzen Zuweisungen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

Einführung in die Informatik. Programming Languages

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

3. Anweisungen und Kontrollstrukturen

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

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

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Berechenbarkeit und Komplexität Vorlesung 11

PIC16 Programmierung in HITECH-C

Einstieg in die Informatik mit Java

Einführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Datentypen: integer, char, string, boolean

Grundlagen der Informatik Ergänzungen WS 2007/2008 Prof. Dr. Rainer Lütticke

Transkript:

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* stmt* decl ::= type name (, name )* ; type ::= int Ein Programm besteht aus einer Folge von Deklarationen, gefolgt von einer Folge von Statements. Eine Deklaration gibt den Typ an, hier: int, gefolgt von einer Komma-separierten Liste von Variablen-Namen. 55

stmt ::= ; { stmt* } name = expr; name = read(); write( expr ); if ( cond ) stmt if ( cond ) stmt else stmt while ( cond ) stmt Ein Statement ist entweder leer (d.h. gleich ;) oder eine geklammerte Folge von Statements; oder eine Zuweisung, eine Lese- oder Schreib-Operation; eine (einseitige oder zweiseitige) bedingte Verzweigung; oder eine Schleife. 56

expr ::= number name ( expr ) up expr expr bip expr up ::= - bip ::= - + * / % Ein Ausdruck ist eine Konstante, eine Variable oder ein geklammerter Ausdruck oder ein unärer Operator, angewandt auf einen Ausdruck, oder ein binärer Operator, angewand auf zwei Argument-Ausdrücke. Einziger unärer Operator ist (bisher) die Negation. Mögliche binäre Operatoren sind Addition, Subtraktion, Multiplikation, (ganz-zahlige) Division und Modulo. 57

cond ::= true false ( cond ) expr comp expr bup cond cond bbip cond comp ::= ==!= <= < >= > bup ::=! bbip ::= && Bedingungen unterscheiden sich dadurch von Ausdrücken, dass ihr Wert nicht vom Typ int ist sondern true oder false (ein Wahrheitswert vom Typ boolean). Bedingungen sind darum Konstanten, Vergleiche oder logische Verknüpfungen anderer Bedingungen. 58

Puh!!! Geschafft... 59

Beispiel: int x; x = read(); if (x > 0) write(1); else write(0); Die hierarchische Untergliederung von Programm-Bestandteilen veranschaulichen wir durch Syntax-Bäume: 60

Syntax-Bäume für x > 0 sowie write(0); und write(1); cond stmt stmt expr expr expr expr name comp number number number x > 0 write ( 1 ) ; write ( 0 ) ; Blätter: innere Kten: Wörter/Tokens Namen von Programm-Bestandteilen 61

program stmt cond stmt stmt decl stmt expr expr expr expr type name name name comp number number number int x ; x = read ( ) ; if ( x > 0 ) write ( 1 ) ; else write ( 0 ) ; 62

Bemerkungen: Die vorgestellte Methode der Beschreibung von Syntax heißt EBNF-Notation (Extended Backus Naur Form Notation). Ein anderer Name dafür ist erweiterte kontextfreie Grammatik ( Linguistik, Automatentheorie). Linke Seiten von Regeln heißen auch Nicht-Terminale. Tokens heißen auch Terminale. 63

Noam Chomsky, MIT John Backus, IBM Turing Award (Erfinder von Fortran) Peter Naur, Turing Award (Erfinder von Algol60) 64

Achtung: Die regulären Ausdrücke auf den rechten Regelseiten können sowohl Terminale wie Nicht-Terminale enthalten. Deshalb sind kontextfreie Grammatiken mächtiger als reguläre Ausdrücke. Beispiel: L = {ǫ,ab,aabb,aaabbb,...} lässt sich mithilfe einer Grammatik beschreiben: A ::= ( a A b )? 65

Syntax-Baum für das Wort aaabbb : A A A A a a a b b b Für L gibt es aber keinen regulären Ausdruck!!! ( Automatentheorie) 66

4 Kontrollfluss-Diagramme In welcher Weise die Operationen eines Programms nacheinander ausgeführt werden, lässt sich anschaulich mithilfe von Kontrollfluss-Diagrammen darstellen. Ingredienzien: Start Stop Startkten Endkten 67

x = read(); write(y); x = x - y; Eingabe Ausgabe Zuweisung 68

x < y bedingte Verzweigung Kante Zusammenlauf 69

Beispiel: Start int x, y; x = read(); y = read(); while (x!= y) if (x < y) y = y - x; else x = x - y; write(x); write(x); Stop x = read(); y = read(); x!= y x=x y; x < y y=y x; 70

Die Ausführung des Programms entspricht einem Pfad durch das Kontrollfluss-Diagramm vom Startkten zum Endkten. Die Deklarationen von Variablen muss man sich am Startkten vorstellen. Die auf dem Pfad liegenden Kten (außer dem Start- und Endkten) sind die dabei auszuführenden Operationen bzw. auszuwertenden Bedingungen. Um den Nachfolger an einem Verzweigungskten zu bestimmen, muss die Bedingung für die aktuellen Werte der Variablen ausgewertet werden. == operationelle Semantik 71

Start x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 72

Start x == 18, y == 24 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 73

Start x == 18, y == 24 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 74

Start x == 18, y == 24 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 75

Start x == 18, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 76

Start x == 18, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 77

Start x == 12, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 78

Start x == 12, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 79

Start x == 6, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 80

Start x == 6, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 81

Start x == 6, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 82

Start x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 83

Achtung: Zu jedem MiniJava-Programm lässt sich ein Kontrollfluss-Diagramm konstruieren; die umgekehrte Richtung gilt zwar ebenfalls, liegt aber nicht so auf der Hand. 84

Beispiel: Start Stop 85

5 Mehr Java Um komfortabel programmieren zu können, brauchen wir mehr Datenstrukturen; mehr Kontrollstrukturen. 86