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