January 28, 2016

Syntax

Common syntax

<digit_above_zero> ::= 1|2|3|4|5|6|7|8|9

<digit> ::= 0|<digit_above_zero>

<letter> ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z

<identifier> ::= <first_identifier_sign> | <first_identifier_sign> <identifier_last_part>

<identifier_last_part> ::= <identifier_sign> | <identifier_last_part> <identifier_sign>

<first_identifier_sign> ::= _ | <letter>

<identifier_sign> ::= _ | <letter> | <digit>

<qualified_identifier> ::= <identifier> <qualified_parts>

<qualified_parts> ::= . <integer> | <qualified_parts> . <integer>

<identifiers_list> ::= <identifier> | <identifiers_list> , <identifier>

<qualified_identifiers_list> ::= <identifier> | <qualified_identifier> | <qualified_identifiers_list> <identifier> | <qualified_identifiers_list> <qualified_identifier>

<text> ::= <text_sign> | <text> <text_sign>

<text_sign> ::= <letter> | <digit> | _ | – | ” ”

<integer> ::= <digit_above_zero> | <digit_above_zero> <integer_digits>

<integer_digits> ::= <digit> | <integer_digits> <digit>

<float> ::= <integer> | <integer> . <integer_digits>

<optional_semicolon> ::= “” | ;

Model syntax

<model> ::= <specification>

<specification> ::= <module_specyfication> | <specification><module_specification>

<module_specification> ::= <functions_specification> | <equations_specification> | <channels_specification> | <hosts_specification> | <versions_specification> | <init_specification> | <metrics_specification>

Functions syntax

<functions_specification> ::= functions { <functions> }

<functions> ::= <function> | <functions><function>

<function> ::= fun <identifier> ( <identifiers_list> ) <function_qop_params><function_comment> ;

<function_qop_params> ::= “” | [ <qop_params_list> ]

<qop_params_list> ::= <qop_param> | <qop_params_list><qop_param>

<qop_param> ::= <identifier> : <identifiers_list>

<function_comment> ::= “” | ( <text> )

Equations syntax

<equations_specification> ::= equations { <equations> }

<equations> ::= <equation> | <equations><equation>

<equation> ::= eq <equation_complex_expression> = <equation_simple_expression> ;

<equation_complex_expression> ::= <identifier> ( <equation_fun_call_params> )

<equation_simple_expression> ::= <identifier> | true | false

<equation_fun_call_params> ::= “” | <equation_expression> | <equation_fun_call_params><equation_expression>

<equation_expression> ::= <identifier> ( <equation_fun_call_params> ) | <identifier> | true | false

Channels syntax

<channels_specification> ::= channels { <channels> }

<channels> ::= <channel> | <channels><channel>

<channel> ::= ch <identifiers_list> ( <channel_buffer> ) [ <channel_bandwidth> ] ;

<channel_buffer> ::= <integer> | *

<channel_bandwidth> ::= <integer><bit_multiplier> | <float><bit_multiplier>

Hosts syntax (protocol flow syntax)

<hosts_specification> ::= hosts { <hosts> }

<hosts> ::= <host> | <hosts><host>

<host> ::= host <identifier> <scheduling_algorithm> ( <channel_params> ) { <host_predefined_values> <host_body> }

<scheduling_algorithm> ::= fifo | rr

<channel_params> ::= * | <identifiers_list>

<host_predefined_values> ::= “” | <host_predefined_values_list>

<host_predefined_values_list> ::= <host_predefined_value> ; | <host_predefined_values_list><host_predefined_value> ;

<host_predefined_value> ::= # <instruction_assignment>

<host_body> ::= <host_body_element> | <host_body><host_body_element>

<host_body_element> ::= <host_process><optional_semicolon>

<host_process> ::= process <identifier> ( <channel_params> ) { <instructions_list> }

<instructions_list> ::= <instruction> | <instructions_list><instruction>

<instruction> ::= <instruction_assignment> ; | <instruction_channel> ; | <instruction_if><optional_semicolon> | <instruction_while><optional_semicolon> | <instruction_continue> ; | <instruction_stop> ; | <instruction_end> ; | <instruction_fun_call> ; | <host_subprocess><optional_semicolon>

<host_subprocess> ::= subprocess <identifier> ( <channels_params> ) { <instructions_list> }

<instruction_assignment> ::= <identifier> = <expression_simple>

<instruction_channel> ::= in ( <identifier> : <identifiers_list> ) | out ( <identifier> : <identifiers_list> )

<instruction_if> ::= if ( <expression_logic> ) { <instructions_list> } | if ( <expression_logic> ) { <instructions_list> } else { <instructions_list> }

<instruction_while> ::= while ( <expression_logic> ) { <instructions_list> }

<instruction_continue> ::= continue

<instruction_stop> :: = stop

<instruction_end> :: = end

<instruction_fun_call> ::= <identifier> ( <fun_call_args> ) <fun_call_qop_args>

<fun_call_args> ::= “” | <fun_call_args_list>

<fun_call_args_list> ::= <expression_simple> | <fun_call_args_list> , <expression_simple>

<fun_call_qop_args> ::= “” | [ <fun_call_qop_args_list> ]

<fun_call_qop_args_list> ::= <text> | <fun_call_qop_args_list> , <text>

<expression_simple> ::= <instruction_fun_call> | <expression_tuple_element> | <identifier> | <expresstion_tuple> | true | false

<expression_tuple_element> ::= <identifier> [ <integer> ]

<expresstion_tuple> ::= ( <fun_call_args_list> )

<expression_logic> ::= <expression_comparison> | true | false

<expression_comparison> ::= <expression_simple> == <expression_simple>

Versions syntax

<versions_specification> ::= versions { <versions> }

<versions> ::= <version> | <versions> <version>

<version> ::= version <identifier> { <versions_run_hosts> }

<versions_run_hosts> ::= <version_run_hosts> | <versions_run_hosts> <version_run_hosts>

<version_run_hosts> ::= run host <identifier> ( <channel_params> ) { } | run host <identifier> ( <channel_params> ) { <version_run_processes> } | host <identifier> ( <channel_params> ) { <integer> } <run_def_channels> { <version_run_processes> }

<version_run_processes> ::= <version_run_process> | <version_run_processes> <version_run_process>

<version_run_process> ::= <version_run_process_base> | <version_run_process_base> -> <version_run_process_follower>

<version_run_process_base> ::= run <identifier> ( <run_subprocesses_list> ) | run <identifier> ( <run_subprocesses_list> ) { <integer> } <run_def_channels>

<version_run_process_follower> ::= ::= run <identifier> ( <run_subprocesses_list> )

<run_subprocesses_list> ::= * | <identifiers_list>

<run_def_channels> ::= “” | [ <qualified_identifiers_list> ]

Initialization syntax

<init_specification> ::= init { version <integer> }

Metrics syntax

<metrics_specification> ::= metrics { <metrics_confs> <metrics_datas> <metrics_sets> }

<metrics_confs> ::= <metrics_conf> | <metrics_confs> <metrics_conf>

<metrics_conf> ::= conf ( <identifier> ) { <metrics_conf_specs> }

<metrics_conf_specs> ::= <metrics_conf_spec> | <metrics_conf_specs> <metrics_conf_spec>

<metrics_conf_spec> ::= <identifier> = <text> ;

<metrics_datas> ::= <metrics_data> | <metrics_datas> <metrics_data>

<metrics_data> ::= data ( <identifier> ) { <metrics_primitive_blocks> } | data + ( <qualified_identifier> ) { <metrics_primitive_blocks> } | data * ( <qualified_identifier> ) { <metrics_primitive_blocks> }

<metrics_primitive_blocks> ::= <metrics_primitive_block> | <metrics_primitive_blocks> <metrics_primitive_block>

<metrics_primitive_block> ::= <metrics_primitive_head> <metrics_primitives>

<metrics_primitive_head> ::= primhead <metrics_params> <metrics_services_params> ;

<metrics_params> ::= <metrics_param> | <metrics_params> <metrics_param>

<metrics_param> ::= [ <identifier> ]

<metrics_services_params> ::= <metrics_services_param> | <metrics_services_params> <metrics_services_param>

<metrics_services_param> ::= [ <identifier> ] : <metrics_services_param_name> ]

<metrics_services_param_name> ::= <identifier> | <identifier> ( <identifier> ) | <identifier> ( <identifier> : <identifier> )

<metrics_primitives> ::= <metrics_primitive> | <metrics_primitives> <metrics_primitive>

<metrics_primitive> ::= primitive <metrics_args> ;

<metrics_args> ::= <metrics_arg> | <metrics_args> <metrics_arg>

<metrics_arg> ::= [ <text> ]

<metrics_sets> ::= <metrics_set> | <metrics_sets> <metrics_set>

<metrics_set> ::= set host <identifier> ( <identifier> ) ; | set host <identifier> ( <qualified_identifier> ) ;

Modules syntax

TIME ANALYSIS MODULE SYNTAX