Previous Page TOC Next Page See Page

C

Die Grammatik von Java

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.

C.1 Lexikalische Struktur

C.1.1 Unicode Escapes und Character Input

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

C.1.2 Input-Zeilen

LineTerminator:

ASCII-CR ASCII-LF

ASCII-CR

ASCII-LF

InputCharacter:

EscapedInputCharacter, but not ASCII-CR or ASCII-LF

C.1.3 Tokens

Input:

InputElementsopt

InputElements:

InputElement

InputElements InputElement

InputElement:

Comment

WhiteSpace

Token

WhiteSpace:

ASCII-SP

ASCII-HT

ASCII-FF

LineTerminator

Token:

Keyword

Identifier

Literal

Separator

Operator

C.2 Kommentare

Comment:

/ * NotStar TraditionalComment

/ * * DocComment

/ / InputCharactersopt LineTerminator

TraditionalComment:

* /

InputCharacter TraditionalComment

LineTerminator TraditionalComment

DocComment:

/

InputCharacter TraditionalComment

LineTerminator TraditionalCommentTraditionalComment

InputCharacters:

InputCharacter

InputCharacters InputCharacter

C.2.1 Schlüsselworte

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

C.2.2 Identifiers

Identifier:

UnicodeLetter

Identifier UnicodeLetter

Identifier UnicodeDigit

C.2.3 Literale

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

C.2.4 Separatoren

Separator: einer aus

(

)

{

}

;

[

]

,

.


C.2.5 Operatoren

Operator: einer aus

=

>

<

!

~

==

<=

>=

!=

&&

||

++


+


*

/

&

|

^

%

<<

>>

>>>

+=

=

*=

/=

&=

|=

^=

%=

<<=

>>=

>>>=

?

=




C.3 Types and Variables

Type:

PrimitiveType

ClassType

InterfaceType

ArrayType

PrimitiveType: einer aus

booleancharbyteshortint

longfloatdouble

ClassType:

Name

InterfaceType:

Name

ArrayType:

Type []

C.4 Programmstruktur

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

InterfaceDeclaration

C.5 Klassen und Schnittstellen

ClassDeclaration:

ClassModifiersopt class Identifier Superopt Interfacesopt ClassBody

ClassModifiers:

ClassModifier

ClassModifiers ClassModifier

ClassModifier: eine aus

abstractfinalpublic

Super:

extends TypeName

Interfaces:

implements TypeNameList

ClassBody:

{ FieldDeclarationsopt }

C.5.1 Feld-Deklarationen

FieldDeclarations:

FieldDeclaration

FieldDeclarations FieldDeclaration

FieldDeclaration:

FieldVariableDeclaration

MethodDeclaration

ConstructorDeclaration

StaticInitializer

C.5.2 Variablen-Deklarationen

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,

C.5.3 Methoden-Deklarationen

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;

C.5.4 Konstruktor Methodendeklarationen

ConstructorDeclaration:

ConstructorModifieropt ConstructorDeclarator Throwsopt ConstructorBody

ConstructorDeclarator:

TypeName ( ParameterListopt )

ConstructorModifier: eine aus

publicprotectedprivate

ConstructorBody:

{ ExplicitConstructorCallStatementopt BlockBody }

ExplicitConstructorCallStatement:

this ( ArgumentListopt ) ;

super ( ArgumentListopt ) ;

C.5.5 Static Initialization

StaticInitializer:

static Block

C.5.6 Interface Deklarationen

InterfaceDeclaration:

InterfaceModifiersopt interface Identifier ExtendsInterfacesopt InterfaceBody

InterfaceModifiers:

InterfaceModifier

InterfaceModifiers InterfaceModifier

InterfaceModifier: eine aus

publicabstract

ExtendsInterfaces:

extends TypeNameList

InterfaceBody:

{ FieldDeclarations }

C.6 Arrays

ArrayInitializer:

{ ElementInitializersopt ,opt }

ElementInitializers:

Element

ElementInitializers, Element

Element:

Expression

ArrayInitializer

C.7 Blocks und Statements

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:

finally Block

C.8 Expressions

C.8.1 Primary Expressions

PrimaryExpression:

Name

NotJustName

NotJustName:

AllocationExpression

ComplexPrimary

ComplexPrimary:

Literal

( Expression )

ArrayAccess

FieldAccess

MethodCall

Name:

QualifiedName

this

super

null

QualifiedName:

Identifier

QualifiedName. Identifier

C.8.2 Array und Field Zugriff

ArrayAccess:

Name [ Expression ]

ComplexPrimary [ Expression ]

FieldAccess:

PrimaryExpression. Identifier

C.8.3 Methodenaufrufe

MethodCall:

MethodAccess ( ArgumentListopt )

MethodAccess:

Name

PrimaryExpression. Identifier

ArgumentList:

Expression

ArgumentList, Expression

C.8.4 Allocation Expressions

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 [ ]

C.8.5 Unitäre Operatoren

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

C.8.6 Arithmetische Operators

MultiplicativeExpression:

UnaryExpression

MultiplicativeExpression * UnaryExpression

MultiplicativeExpression / UnaryExpression

MultiplicativeExpression % UnaryExpression

AdditiveExpression:

MultiplicativeExpression

AdditiveExpression + MultiplicativeExpression

AdditiveExpression – MultiplicativeExpression

C.8.7 Shift Operatoren

ShiftExpression:

AdditiveExpression

ShiftExpression << AdditiveExpression

ShiftExpression >> AdditiveExpression

ShiftExpression >>> AdditiveExpression

C.8.8 Vergleichs- und Gleichheits-Operatoren

RelationalExpression:

ShiftExpression

RelationalExpression < ShiftExpression

RelationalExpression > ShiftExpression

RelationalExpression <= ShiftExpression

RelationalExpression >= ShiftExpression

RelationalExpression instanceof TypeSpecifier Dimsopt

EqualityExpression:

RelationalExpression

EqualityExpression == RelationalExpression

EqualityExpression != RelationalExpression

C.8.9 Bitweise und Logische Operatoren

AndExpression:

EqualityExpression

AndExpression & EqualityExpression

ExclusiveOrExpression:

AndExpression

ExclusiveOrExpression ^ andExpression

InclusiveOrExpression:

ExclusiveOr

InclusiveOrExpression | ExclusiveOrExpression

C.8.10 Konditionale Operatoren

ConditionalAndExpression:

InclusiveOrExpression

ConditionalAndExpression && InclusiveOrExpression

ConditionalOrExpression:

ConditionalAndExpression

ConditionalOrExpression || ConditionalAndExpression

ConditionalExpression:

ConditionalOrExpression

ConditionalOrExpression? Expression: ConditionalExpression

C.8.11 Zuweisungen

AssignmentExpression:

ConditionalExpression

Assignment

Assignment:

UnaryExpression AssignmentOperator AssignmentExpression

AssignmentOperator: einen aus

=

*=

/=

%=

+=

-=

<<=

>>=

>>>=

&=

^=

|=




Expression:

AssignmentExpression


(c) 1997 Que
Ein Imprint des Markt&Technik Buch- und Software- Verlag GmbH
Elektronische Fassung des Titels: Special Edition: Java, ISBN: 3-8272-1001-1

Previous PagePage Top TOC Next Page See Page