Following is BNF syntax for IBDL. Keywords are given boldface. { ... }
represents zero or more elements and optional elements are given within [ ... ] .
specification_module ::=
specification module_name ``{''
{ interface_declaration | exception_declaration }
``}''
interface_declaration ::=
interface interface_name semantics ``{''
{ message_declaration }
``}''
exception_declaration ::=
exception exception_name ``{''
{ variable_declaration ``;'' }
``}''
variable_declaration ::= type_name variable_name
type_name ::=
boolean | char | int | String | void | interface_name
message_declaration ::=
type_name message_name
``('' [ param_list ] ``)''
[ exception_specification ]
{ ``{'' behavior_specification ``}'' | ``;'' }
param_list ::=
variable_declaration { ``,'' variable_declaration }
exception_specification ::= raises ``('' exception_list ``)''
exception_list ::=
exception_name { ``,'' exception_name }
behavior_specification ::=
{ ( normal | abnormal )
[ defined by expression ]
{ ( enables_clause | disables_clause ) }
[ interpretations ]
}
enables_clause ::=
enables { message [ if expression ] }
disables_clause ::=
disables { message [ if expression ] }
interpretations ::=
interpretations { message ``='' expression
[ if expression ] }
message ::=
[ expression ``.''] message_name
``('' [ actual_param_list ] ``)''
actual_param_list ::= expression { ``,'' expression }
expression ::= message
| binary_expression
| unary_expression
| sequence_expression
| variable_name
| raised_expression
binary_expression ::=
expression binary_op expression
binary_op ::=
``.'' | ``+'' | ``-'' | ``/'' | ``<'' | ``>'' | ``<='' | ``>=''
| and | or
unary_expression ::= unary_op expression
unary_op ::= ``-'' | not | ``@''
sequence_expression ::=
enabled "(" message ")"
| ``#'' ``('' message_name ``)''
| param ``('' expression ``,'' expression ``,'' expression ``)''
raised_expression ::= raised "(" exception_name ")"