Previous: Concept Index, Up: Top
The following is a summary of the context-free grammar for BML.
init-declarator-list ::= init-declarator [ , init-declarator ] ...
classfile ::= fileheader classheader classbody
fileheader ::= packageinfo [imports]
classheader ::= Java class header
classbody ::= [ staticsection ] [ objectsection ] constructors [ methods ]
staticsection ::= [ staticfields ] [ staticspec ]
staticspec ::= [ staticinvariant ] [ staticconstraint ]
[ staticrepresents ] [ staticinitially ]
objectsection ::= [ objectfields ] [ objectspec ]
objectspec ::= [ objectinvariant ] [ objectconstraint ]
[ objectrepresents ] [ objectrepresents ]
constructors ::= constructor [ constructor ]...
imports ::= [ import ]...
staticfields ::= [ staticfield ]...
objectfields ::= [ objectfield ]...
methods ::= [ method ]...
method ::= [ methodspec ] methodheader [ methodbody ]
modifiers ::= [ modifier ] ... modifier ::=public|protected|private|abstract|static| |final|synchronized|transient|volatile|native|strictfp|constbml-modifier ::=spec_public|spec_protected|model|ghost|pure|static|helper|non_null|nullable| ownership-modifier ownership-modifier ::=peer|rep|readonlybml-declaration ::= invariant | history-constraint | represents-decl | initially-clause
expression-list ::= expression [,expression ] ... expression ::= conditional-expr conditional-expr ::= equivalence-expr [?conditional-expr:conditional-expr ] equivalence-expr ::= implies-expr [ equivalence-op implies-expr ] ... equivalence-op ::=<==>|<=!=>implies-expr ::= logical-or-expr [==>implies-non-backward-expr ] | logical-or-expr<==logical-or-expr [<==logical-or-expr ] ... implies-non-backward-expr ::= logical-or-expr [==>implies-non-backward-expr ] logical-or-expr ::= logical-and-expr [ `||' logical-and-expr ] ... logical-and-expr ::= inclusive-or-expr [&&inclusive-or-expr ] ... inclusive-or-expr ::= exclusive-or-expr [ `|' exclusive-or-expr ] ... exclusive-or-expr ::= and-expr [^and-expr ] ... and-expr ::= equality-expr [&equality-expr ] ... equality-expr ::= relational-expr [==relational-expr] ... | relational-expr [!=relational-expr] ... relational-expr ::= shift-expr<shift-expr | shift-expr>shift-expr | shift-expr<=shift-expr | shift-expr>=shift-expr | shift-expr<:shift-expr | shift-expr [instanceoftype-spec ] shift-expr ::= additive-expr [ shift-op additive-expr ] ... shift-op ::=<<|>>|>>>additive-expr ::= mult-expr [ additive-op mult-expr ] ... additive-op ::=+|-mult-expr ::= unary-expr [ mult-op unary-expr ] ... mult-op ::=*|/|%unary-expr ::=(type-spec)unary-expr |+unary-expr |-unary-expr | unary-expr-not-plus-minus unary-expr-not-plus-minus ::=~unary-expr |!unary-expr |(built-in-type)unary-expr |(reference-type)unary-expr-not-plus-minus | postfix-expr postfix-expr ::= primary-expr [ primary-suffix ] ... | built-in-type [ `[' `]' ] ....classprimary-suffix ::=.#nat |.super([ expression-list ])|.ident([ expression-list ])| `[' expression `]' | [ `[' `]' ] ....classprimary-expr ::=lv[nat]| | ident | constant |super|true|false|this|null|(expression)| jml-primary | bml-primary built-in-type ::=void|boolean|byte|char|short|int|long|float|doubleconstant ::= java-literal type-spec ::= [ ownership-modifier ] type [ dims ] |\TYPE[ dims ] type ::= reference-type | built-in-type reference-type ::= name dims ::= `[' `]' [ `[' `]' ] ... jml-primary ::= result-expression | old-expression | fresh-expression | nonnullelements-expression | typeof-expression | elemtype-expression | type-expression | spec-quantified-expr bml-primary ::= cntr-expression | stack-expression | arraylength-expression cntr-expression ::=\cntrstack-expression ::=\st(additive-expr)arraylength-expression ::=\length(expression)