Java für Anfänger
Teil 2: Java-Syntax
Programmierkurs
06.-10.10.2008
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
zusammen gefü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
Zeichensymbole
public class Welcome {
}
Schlüsselworte
Reservierte Worte
Keywords
Wortsymbol
Zeichensymbol
Reservierte Worte in Java
abstract
try
boolean
void
break
else
byte
extends
case
final
catch
finally
char
float
class
for
const
goto
continue
default
transient
do
import
public
double
instanceof
int
interface
long
native
new
null
package
if
implements
short
volatile
static while
super
switch
synchronized
this
throw
private throws
protected
return
4
Bezeichner
public class Welcome {
}
Schlüsselworte Bezeichner Zeichensymbol
Reservierte Worte Name
Keywords
Wortsymbol
Regeln für die Bildung von Bezeichnern in Java
1. Das 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
Bezeichner
public class Welcome {
}
Richtig:
N
n
N1
quadratWurzel
A_1
Schlüsselworte Bezeichner Zeichensymbol
Reservierte Worte Name
Keywords
Wortsymbol
Regeln für die Bildung von Bezeichnern in Java
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
Falsch:
Bezeichner
public class Welcome {
}
Schlüsselworte Bezeichner Zeichensymbol
Reservierte Worte Name
Keywords
Wortsymbol
Regeln für die Bildung von Bezeichnern in Java
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
1
1a
else
Backus-Naur-Form BNF
Eine einfache und effektive Methode,
Syntaxregeln exakt 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
8
Formale Sprachen
Informatik benutzt formale Sprachen
Eine formale Sprache besteht aus Worten über
einem endlichen Alphabet von Zeichen.
In der Informatik nur Sprachen interessant, die
durch (einfach zu handhabende) Grammatiken
erzeugt werden können.
EBNF ist eine einfache und doch „mächtige“
Grammatik
John Backus 1924, Fortran & FP, Peter Naur 1928
9
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.
10
EBNF-Ausdrücke
Aneinanderreihung
A ::= BCD
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.
11
Syntax für Bezeichner
Regel,
Backus-Naur-Notation (Metasprache) Definition
LETTER ::= ‘a’|’b’| …|'c'|'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
N={LETTER,DIGIT,Identifiername,Identifier}
T={'A'..'Z','a'..'z','0'..'9','_','$'}
Syntax für BezeichnerVariable
Nonterminal
Backus-Naur-Notation (Metasprache)
wird definiert
durch
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
Identifiername ::= Identifiername LETTER
Identifiername ::= Identifiername 'O'
DIGIT ::= …|'2'|… anwenden
Identifiername ::= Identifiername '2O'
Identifiername ::= Identifiername DIGIT anwenden
Identifiername ::= Identifiername DIGIT 'O'
LETTER ::= …|'O'|… anwenden
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
EBNF-Beispiel
Zahl-Literale in Java durch EBNF definieren
Menge der Nonterminals
N = {IntegerLiteral, OctalLiteral, DeciLiteral,
HexLiteral,Digit, Digit1, OctDigit, HexDigit}
Menge der Terminalsymbole
T={‘0‘,‘1‘,‘2,‘3,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘a‘,‘b‘,‘c,‘d‘,‘e‘,‘f‘,‘l,‘‘x‘,‘A‘,‘
B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘L‘,‘X‘,‘.‘,‘+‘,‘-‘}
Startsymbol: IntegerLiteral
15
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 Dezimalzahlen
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'
Eine Java-DezimalZahl ungleich Null
darf nicht mit der
Ziffer „0' beginnen!
02 ist KEIN dezimales Literal, 20 schon
Literale für Oktalzahlen
OCTDIGIT::=
'0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'
OctalLiteral::=
'0' OCTDIGIT { OCTDIGIT }
02 ist ein oktales Literal, 20 nicht
010 == 8 !!!
08 ist falsch!
Eine führende Null
bedeutet;. Oktalzahl!
Ableiten der Dezimalzahl 10
IntegerLiteral ::= DeciLiteral
DeciLiteral ::=
Digit1{Digit}
‘1‘Digit
‘1‘‘0‘
Ableiten der Oktalzahl 077 = 63
IntegerLiteral ::= OctLiteral
OctLiteral ::=‘0‘ OctDigit{OctDigit}
‘0‘ ‘7‘{OctDigit}
‘0‘ ‘7‘OctDigit
‘0‘ ‘7‘ ‘7‘
19
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
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 ByteWas in eckigen
Speicherplatz
Klammen steht,
ist optional.
Java kennt ganzzahlige
darf einmal
Datentypen mit 1, 2, 4 oder 8 Byte Es
oder keinmal
Speicherplatz,
vorkommen!
Was wird ausgegeben?
System.out.print(017)
System.out.print(0x17)
System.out.print(“0x17“)
System.out.print(017+0x17+17)
System.out.print(“0x17“+017+17)
Was wird ausgegeben?
System.out.print(017)
15
System.out.print(0x17)
23
System.out.print(“0x17“)
0x17
System.out.print(017+0x17+17) 55
System.out.print(“0x17“+017+17)
0x171517
Syntaxregel für „public class …“
Vererbung,
später
ClassDeclaration::=
{ ClassModifier } 'class' Identifier
[ 'extends' TypeName ]
[ 'implements' TypeName { ',' TypeName } ]
( ClassBody | ';' )
Information
hiding
ClassModifier::=
'public' | 'protected' | 'private' | 'abstract' | 'static' | 'final' |
'strictfp'
ClassBody::=
'{' { ClassBodyDeclaration } '}'
Java-Syntax
ClassModifier
Identifier
public class Welcome {
}
Komplette Syntax
http://iis.unikoblenz.de/Javakurs2007/Kursmaterial/mysynta
x.htm