Grammatik, Bezeichner, Datentypen, Entwicklungszyklus

Ähnliche Dokumente
Grammatik, Bezeichner, Datentypen, Entwicklungszyklus

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Wo sind wir? Übersicht lexikale Struktur von Java

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

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

3. Java - Sprachkonstrukte I

Grundlagen der Modellierung und Programmierung, Übung

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

3. Java - Sprachkonstrukte I

Java Lexikalische Struktur

3. Java - Sprachkonstrukte I

Elementare Datentypen

Einführung in die Programmierung am Beispiel von Java

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Elementare Konzepte von

Java-Schulung Grundlagen

5 Grundlagen der Java-Syntax

Programmieren und Problemlösen Java-Sprachkonstrukte. Java-Sprachkonstrukte. Übung Altersberechner. Namen und Bezeichner. Namen und Bezeichner

Programmierung. Grundlagen. Tina Wegener, Ralph Steyer. 2. Ausgabe, 1. Aktualisierung, April 2014

Java I Vorlesung Imperatives Programmieren

Java - Programmierung - Prozedurale Programmierung 1

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Einführung in die Informatik

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

Informatik Vorkurs - Vorlesung 2

Grundsymbole. Kapitel 2: Einfache Programme. Liste aller Java-Schlüsselwörter. Schlüsselwörter und Struktursymbole. Lexikalische Einheiten

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

2 Imperative Sprachkonzepte

Grundelemente von C++

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

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

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

MiniJava-Sprachbericht Version 3.1

Vorkurs Informatik WiSe 16/17

Java-Applikationen (Java-Programme)

Einstieg in die Informatik mit Java

Übersicht. Vorstellung des OO-Paradigmas

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Einstieg in die Informatik mit Java

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

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Einstieg in die Informatik mit Java

Softwareentwicklung Java allgemein, Kommentare, Datentypen, Variablen, Konstanten

Vorkurs Informatik WiSe 17/18

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Werkzeuge zur Programmentwicklung

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

Einführung in die Programmierung Wintersemester 2008/09

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Java für Anfänger Teil 5: Basistypen 2. Programmierkurs Manfred Jackel

Wiederholung, Abbruch von Schleifen, switch-anweisung Datentypen, char, formatierte Ausgabe

Java Anweisungen und Ablaufsteuerung

2 Programmieren in Java I noch ohne Nachbearbeitung

Ein erstes Java-Programm

Grundlagen der Informatik 2. Typen

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Java Datentypen und Variablen

Einfache Datentypen in JAVA

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Primitive Datentypen

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

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Tagesprogramm

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Empfehlenswerte Literatur

2.5 Primitive Datentypen

Welche Informatik-Kenntnisse bringen Sie mit?

Primitive Datentypen. Dr. Wolfgang Süß Thorsten Schlachter

5.1 Basistypen. Wie viele Werte kann man mit n Bit darstellen? 30. Jan Felix Brandt, Harald Räcke 70/596

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Martin Unold INFORMATIK. Geoinformatik und Vermessung

2.2 Syntax, Semantik und Simulation

Programmierkurs C++ Variablen und Datentypen

Einstieg in die Informatik mit Java

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Java für Anfänger Teil 4: Anweisungen. Programmierkurs Manfred Jackel

1. Der Einstieg in Java. Was heißt Programmieren?

Basiswissen in Informatik

Java Spickzettel von Panjutorials.de

Kapitel 2: Grundelemente der Programmierung

JAVA 06: Gemischte einfache Fragen zu Java

Fortgeschrittene Programmierungsmethoden

Einstieg in die Informatik mit Java

Vorlesung Programmieren

Formale Sprachen. Inhaltsverzeichnis. M. Jakob. 10. Dezember Allgemeine Einführung. Aufbau formaler Sprachen

Welcome to java. einfach objektorientiert verteilt interpretierend robust secure architekturneutral portabel schnell parallel(multitheded)

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben

Programmiervorkurs Einführung in Java Tag 1

Einstieg in die Informatik mit Java

Transkript:

Grammatik, Bezeichner, Datentypen, Entwicklungszyklus Thomas Röfer Syntax/Semantik Chomsky-Grammatiken (Erweiterte) Backus-Naur-Form Bezeichner Datentypen, Literale Entwicklungszyklus

Rückblick Algorithmen und algorithmische Sprachkonstrukte Algorithmus Spezifikation Durchführbarkeit Korrektheit Algorithmenentwurf Sprachkonstrukte Datenspeicher/Zuweisungen Ausdrücke Sequenzierungsanweisungen Hilfskonstrukte Verzweigungen Schleifen/Iteration Rekursion f(n) f(n-1) f(n-2) PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 2

Syntax und Semantik Syntax Korrekte Art und Weise, sprachliche Elemente zusammenzuführen und zu Sätzen zuzuordnen Ist durch formale Grammatik eindeutig beschrieben Lexikalische Analyse: Zerlegung in Tokens Tokens: Bezeichner, Literale, Schlüsselwörter, Operatoren Semantik legt die Bedeutung der Sprachkonstrukte fest Formale Beschreibung der Semantik sehr aufwendig (aber möglich) daher oft informelle Beschreibung der Semantik PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 3

Chomsky-Grammatiken Begriffe Produktionen Satz Subjekt Prädikat Subjekt Artikel Substantiv Subjekt Substantiv Prädikat Verbum Artikel Ein Substantiv Fisch Substantiv Fische Verbum schwimmt Verbum schwimmen Vokabular (Nichtterminale + Terminale) Startsymbol/Ziel Sprachschatz (alle möglichen terminalen Zeichenreihen ohne Grammatik) Satzform/Phrase PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 4

Chomsky-Grammatiken (2) Struktur Ein Fisch schwimmt schwach äquivalent: Ein Fisch schwimmt strukturäquivalent: Ein Fisch schwimmt Parsen Ist eine Zeichenreihe eine Phrase? Zerteilung (parsing) Umkehr des Ableitungssystem Reduktions-/Zerteilungssystem Chomsky-Grammatik Ein Grammatik aus Terminalen, Nichtterminalen, Produktionen und einem Ziel PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 5

Backus-Naur-Form BNF Ausdruck = Ausdruck ' ' Ausdruck Ausdruck ' ' Ausdruck '(' Ausdruck ')' Bezeichner Bezeichner = 'a' 'b' 'z' Zerlegung 1 Ausdruck = (a b) c d Ausdruck = (a b) c Ausdruck = d Ausdruck = (a b) Ausdruck = c Bezeichner = d Ausdruck= a b Bezeichner = c Ausdruck = a Ausdruck = b Bezeichner = a Bezeichner = b PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 6

Backus-Naur-Form BNF Ausdruck = Ausdruck ' ' Ausdruck Ausdruck ' ' Ausdruck '(' Ausdruck ')' Bezeichner Bezeichner = 'a' 'b' 'z' Zerlegung 2 Ausdruck = (a b) c d Ausdruck = (a b) Ausdruck = c d Ausdruck = a b Ausdruck = c Ausdruck = d Ausdruck = a Ausdruck = b Bezeichner = c Bezeichner = d Bezeichner = a Bezeichner = b PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 7

Erweiterte Backus-Naur-Form Bedeutung [ ] ( ) { } EBNF in EBNF bezeichnet einen optionalen Teil auf der rechten Seite umschließt eine Gruppe von Zeichen Inhalt der Klammer wird beliebig oft wiederholt (auch 0-mal) trennt Alternativen Produktion = Bezeichner '=' Ausdruck Ausdruck = Term { ' ' Term } Term = Faktor { Faktor } Faktor = Bezeichner '\'' Literal '\'' '(' Ausdruck ')' '[' Ausdruck ']' '{' Ausdruck '}' PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 8

Zerlegung mit EBNF EBNF Ausdruck = Term { ' ' Term } Term = Faktor { ' ' Faktor } Faktor = '(' Ausdruck ')' Bezeichner Bezeichner = 'a' 'b' 'z' Zerlegung Kantorowitsch-Baum Ausdruck = (a b) c d Term = (a b) c Term = d Faktor = (a b) Faktor = c Faktor = d Ausdruck = a b Bezeichner = c Bezeichner = d Term = a Term = b Faktor = a Faktor = b Bezeichner = a Bezeichner = b PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 9

Bezeichner Schreibung Erstes Zeichen muss ein Buchstabe, '_' oder '$' sein Alle weiteren Zeichen können Buchstaben, Ziffern, '_' oder '$' sein Groß- und Kleinschreibung wird unterschieden EBNF Identifier = FirstChar { FurtherChar } FirstChar = '_' '$' 'A' 'B' 'Z' 'a' 'b' 'z' FurtherChar = FirstChar '0' '1' '9' Schlüsselwörtern (Nicht für Bezeichner verwenden) abstract continue goto package this assert default if private throw boolean do implements protected throws break double import public transient byte else instanceof return try case extends int short void catch final interface static volatile char finally long super while class float native switch const for new synchronized PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 10

Konventionen für Bezeichner Variablen Variablen beginnen mit Kleinbuchstaben: Mehrere Worte werden durch Großbuchstaben aneinander gefügt: '_' und '$' werden nicht verwendet Für Laufvariablen in Schleifen: Konstanten Nur Großbuchstaben, Ziffern und '_' Klassen Genau wie Variablen, beginnen aber mit einem Großbuchstaben stream, name thisisaverylongname i, j, k, MAX_WORDS, Math.PI System, Factorial PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 11

Elementare Datentypen in Java Datentyp Default Speicherplatz Wertebereich byte 0 1 Byte (8 Bits) -128 bis 127 short 0 2 Bytes (16 Bits) -32768 bis 32767 int 0 4 Bytes (32 Bits) -2147483648 bis 2147483647 long 0 8 Bytes (64 Bits) -9223372036854775808 bis 9223372036854775807 float 0.0 4 Bytes (32 Bits) ±1.40239846E-45 bis ±3.40282347E+38 double 0.0 8 Bytes (64 Bits) ±4.94065645841246544E-324 bis ±1.79769313486231570E+308 boolean false? (min. 1 Bit) false, true char '\u0000' 2 Bytes (16 Bits) '\u0000' bis '\uffff' PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 12

Ganzzahlige Datentypen Zahlensysteme Dezimal, es gibt die Ziffern 0 bis 9 4 2 = 4*10+2 4*10+2 Binär, nur die Ziffern 0 und 1 1 1 0 0 1 0 1 0 = 32+8+2 Oktal, nur die Ziffern 0 bis 7 5 2 = 5*8+2 5*8+2 Hexadezimal, die Ziffern 0 bis 9 und A bis F 2 A = 2*16+10 Literale Dezimal: 42, +42, -42, 42L, 42l Oktal: 052, +052, -052, 052L, 052l Hexadezimal: 0x2A, +0x2a, -0x2A, 0x2aL, 0x2Al Ein Ein L am am Ende Ende bedeutet long long PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 13

Fließkommazahlen Format Mantisse Exponent 4 4 Wert = Mantisse 10 Exponent Literale - - 2.. 1 4 Float: 0.0f,.382f, 3.1415F, -3.1415f, 17E7f, 17e-7f, 17E+7F Double: 0.0,.0392039029303, -3.141592653589d, 1E+100 1 1 5 5 E + 1 7 Ein Ein F am am Ende Ende bedeutet float, float, ein ein D double. double. Wird Wird nichts nichts angegeben, ist ist der der Typ Typ double an- double PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 14

Zeichen Literale Normal: 'a', 'b', 'c' Wagenrücklauf: '\r' Zeilenvorschub: '\n' Seitenvorschub: '\f' Tabulatorsprung: '\t' Backspace: '\b' Hochkomma: '\'' Backslash: '\\' Unicode Zeichen: '\u12ab' \\ = Escape-Zeichen f\u006fr(int f\u006fr(int i i = 0; 0; i i < 10; 10; ++i) ++i) = for(int for(inti i = 0; 0; i i < 10; 10; ++i) ++i) Java-Quelltexte werden werden im im Unicode verarbeitet. An An jeder jeder Stelle Stelle kann kann \uxxxx stehen. stehen. PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 15

Zeichenketten String ist eine Klasse, kein Basistyp Daher kann man Ausdrücke schreiben, wie z.b. s.equals("hallo") Literale "Hallo", "wie geht's?" "Ich sage \"mir geht's gut\"" Ich sage "Mir geht's gut" Beispiele System.out.println("\"DM\"\t\"Euro\"\n1\t0,51"); "DM" "Euro" 1 0,51 In In String-Literalen können können alle alle Escape-Sequenzen aus aus char-literalen verwendet werden werden PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 16

Typkonvertierung Automatisch byte short int long float double char Manuell byte b; short s; int i; long l; float f = 1.5; double d = -1.5; char c; b = (byte) f; (b == 1) f = (float) 178.2 l = (int) d; (l == -2) Bei Bei der der Typumwandlung von von double/float in in einen c = (char) 32 einen Ganzzahltyp wird wird immer immer abgerundet Durch Funktionen String s = Integer.toString(i); i = Integer.parseInt(s); d = Double.parseDouble(s); PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 17

Wrapper-Klassen Datentyp byte byte short short int int long long float float double double boolean char char Wrapper Byte Byte Short Short Integer Integer Long Long Float Float Double Double Boolean Character Generell Wrapper.MAX_VALUE z.b. z.b. Byte.MAX_VALUE Byte.MAX_VALUE Wrapper.MIN_VALUE Wrapper.parseWrap(String s) s) z.b. z.b. Integer.parseInt("1234"); Wrapper.toString(type t) t) z.b. z.b. Integer.toString(1234); Float und und Double Wrapper.NEGATIVE_INFINITY z.b. z.b. Double.NEGATIVE_INFINITY Wrapper.POSITIVE_INFINITY Wrapper.NaN PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 18

Nachschlagen in der Dokumentation PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 19

Vom Quelltext zur Ausführung Compiler PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 20

Der Entwicklungszyklus Kompilierungsfehler Editieren edit editxyz.java Kompilieren javac javacxyz.java Laufzeitfehler Ausführen (Testen) java javaxyz PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 21

Fehler beim Programmieren Tippfehler (auch Copy and Paste) Semikolon vergessen, Klammern passen nicht... Können vom Compiler entdeckt werden, müssen aber nicht Strukturfehler Compiler verwendet andere Zuordnung als man denkt Typfehler Werden bei Zuweisungen erkannt Bleiben in Ausdrücken teilweise unerkannt Fehler im Algorithmus Kommt bei Informatikern nicht vor ;-) for(int for(inti i = 0; 0; i i < 10; 10; ++i) ++i) for(int for(intj j = 0; 0; j j < 10; 10; ++i) ++i) System.out.println(i+j); if(a if(a == == 1) 1) if(b if(b == == 1) 1) System.out.println("ok"); else else System.out.println("a System.out.println("a!=!= 1"); 1"); int inti i = "1"; "1"; float float f f = 3 // 2; 2; PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 22

Fehlerbehebung Kompilierungsfehler Nur den ersten Fehler beachten, die anderen könnten Folgefehler sein! Fehlermeldung lesen, Quelltext bei der angegebenen Zeilennummer ansehen Dokumentation zu Fehlermeldung und falschem Konstrukt lesen Fehler während der Programmausführung Falls eine Fehlermeldung angezeigt wird, diese lesen und den Quelltext bei der angegebenen Zeilennummer ansehen Testausgaben einbauen oder Debugger verwenden Aber keine Fehler durch solche Testausgaben einbauen! Verschiedene Testfälle durchspielen: Wann tritt der Fehler auf, wann nicht? Nur Nur ein ein verstandener Fehler Fehler ist ist ein ein beseitigter Fehler! Nach Nach Änderung des des Programms kompilieren nicht nicht vergessen! PI-1: Grammatik, Bezeichner, Datentypen, Entwicklungszyklus 23