next up previous
Next: About this document Up: ODL: Language Report Previous: Predefined Classes

Syntax

The following EBNF syntax uses `` [...]'' for ``optional'' and `` [...]*'' for ``zero or more''.

 
System: 		 [ Decl ]*

Decl: Class | With | Fn | Op | Inv | Init | Open | Gen | Locals | Accept | Rec | ;

Class: class GID [ is GIDs ] [ Decl ]* end

With: with ( GIDs ) [ Class ]* end

Fn: [ local | own | packed ] [ fn ] GID Params : QualType FnDef

Op: [ local ] op GID Params ReturnSpec OpDef

Inv: inv Exps

Init: init Exps

Open: opens GID

Gen: generator GID

Rec: record GID Params

Locals: locals [ Decl ]* end

Accept: when Exp then [ Op ]* ElseAccepts end

ElseAccepts: [ elsewhen Exp then [ Op ]* ]* else [ Op ]*

Params: [ ( ParamList ) ]

ParamList: GID : QualType [ , GID : QualType ]*

QualType: [ fixed | unique | common | opt ]* GID

ReturnSpec: [ [ ID ] : QualType | : Synch [ , Synch ]* ]

Synch: [ ID ] ( [ ParamList ] )

FnDef: [ [ init ] = Exp ] FnBind

FnBind: <> | Block | ;

OpDef: Block | Effect | ;

Effect: ==> OpSpec end | When

When: when Exp then OpSpec ElseWhens end

ElseWhens: [ elsewhen Exp then OpSpec ]* else OpSpec

OpSpec: [ When | Exps [ Block ] | Block ]

Block: { Statements }

Statements: Statement [ ; Statement ]*

Statement: [ Exp | Assign | Loc | Catch | While | If | Reply ]

Reply: reply [ Exp ]

While: while Exp do Statements end

If: if Exp then Statements ElsIfs end

ElsIfs: [ elsif Exp then Statements ]* [ else Statements ]

Catch: catch Exp [ Op ]* end

Assigns: Assign [ , Assign ]*

Assign: GID := Exp

Loc: local GID : QualType [ := Exp ]

Exps: Exp | Exp , Exps

Exp: [ @ ] Exp2

Exp2: [ Exp2 OrOp ] Exp3

OrOp: \/ | =>

Exp3: [ Exp3 /\ ] Exp4

Exp4: [ Exp5 RelOp ] Exp5

RelOp: = | < | > | ~= | >= | <=

Exp5: [ Exp5 AddOp ] Exp6

AddOp: + | -

Exp6: [ Exp6 MulOp ] Exp7

MulOp: * | / | div | mod

Exp7: [ Unop ]* Exp8

Unop: - | ~

Exp8: PredefFn | PredefExp | Msg | ( Exp )

PredefFn: Msg in GID | null ( Msg ) | oneOf ( GIDs )

PredefExp: true | false | null | pend | literal

Msg: Rcvr [ . Send ]* [ ' | '' | ? ]

Rcvr: self | [ GID $ ] Send | new GID [ ( [ Assigns|Exp ] ) ]

Send: GID [ ( [ Exps ] ) ]

GID: ID | GID [ Exps ] | PredefType

PredefType: bool | int | char | real | time | blob | Any | System

GIDs: GID [ , GID ]*

ID: [ ID :: ]* name


next up previous
Next: About this document Up: ODL: Language Report Previous: Predefined Classes


Doug Lea@Sat Apr 8 10:25:42 EDT 1995