Previous Page TOC Next Page



Appendix A: EBNF

class-decl   ::=   class identifier [ "<" generics_list  ">"] is 
         class-definition
class-definition   ::=   Enumeration enum-class-decl
      | [ class_type ] general-class-decl
enum-class-decl   ::=   class-comment
         manifest ident-list
      end class
general-class-decl   ::=   class-comment
      uses [ ident-list  ]
      [ internal
         [ const const-decls ]
         [ var var-decls ]
         [ routines routine-decls ]
      interface
         [ creation [ "(" parameter-list  ")" ] is
            routine-impl ]
         [ routines routine-decls ]
      [ invariant condition ]
      end class
generics-list    ::=   generics-decl { "," generics-decl }
generics-decl   ::=   formal-generic-param [ is class-type ]
formal-generic-param    ::=   identifier 
const-decls   ::=   const-decl { const-decl }
const-decl   ::=   ident-list  ":" type  initialisation 
var-decls   ::=   var-decl { var-decl }
var-decl   ::=   ident-list  ":" type [ initilisation ]
ident-list   ::=   identifier {"," identifier }
initilisation   ::=   ":=" expression
type   ::=   class-type
      | formal-generic-param 
class-type   ::=   identifier [ "<" actual-generics-list  ">" ]
actual-generics-list   ::=   type { "," type }
routine-decls   ::=   routine-decl { routine-decl }
routine-decl   ::=   identifier [ "(" parameter-list  ")" ] 
            [ "->" "(" parameter-list   ")"] is
         routine-impl
parameter-list   ::=   param-decl {"," param-decl }
param-decl   ::=   identifier ":" type
routine-impl   ::=   deferred routine-spec
      | builtin routine-spec
      | [ redefined ] routine-body
routine-body    ::=   routine-comment 
      [ pre condition ]
      [ const const-decls ]
      [ var var-decls ]
      do
         statement-list 
      [ post condition ]
      end identifier 
routine-spec   ::=   routine-comment 
      [ pre condition ]
      [ post condition ]
      end identifier 
statement   ::=   assignment
      | assignment-attempt
      | procedure-call
      | return
      | assertion
      | conditional 
      | selection 
      | loop
assignment   ::=   indexed-ident-list ":=" expression-list
assignment-attempt   ::=   indexed-ident-list "?=" expression-list
indexed-ident-list   ::=   indexed-ident {"," indexed-ident }
expression-list   ::=   expression {"," expression }
procedure-call    ::=   call-chain 
return    ::=   return
assertion   ::=   assert  "(" condition ")"
conditional   ::=   if condition then
         statement-list
      { elseif expression then
         statement-list }
      [ else
         statement-list ]
      end if
condition   ::=   boolean-expression
statement-list   ::=   { statement }
selection   ::=   case expression of
         { set_expr ":" statement-list }
         [ else statement-list ]
      end case
loop   ::=   loop

statement-list
exit on condition
statement-list
{ exit on condition
statement-list }
end loop boolean-expression ::= expression expression ::= function-call | operator-expression | reference-equality | type-equality | in | create | old | this function-call ::= call-chain call-chain ::= [ super "!" ] unqualified-call { "." unqualified-call } unqualified-call ::= identifier [ "(" expression-list ")" ] operator-expression ::= ... | expression "=>" expression | entity reference-equality ::= expression comparison expression comparison ::= "=" | "<>" type-equality ::= expression is type in ::= expression in set_expr set_expr ::= "{" [ set_elem { "," set_elem } ] "}" set_elem ::= expression | subrange subrange ::= expression ".." expression create ::= general-create | array-create general-create ::= create class-ident [ "(" expression-list ")" ] array-create ::= "[" expression { "," expression } "]" old ::= old expression entity ::= indexed-ident | manifest-constant indexed-ident ::= identifier { "[" expression "]" } manifest-constant ::= integer-constant | real-constant | boolean-constant | string-constant | enum-constant enum-constant ::= identifier | qualified-ident qualified-ident ::= class-ident "!" identifier

Previous Page TOC Next Page