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. Zusammenstellung Lehre vom Satzbau (wie Wörter zu Phrasen (Teilsätzen) und Sätzen zusammengefügt werden Griechisch: gramma, das Geschriebene, Buchstabe Lateinisch: ars grammatica Kunst des Lesens und Schreibens Linguistisch: Grammatik, systematische Sprachbeschreibung Informatisch: Grammatik als formale Sprachbeschreibung, endliche Viele Regeln
Reservierte Worte in Java abstract do import public try boolean double instanceof return void break else int short volatile byte extends interface static while case final long super catch finally native switch char float new synchronized class for null this const goto package throw continue if private throws default implements protected transient 3
Zeichensymbole public class Welcome { } Schlüsselworte Reservierte Worte Keywords Wortsymbol Zeichensymbol { } [ ] ( ) // /* */ ;, + - * / ^!? ++ -- = == < > <= >=!=
Bezeichner public class Welcome { } Schlüsselworte BezeichnerZeichensymbol Reservierte WorteName Keywords Wortsymbol Regeln für die Bildung von Bezeichnern in Java 1. Das 1. Zeichen muss ein Buchstabe sein 2. Dahinter wahlweise eine beliebig lange Folge aus Buchstaben oder Ziffern 3. _ Unterstrich und $ sind Buchstaben, sollen vermieden werden. 4. Groß- Kleinschreibung wird unterschieden
Syntax für Bezeichner Das 1. Zeichen muss ein Buchstabe sein Dahinter wahlweise eine beliebig lange Folgeaus Buchstaben und/oder Ziffern _ Unterstrich und $ sind Buchstaben, sollen vermieden werden. Groß- Kleinschreibung wird unterschieden 6
Syntax für Bezeichner N n Das 1. Zeichen muss ein Buchstabe sein N1 quadratwurzel A_1 Dahinter wahlweise eine beliebig lange Folgeaus Buchstaben und/oder Ziffern _ Unterstrich und $ sind Buchstaben, sollen vermieden werden. Groß- Kleinschreibung wird unterschieden Richtig: 7
Syntax für Bezeichner Das 1. Zeichen muss ein Buchstabe sein Falsch: 1 1a else nr eins Dahinter wahlweise eine beliebig lange Folgeaus Buchstaben und/oder Ziffern _ Unterstrich und $ sind Buchstaben, sollen vermieden werden. Groß- Kleinschreibung wird unterschieden 8
Syntaxregeln für Identifier = Bezeichner Backus-Naur-Notation (Metasprache) Regel, Definition LETTER ::= a b z' 'A' 'B' 'Z _ $ DIGIT ::= '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' Identifiername ::= LETTER Identifiername ::= Identifiername LETTER Identifiername ::= Identifiername DIGIT Identifier ::= Identifiername aber kein reserviertes Wort
Syntax für Bezeichner Backus-Naur-Notation (Metasprache) wird definiert durch Variable Nonterminal LETTER ::= a' 'b' 'c' 'A' 'B' 'Z' oder, DIGIT ::= '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' alternativ Identifiername ::= LETTER Identifiername ::= Identifiername LETTER Identifiername ::= Identifiername DIGIT Identifiername ::= Identifiername LETTER Identifier ::= Identifiername aber kein reserviertes Wort
Beispiel: H2O ist identifiername Identifiername ::= Identifiername LETTER LETTER ::= 'O' anwenden Identifiername ::= Identifiername 'O' Identifiername ::= Identifiername DIGIT anwenden Identifiername ::= Identifiername DIGIT 'O' DIGIT ::= '2' anwenden Identifiername ::= Identifiername '2O' Identifiername ::= LETTER anwenden Identifiername ::= LETTER '2O' LETTER ::= 'H' anwenden Identifiername ::= 'H2O' H2O' lässt sich aus dem Nonterminal Identifiername ableiten und ist kein reserviertes Wort, ist also ein gültiger Bezeichner in Java
Syntaxregel für public class ClassDeclaration::= { ClassModifier } 'class' Identifier [ 'extends' TypeName ] [ 'implements' TypeName { ',' TypeName } ] ( ClassBody ';' ) Information hiding Vererbung, später ClassModifier::= 'public' 'protected' 'private' 'abstract' 'static' 'final' 'strictfp' ClassBody::= '{' { ClassBodyDeclaration } '}'
Syntaxregel für public class ClassDeclaration::= { ClassModifier } 'class' Identifier public class Welcome ClassBody { {ClassBodyDeclaration} public static void main }
Backus-Naur-Form BNF Eine einfache und effektive Methode, Syntaxregeln zu notieren Erfunden von John Backus und Peter Naur im Zusammenhang mit Algol 60 John Warner Backus, 1924-2007, ab 1959 bei IBM, Mitentwickler von Fortran (die erste höhere Programmiersprache, 3GL), ab 1959 BNF Peter Naur, geb. 1928, Dänemark, Mitentwickler von Algol 60 14
Definition EBNF (N,T,P,S) N = endliche Menge von Nonterminals Nonterminals sind Grammatikbegriffe T = endliche Menge Terminalsymbole (Zeichen) Die durch EBNF definierte Sprache besteht aus aneinandergereihten Terminalsymbolen (Worte aus den Terminalzeichen) P = endliche Menge von Produktionen der Form A ::= EBNF-Ausdruck A N ist Nonterminal EBNF-Ausdruck besteht aus Nonterminals, Terminals und Meta-Zeichen {}[]() Ein Startsymbol S N Die definierte Sprache besteht aus allen Worten aus Zeichen aus T, die mit Regeln aus P aus dem Startsymbol hergeleitet werdeb können. 15
EBNF-Grundausdrücke Aneinanderreihung A ::= BCD A ist Nonterminal = Metasymbol B,C,D sidn bel. EBNF- Ausdrücke A wird durch die 3 aufeinaderfolgenden Symbole ersetzt Alternative A ::= B C D A kann durch B oder C oder D ersetzt werden [] Option A ::= [B]C A kann durch BC oder C ersetzt werden. {} Wiederholung A ::= {B}C A kann durch C, BC, BBC, B.BC ersetzt werden. 16
Ganze Zahlen in Java: Zahlliterale Dezimalzahlen aus den Ziffern 0 9 Java-Dezinalzahl darf keine führende Null haben! z.b. 1 595 200 0 Oktalzahlen aus den Ziffern 0 7 Oktalzahlen beginnen mit einer führenden Null z. B. 01, 07, 0100 Hexadezimalzahlen aus 0.. 9, a,. f, A F Beginnen mit 0x oder 0X z.b. 0xa 0xA, 0Xa, 0x10, 0xff nicht im Kurs 17
Extended Backus Naur Form DIGIT::= '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' DIGIT1::= '1' '2' '3' '4' '5' '6' '7' '8' '9' DeciLiteral ::= DIGIT1 { DIGIT } '0' Was in geschweiften Klammen steht, darf beliebig oft wiederholt werden! Auch 0 mal!
Literale für Oktalzahlen OCTDIGIT::= '0' '1' '2' '3' '4' '5' '6' '7' OctalLiteral::= '0' OCTDIGIT { OCTDIGIT } Eine führende Null bedeutet;. Oktalzahl! 02 ist ein oktales Literal, 20 nicht 010 == 8!!! 08 ist falsch! nicht im Kurs
Literale für Hexadezimalzahlen HEXDIGIT::= < Digits 0 to 9, Letters A to F, Letters a to f > HexLiteral::= ('0x' '0X' ) HEXDIGIT { HEXDIGIT } 0x10 == 16!!! 0xa == 0Xa == 0XA == 10 == 012 nicht im Kurs
Literale für ganze Zahlen IntegerLiteral::= DeciLiteral OctalLiteral HexLiteral ) [ 'l' 'L' ] Java kennt Oktal-, Dezimal- und Hexedezimalzahlen. L oder L am Ende heißt long = 8 Byte Speicherplatz Java kennt ganzzahlige Datentypen mit 1, 2, 4 oder 8 Byte Speicherplatz, Was in eckigen Klammen steht, ist optional. Es darf einmal oder keinmal vorkommen!
Java-Syntax Komplette Syntax http://iis.unikoblenz.de/javakurs2007/kursmaterial/mysynta x.htm