Folien 02 - Informatik Information Server

Werbung
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
„
„
Herunterladen