C2 Architecture Description Notation BNF


architecture ::= architecture architecture_name is conceptual_components conceptual_component_list [connectors connector_list] [architectural_topology topology] end architecture_name; system ::= system system_name is architecture architecture_name with component_instance_list end system_name;
conceptual_component_list ::= top_most {component_name;} internal {component_name;} bottom_most {component_name;}
component_instance_list ::= conceptual_component_name is_bound_to concrete_component_expression {concrete_component_expression} {conceptual_component_name is_bound_to concrete_component_expression {concrete_component_expression}} concrete_component_expression ::= concrete_component_name [with (parameter_instantiation)]; parameter_instantiation ::= identifier <= value {; identifier <= value}
connector_list ::= {connector;} connector ::= connector connector_name is message_filter message_filter_type; end connector_name; message_filter_type ::= no_filtering | notification_filtering | prioritized | message_sink
topology ::= {connector connector_name connections top_ports connection_sequence bottom_ports connection_sequence} connection_sequence ::= connection; {connection;} | null; connection ::= architecture_element_name [where [not] connection_constraint] [message_filter port_message_filter_type] [domain_translation {domain_translation_tuples}] architecture_element_name ::= conceptual_component_name | connector_name connection_constraint ::= message_sequence | boolean_expression | environment_command message_sequence ::= message {, message} message ::= notification | request port_message_filter_type ::= no_filtering | notification_filtering | message_sink domain_translation_tuples ::= (component_name.request to component_name.request); | (component_name.notification to component_name.notification);