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