model = [title] system title = system sys_id “;” system = server_view | agent_view server_view = server_types [ agent_types_list ] variables server_view_init agent_view = server_headers agent_types varibles agent_view_init server_types = { server_type } server_type = server_header actions “;” server_header = server_relations elements server_relations = server “:” serv_type_id “(“ server_formal_pars “),” server_formal_pars = formal_pars_servers “;” formal_pars_agents | formal_pars_agents “;” formal_pars_servers formal_pars_servers = servers servers_formal_pars_list formal_pars_agents = agents agents_formal_pars_list servers_formal_pars_list = server_formal_par { “,” server_formal_par } agents_formal_pars_list = agent_formal_par { “,” agent_formal_par } server_formal_par = server_formal_par_id [ “[” vector_size “]” ] [ “:” server_type_id ] | server_formal_par_id [ “[” vector_size “]” ] “:” “self” agent_formal_par = agent_formal_par_id [ “[” vector_size “]” ] [ “:” agent_type_id ] | agent_formal_par_id [ “[” vector_size “]” ] “:” “self” elements = states services | services states states = states “{” state_list “},” services = services “{” service_list “},” state_list = state_def { “,” state_def } service_list = service_def> { “,”service_def } state_def = state_id [ “[” vector_size “]” ] service_def = service_id> [ “[” vector_size “]” ] actions = actions “{” action_list “},” action_list = action { action } action = [ condition ] [ repeaters ] input -> output “,” condition = “?” instance_number repeaters = repeater | repeater repeater | repeater repeater repeater repeater = “<” repeater_id lower_limit “..” upper_limit “>” input = “{” message “,” serv_state “}” output = “{” message “,” serv_state “}” | “{” serv_state “}” message = agent_term “.” server_term “.” service_term serv_state = server_term “.” state_term agent_term = agent_id [ “[” index “]” ] server_term = server_id [ “[” index “]” ] service_term = service_id [ “[” expression “]” ] state_term = state_id [ “[” expression “]” ] agent_types_list = agent “:” agent_types_id_list “;” agent_types_id_list = agent_type_id { “,” agent_type_id } variables = server_variables agent_variables | agent_variables server_variables server_variables = servers server_variable_list “;” agent_variables = agents agent_variable_list “;” server_variable_list = server_decl { “,” server_decl } server_decl = server_id [ “[” vector_size “]” ] [ “:” server_type_id ] agent_variable_list = agent_decl { “,” agent_decl } agent_decl = agent_id [ “[” vector_size “]” ] [ “:” agent_type_id ] server_view_init = init “->” “{” “}” server_view_init_list = server_view_init { server_view_init } server_view_init = server_view_server_init server_view_agent_init | server_view_agent_init server_view_server_init server_view_server_init = repeater server_id “[” index “]” “(” server_view_parameter_list “).” server_init “,” | server_id “(” server_view_parameter_list “).” server_init “,” server_view_agent_init = repeater agent_id “[” index “]” “.” agent_init “,” | agent_id “.” agent_init “,” server_view_parameter_list = server_view_parameter { “,” server_view_parameter } server_view_parameter = server_parameter | agent_parameter server_parameter = server_id [ “[” index_list “]” ] agent_parameter = agent_id [ “[” index_list “]” ] index_list = index { “,” index } | index “..” index server_init = state_id [ “[” index “]” ] agent_init = server_id [ “[” index “]” ] “.” service_id [ “[” index “]” ] server_headers = server_header “;” { server_header “;” } agent_types = agent_type { agent_type } agent_type = agent_header actions “;” agent_header = agent “:” agent_type_id “(” formal_pars_servers “),” agent_view_init = init “->” “{” agent_view_init_list “}” agent_view_init_list = agent_view_init { agent_view_init } agent_view_init = agent_view_server_init agent_view_agent_init | agent_view_agent_init agent_view_server_init agent_view_server_init = repeater server_id “[” index “]” “.” server_init “,” | server_id “.” server_init “,” agent_view_agent_init = repeater agent_id “[” index “]” “(” agent_view_parameter_list “).” agent_init “,” | agent_id “(” agent_view_parameter_list “).” agent_init “,” agent_view_parameter_list = agent_view_parameter { “,” agent_view_parameter } agent_view_parameter = server_parameter system_id = identifier server_type_id = identifier agent_type_id = identifier server_formal_par_id = identifier agent_formal_par_id = identifier server_id = identifier agent_id = identifier state_id = identifier service_id = identifier repeater_id = identifier lower_limit = number upper_limit = number vector_size = number instance_number = number expression = number | repeater_id | number operator number | repeater_id operator number | number operator repeater_id operator = “+” | “-” number = digit { digit } identifier = letter { character } digit = “0” .. ”9” letter = “A” .. “Z” | “a” .. “z” character = letter | digit | “_” Changes in Timed IMDS: system = server_view server_view = server_types [ agent_types_list ] variables [ channels ] server_view_init channels = channels “;” | channels “{” delays “}” delays = delay [ “,” delay ] delay = constraint | server_ spec constraint | server_spec “->” server_spec constraint server_spec = server_id [ “[” server_subrange “]” ] server_ subrange = number | “-” number | number “%” number | “-” number “%” number elements = states services [ bounds ] | services states [ bounds ] bounds = bounds “{” bound { “,” bound } “}” bound = [ condition ] “?” clk “(” bound finishing_bracket state_id [ “[” index “]” ] “)” action = [ condition ] [ restriction ] [ reset ] [ repeaters ] input -> [ duration ] output “,” condition = “?” restriction = “?” clk duration = constraint constraint = starting_bracket number [ “,” number ] finishing_bracket starting_bracket = “(” | “<” finishing_bracket = “)” | “>” reset = “!”