module Aadl_ast: sig
.. end
The AADL Abstract Syntax Tree definition.
Time-stamp: <modified the 05/06/2007 (at 10:45) by Erwan Jahier>
Author(s): Louis Mandel, Erwan Jahier
Package
type
package = {
}
AADL declaration
AADL declarations are components or port groups.
component ::=
category [implementation] component_identifier
extends component_identifier
[ features ( { feature | feature_refinement }+ | none ) ]
[ refines type ( { feature_refinement }+ | none ) ]
[ subcomponents ( { subcomponent }+ | none ) ]
[ calls ( { subprogram_call_sequence }+ | none ) ]
[ connections ( { connection }+ | none ) ]
[ flows ( { flow }+ | none ) ]
[ modes ( { mode }+ | none ) ]
[ properties ( { property }+ | none ) ]
{ annex_subclause }*
end component_identifier;
port_group ::=
port group defining_identifier
[ extends unique_port_group_type_reference ]
( features
{ port_spec | port_refinement |
port_group_spec | port_group_refinement }*
[ inverse of unique_port_group_type_reference ]
|
inverse of unique_port_group_type_reference
)
[ properties ( { portgroup_property_association }+ | none ) ]
{ annex_subclause }*
end defining_identifier ;
type
aadl_declaration =
type
component = {
}
type
port_group = {
}
type
component_kind =
type
category =
| |
Data |
| |
Subprogram |
| |
Thread |
| |
Thread_group |
| |
Process |
| |
Processor |
| |
Memory |
| |
Bus |
| |
Device |
| |
System |
Feature
feature ::=
defining_identifier : feature_kind
[ { { port_property_association }+ } ] ;
feature_kind ::=
( ( in | out | in out ) port_type)
| port group [ unique_port_group_type_reference ]
| subprogram [ classifier_reference ]
| ( provides | requires ) ( data | bus ) access [ identifier ]
| ( in | out | in out ) parameter [ classifier_reference ]
port_type ::=
data port [ data_classifier_reference ]
| event data port [ data_classifier_reference ]
| event port
type
feature = Ident.t * feature_kind * property_association list
type
feature_kind =
type
in_out_flag =
type
unique_port_group_type_reference = Ident.t
type
classifier_reference = Ident.t
type
unique_subprogram_reference = Ident.t
type
access_kind =
Feature refinement
type
feature_refinement
TODO
Subcomponent
subcomponent ::=
defining_subcomponent_identifier :
component_category [ component_classifier_reference ]
[ { { property_association }+ } ]
[ in_modes ] ;
type
subcomponent = Ident.t * category * classifier_reference option *
property_association list
Calls
subprogram_call_sequence ::=
[ identifier : ]
{ { subprogram_call }+ } [ in_modes ] ;
subprogram_call ::=
defining_call_identifier : subprogram called_subprogram
[ { { subcomponent_call_property_association }+ } ] ;
type
call_sequence = Ident.t option *
(Ident.t * Ident.t * property_association list) list
Connection
connection ::=
[ defining_connection_identifier :] connection_kind
source_identifier ( -> | ->> ) destination_identifier
[ { { property_association }+ } ]
[ in_modes_and_transitions ] ;
type
connection = Ident.t option * connection_kind * Ident.t *
connection_arrow * Ident.t * property_association list
type
connection_kind =
| |
Conn_data_port |
| |
Conn_event_port |
| |
Conn_event_data_port |
| |
Conn_port_group |
| |
Conn_parameter |
| |
Conn_bus_access |
| |
Conn_data_access |
type
connection_arrow =
| |
Conn_arrow |
| |
Conn_delayed_arrow |
Flow
flow ::=
flow_spec
| flow_implementation
flow_spec ::=
identifier :
( ( flow source identifier
| flow path identifier -> identifier
| flow sink identifier )
[ { { property_association }+ } ] ;
| refined to flow (source | sink | path) { { property_association }+ })
type
flow =
type
flow_kind =
| |
Flow_source of Ident.t |
| |
Flow_sink of Ident.t |
| |
Flow_path of Ident.t * Ident.t |
| |
Flow_refined_source |
| |
Flow_refined_sink |
| |
Flow_refined_path |
type
flow_impl_kind =
Mode
type
mode
TODO
Property
property_association ::=
identifier ( => | +=> ) [ constant ] [ access ] property_value
[ applies to identifier [ in_modes ] [ in_bindings ] ];
type
property = property_association
type
property_association = Ident.t * property_arrow * property_value * Ident.t option
TODO : constant, access, in_modes, in_bindings
type
property_arrow =
| |
Prop_arrow |
| |
Prop_plus_arrow |
type
property_value = property_expression list
type
property_expression =
type
immediate =
type
immediate_expression =
type
aadl_intger_or_constant =
type
aadl_real_or_constant =
Annex
type
annex
TODO
val category_to_string : category -> string