C2 Interface Definition Notation BNF
component ::=
new_component | component_subtype
new_component ::=
component component_name is
interface
component_message_interface
parameters
component_parameters
methods
component_methods
behavior
component_behavior
context
component_context
end component_name;
component_subtype ::=
subtype_name is_subtype
internal_block <= internal_block
supertype_name (type_conformance_expression);
{internal_block <= internal_block
supertype_name (type_conformance_expression);}
end_subtype;
internal_block ::=
all | domain_translator | dialog | object
type_conformance_expression ::=
type_conformance {binary_operator [not] type_conformance}
type_conformance ::=
nam | int | imp | beh
component_message_interface ::=
top_domain_interface
bottom_domain_interface
top_domain_interface ::=
top_domain is
out
interface_requests
in
interface_notifications
bottom_domain_interface ::=
bottom_domain is
out
interface_notifications
in
interface_requests
interface_requests ::=
{request;} | null;
interface_notifications ::=
{notification;} | null;
request ::=
message_name (request_parameters)
request_parameters ::=
[to component_name;] [parameter_list]
notification ::=
message_name ([parameter_list])
component_parameters ::=
parameter_list; | null;
component_methods ::=
method_declaration {method_declaration} | null;
method_declaration ::=
procedure method_name [parameter_list];
| function method_name [parameter_list] return type_name;
component_behavior ::=
[startup]
[cleanup]
{internal_state_change | message_transition}
startup ::=
startup
[invoked_methods]
generated_messages
cleanup ::=
cleanup
[invoked_methods]
generated_messages
internal_state_change ::=
internal_state_change
[invoked_methods]
generated_messages
message_transition ::=
received_messages
[invoked_methods]
generated_messages
received_messages ::=
received_messages
[notification_sequence]
[request_sequence]
invoked_methods ::=
invoke_methods
method_name {, method_name};
generated_messages ::=
[message_generation_frequency
request_sequence]
[message_generation_frequency
notification_sequence]
message_generation_frequency ::=
always_generate | may_generate
request_sequence ::=
request_name {binary_operator request_name};
notification_sequence ::=
notification_name {binary_operator notification_name};
binary_operator ::=
and | or | xor
component_context ::=
[architectural_location] component_type;
architectural_location ::=
top_most | internal | bottom_most
component_type ::=
ADT | computational_unit | artist | server
parameter_list ::=
identifier_list : type_name {; identifier_list : type_name}
identifier_list ::=
identifier {, identifier}
type_name ::=
identifier
identifier ::=
letter {[_] letter_or_digit}
letter_or_digit ::=
letter | digit