Eine Grammatik für eine Sprache wie die, die in diesem Abschnitt enthalten ist, soll beim Verstehen der Sprache helfen. Sie sollten nicht versuchen, sie isoliert zu betrachten, da sie keine genauen Anweisungen zur Sprache enthält. Sie könnten einen Java-Code schreiben, der mit den Regeln wie sie in der Grammatik festgelegt sind, übereinstimmt, aber die Regeln, die an anderer Stelle in diesem Buch aufgeführt sind, nicht befolgt. Sie bekämen so einen Code, der nicht kompiliert werden kann und auch nicht läuft.
Die Grammatik für Anweisungen (statements) und Ausdrücke (expressions) wird in diesem Anhang ausführlich behandelt. Aus den Kapiteln 9 und 13 wissen Sie aber, daß Java keine willkürliche Kombination von Datentypen erlaubt. Eine Anweisung oder ein Ausdruck, der nur mit dieser Grammatik übereinstimmt, aber die Typenregeln nicht befolgt, wird sich nicht erfolgreich kompilieren lassen.
Zusätzlich behandelt diese Grammatik die erlaubten Formen für Deklarationen und für den Gebrauch von Variablen. Java besitzt aber noch weitere Regeln für Variablen, die in einer Grammatik nicht abgedeckt sind. Bis zu einem gewissen Grad versucht der Compiler sicherzustellen, daß Variablen initialisiert werden, bevor sie verwendet werden. Wenn der Compiler denkt, daß Sie eine nichtinitialisierte Variable verwenden, wird er Ihnen einen Fehler melden. Diese Arten von Regeln sind nicht in der Grammatik der Sprache abgedeckt.
Die formale Spezifikation für Java und die Grammatik sind bei JavaSoft online verfügbar. Die Hauptdokumentationsseite befindet sich unter http://java.sun.com/doc.html. Dokumentation, die für das JDK spezifisch ist, können Sie unter http://java.sun.com/JDK-1.0/index.html bekommen.
Die folgenden grammatikalischen Elemente beziehen sich auf Werte, die mit dem Ascii-Zeichensatz korrespondieren:
Die folgenden Elemente sind genauso, wie im Unicode Standard definiert:
Der Zusatz opt zeigt an, daß das Element optional ist; ein Element zu definieren ist (wenn man nach der Grammatik geht) mit und ohne die optionalen Elemente erlaubt.
EscapedInputCharacter:
UnicodeEscape
RawInputCharacter
UnicodeEscape:
\ UnicodeMarker HexDigit HexDigit HexDigit HexDigit
UnicodeMarker:
u
UnicodeMarkeru
RawInputCharacter:
any Unicode character
HexDigit: eine aus
0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
LineTerminator:
ASCII-CR ASCII-LF
ASCII-CR
ASCII-LF
InputCharacter:
EscapedInputCharacter, but not ASCII-CR or ASCII-LF
Input:
InputElementsopt
InputElements:
InputElement
InputElements InputElement
InputElement:
Comment
WhiteSpace
Token
WhiteSpace:
ASCII-SP
ASCII-HT
ASCII-FF
LineTerminator
Token:
Keyword
Identifier
Literal
Separator
Comment:
/ * NotStar TraditionalComment
/ * * DocComment
/ / InputCharactersopt LineTerminator
TraditionalComment:
* /
InputCharacter TraditionalComment
LineTerminator TraditionalComment
DocComment:
/
InputCharacter TraditionalComment
LineTerminator TraditionalCommentTraditionalComment
InputCharacters:
InputCharacter
InputCharacters InputCharacter
Keyword: eines aus
abstract |
boolean |
break |
byte |
byvalue |
case |
cast |
catch |
char |
class |
const |
continue |
default |
do |
double |
else |
extends |
final |
finally |
float |
for |
future |
generic |
goto |
if |
implements |
import |
inner |
instanceof |
int |
interface |
long |
native |
new |
null |
operator |
outer |
package |
private |
protected |
public |
rest |
return |
short |
static |
super |
switch |
synchronized |
this |
throw |
throws |
transient |
try |
var |
void |
volatile |
while |
Identifier:
UnicodeLetter
Identifier UnicodeLetter
Identifier UnicodeDigit
Literal:
IntegerLiteral
FloatingPointLiteral
BooleanLiteral
CharacterLiteral
StringLiteral
IntegerLiteral:
DecimalLiteral IntegerTypeSuffixopt
HexLiteral IntegerTypeSuffixopt
OctalLiteral IntegerTypeSuffixopt
IntegerTypeSuffix: einen aus
l L
DecimalLiteral:
NonZeroDigit Digitsopt
Digits:
Digit
Digits Digit
Digit: eine aus
0 1 2 3 4 5 6 7 8 9
NonZeroDigit: eine aus
1 2 3 4 5 6 7 8 9
HexLiteral:
0x HexDigit
0X HexDigit
HexLiteral HexDigit
OctalLiteral:
0
OctalLiteral OctalDigit
OctalDigit: eine aus
0 1 2 3 4 5 6 7
FloatingPointLiteral:
Digits . Digitsopt ExponentPartopt FloatTypeSuffixopt
. Digits ExponentPartopt FloatTypeSuffixopt
Digits ExponentPartopt FloatTypeSuffixopt
ExponentPart:
ExponentIndicator SignedInteger
ExponentIndicator: eine aus
e E
SignedInteger:
Signopt Digits
Sign: eins aus
+ -
FloatTypeSuffix: eins aus
f F d D
BooleanLiteral: eins aus
true false
CharacterLiteral:
' SingleCharacter '
' Escape '
SingleCharacter:
InputCharacter, but not ' or \
Escape: eins aus
\b\t\n\f\r
\«\'\\
OctalEscape
OctalEscape:
\ OctalDigit
\ OctalDigit OctalDigit
\ ZeroToThree OctalDigit OctalDigit
ZeroToThree: eine aus
0 1 2 3
StringLiteral:
» StringCharacters «
StringCharacters:
StringCharacter
StringCharacters StringCharacter
StringCharacter:
InputCharacter, but not » or \
Escape
Separator: einer aus
( |
) |
{ |
} |
; |
[ |
] |
, |
. |
|
Operator: einer aus
= |
> |
< |
! |
~ |
== |
<= |
>= |
!= |
&& |
|| |
++ |
|
+ |
|
* |
/ |
& |
| |
^ |
% |
<< |
>> |
>>> |
+= |
= |
*= |
/= |
&= |
|= |
^= |
%= |
<<= |
>>= |
>>>= |
? |
= |
|
|
|
Type:
PrimitiveType
ClassType
InterfaceType
ArrayType
PrimitiveType: einer aus
booleancharbyteshortint
longfloatdouble
ClassType:
Name
InterfaceType:
Name
ArrayType:
CompilationUnit:
PackageStatementopt ImportStatementsopt TypeDeclarationsopt
PackageStatement:
package PackageName ;
PackageName:
PackageNameComponent
PackageName PackageNameComponent
PackageNameComponent:
Identifier
ImportStatement:
PackageImportStatement
TypeImportStatement
TypeImportOnDemandStatement
PackageImportStatement:
import PackageName ;
TypeImportStatement:
import PackageName. Identifier ;
TypeImportOnDemandStatement:
import PackageName. * ;
TypeDeclarations:
TypeDeclaration
TypeDeclarations TypeDeclaration
TypeDeclaration:
ClassDeclaration
ClassDeclaration:
ClassModifiersopt class Identifier Superopt Interfacesopt ClassBody
ClassModifiers:
ClassModifier
ClassModifiers ClassModifier
ClassModifier: eine aus
abstractfinalpublic
Super:
extends TypeName
Interfaces:
implements TypeNameList
ClassBody:
{ FieldDeclarationsopt }
FieldDeclarations:
FieldDeclaration
FieldDeclarations FieldDeclaration
FieldDeclaration:
FieldVariableDeclaration
MethodDeclaration
ConstructorDeclaration
StaticInitializer
FieldVariableDeclaration:
VariableModifiersopt Type VariableDeclarators ;
VariableModifiers:
VariableModifier
VariableModifiers VariableModifier
VariableModifier: eine aus
publicprotectedprivate
staticfinal transient
volatile
VariableDeclarators:
VariableDeclarator
VariableDeclarators, VariableDeclarator
VariableDeclarator:
DeclaratorName
DeclaratorName = VariableInitializer
DeclaratorName:
Identifier
DeclaratorName []
VariableInitializer:
Expression
{ ArrayInitializersopt ,opt }
ArrayInitializers:
VariableInitializer
ArrayInitializers,
MethodDeclaration:
MethodModifiersopt ResultType MethodDeclarator Throwsopt MethodBody
MethodModifiers:
MethodModifier
MethodModifiers MethodModifier
MethodModifier: eine aus
public |
private |
protected |
static |
abstract |
final |
native |
synchronized |
|
ResultType:
Type
void
MethodDeclarator:
DeclaratorName ( ParameterListopt )
MethodDeclarator []
ParameterList:
Parameter
ParameterList, Parameter
Parameter:
TypeDeclaratorName
Throws:
throws TypeNameList
TypeNameList:
TypeName
TypeNameList, TypeName
MethodBody:
Block;
ConstructorDeclaration:
ConstructorModifieropt ConstructorDeclarator Throwsopt ConstructorBody
ConstructorDeclarator:
TypeName ( ParameterListopt )
ConstructorModifier: eine aus
publicprotectedprivate
ConstructorBody:
{ ExplicitConstructorCallStatementopt BlockBody }
ExplicitConstructorCallStatement:
this ( ArgumentListopt ) ;
super ( ArgumentListopt ) ;
StaticInitializer:
static Block
InterfaceDeclaration:
InterfaceModifiersopt interface Identifier ExtendsInterfacesopt InterfaceBody
InterfaceModifiers:
InterfaceModifier
InterfaceModifiers InterfaceModifier
InterfaceModifier: eine aus
publicabstract
ExtendsInterfaces:
extends TypeNameList
InterfaceBody:
ArrayInitializer:
{ ElementInitializersopt ,opt }
ElementInitializers:
Element
ElementInitializers, Element
Element:
Expression
Block:
{ LocalVarDeclarationsAndStatements }
LocalVarDeclarationsAndStatements:
LocalVarDeclarationOrStatement
LocalVarDeclarationsAndStatements LocalVarDeclarationOrStatement
LocalVarDeclarationOrStatement:
LocalVariableDeclarationStatement
Statement
LocalVariableDeclarationStatement:
TypeSpecifier VariableDeclarators ;
Statement:
EmptyStatement
LabeledStatement
ExpressionStatement;
SelectionStatement
IterationStatement
JumpStatement
GuardingStatement
EmptyStatement:
;
LabeledStatement:
Identifier: Statement
case ConstantExpression: Statement
default: Statement
ExpressionStatement:
Assignment
PreIncrement
PreDecrement
PostIncrement
PostDecrement
MethodCall
AllocationExpression
SelectionStatement:
if ( Expression ) Statement
if ( Expression ) Statement else Statement
switch ( Expression ) Block
IterationStatement:
while ( Expression ) Statement
do Statement while ( Expression ) ;
for ( ForInit Expressionopt ; ForIncropt )
ForInit:
ExpressionStatements;
LocalVariableDeclarationStatement
ForIncr:
ExpressionStatements
ExpressionStatements:
ExpressionStatement
ExpressionStatements, ExpressionStatement
JumpStatement:
break Identifieropt ;
continue Identifieropt ;
return Expressionopt ;
throw Expression ;
GuardingStatement:
synchronized ( Expression ) Statement
try Block Finally
try Block Catches
try Block Catches Finally
Catches:
Catch
Catches Catch
Catch:
catch ( Arguement ) Block
Finally:
PrimaryExpression:
Name
NotJustName
NotJustName:
AllocationExpression
ComplexPrimary
ComplexPrimary:
Literal
( Expression )
ArrayAccess
FieldAccess
MethodCall
Name:
QualifiedName
this
super
null
QualifiedName:
Identifier
QualifiedName. Identifier
ArrayAccess:
Name [ Expression ]
ComplexPrimary [ Expression ]
FieldAccess:
PrimaryExpression. Identifier
MethodCall:
MethodAccess ( ArgumentListopt )
MethodAccess:
Name
PrimaryExpression. Identifier
ArgumentList:
Expression
ArgumentList, Expression
AllocationExpression:
new TypeName ( ArgumentListopt )
new TypeName DimExprs Dimsopt
TypeName:
TypeKeyword
QualifiedName
TypeKeyword: eins aus
booleancharbyte
shortintfloat
longdouble
ArgumentList:
Expression
ArgumentList , Expression
DimExprs:
DimExpr
DimExprs DimExpr
DimExpr:
[ Expression ]
Dims:
[ ]
Dims [ ]
PostfixExpression:
PrimaryExpression
PostIncrement
PostDecrement
PostIncrement:
PrimaryExpression ++
PostDecrement:
PrimaryExpression --
UnaryExpression:
PreIncrement
PreDecrement
+ UnaryExpression
- UnaryExpression
UnaryExpressionNotPlusMinus
PreIncrement:
++ PrimaryExpression
PreDecrement:
-- PrimaryExpression
UnaryExpressionNotPlusMinus:
PostfixExpression
~ UnaryExpression
! UnaryExpression
CastExpression
CastExpression:
( TypeKeyword ) UnaryExpression
( TypeExpression ) UnaryExpressionNotPlusMinus
MultiplicativeExpression:
UnaryExpression
MultiplicativeExpression * UnaryExpression
MultiplicativeExpression / UnaryExpression
MultiplicativeExpression % UnaryExpression
AdditiveExpression:
MultiplicativeExpression
AdditiveExpression + MultiplicativeExpression
AdditiveExpression – MultiplicativeExpression
ShiftExpression:
AdditiveExpression
ShiftExpression << AdditiveExpression
ShiftExpression >> AdditiveExpression
ShiftExpression >>> AdditiveExpression
RelationalExpression:
ShiftExpression
RelationalExpression < ShiftExpression
RelationalExpression > ShiftExpression
RelationalExpression <= ShiftExpression
RelationalExpression >= ShiftExpression
RelationalExpression instanceof TypeSpecifier Dimsopt
EqualityExpression:
RelationalExpression
EqualityExpression == RelationalExpression
EqualityExpression != RelationalExpression
AndExpression:
EqualityExpression
AndExpression & EqualityExpression
ExclusiveOrExpression:
AndExpression
ExclusiveOrExpression ^ andExpression
InclusiveOrExpression:
ExclusiveOr
InclusiveOrExpression | ExclusiveOrExpression
ConditionalAndExpression:
InclusiveOrExpression
ConditionalAndExpression && InclusiveOrExpression
ConditionalOrExpression:
ConditionalAndExpression
ConditionalOrExpression || ConditionalAndExpression
ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression? Expression: ConditionalExpression
AssignmentExpression:
ConditionalExpression
Assignment
Assignment:
UnaryExpression AssignmentOperator AssignmentExpression
AssignmentOperator: einen aus
= |
*= |
/= |
%= |
+= |
-= |
<<= |
>>= |
>>>= |
&= |
^= |
|= |
|
|
|
Expression:
AssignmentExpression