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 ")"