Forráskód Böngészése

Prevent the model constructors from propagating IDs as well

Yentl Van Tendeloo 9 éve
szülő
commit
bedbb0c8ae

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 5670 - 4600
bootstrap/bootstrap.m


+ 20 - 15
bootstrap/modelling.alc

@@ -3,6 +3,7 @@ include "io.alh"
 include "object_operations.alh"
 include "constructors.alh"
 include "metamodels.alh"
+include "library.alh"
 
 Element global_models = ?
 
@@ -373,38 +374,42 @@ Void function construct_model():
 		if (command == "instantiate_bottom"):
 			Element m
 			m = instantiate_bottom()
-			set_add(global_models, m)
-			output(m)
+			dict_add(global_models, input(), m)
 		elif (command == "add_node"):
-			model_add_node(input(), input())
+			model_add_node(global_models[input()], input())
 		elif (command == "add_value"):
-			model_add_value(input(), input(), input())
+			model_add_value(global_models[input()], input(), input())
 		elif (command == "add_edge"):
-			model_add_edge(input(), input(), input(), input())
+			model_add_edge(global_models[input()], input(), input(), input())
 		elif (command == "exit"):
 			return
 		elif (command == "retype_model"):
-			retype_model(input(), input())
+			retype_model(global_models[input()], global_models[input()])
 		elif (command == "retype"):
-			retype(input(), input(), input())
+			retype(global_models[input()], input(), input())
 		elif (command == "instantiate_model"):
 			Element m
-			m = instantiate_model(input())
-			set_add(global_models, m)
-			output(m)
+			m = instantiate_model(global_models[input()])
+			dict_add(global_models, input(), m)
 		elif (command == "instantiate_node"):
-			instantiate_node(input(), input(), input())
+			instantiate_node(global_models[input()], input(), input())
 		elif (command == "instantiate_attribute"):
-			instantiate_attribute(input(), input(), input(), input())
+			instantiate_attribute(global_models[input()], input(), input(), input())
 		elif (command == "instantiate_link"):
-			instantiate_link(input(), input(), input(), input(), input())
+			instantiate_link(global_models[input()], input(), input(), input(), input())
 		elif (command == "define_inheritance"):
-			define_inheritance(input(), input())
+			define_inheritance(global_models[input()], input())
 		elif (command == "add_constraint"):
-			add_constraint(input(), input(), construct_function())
+			add_constraint(global_models[input()], input(), construct_function())
 		elif (command == "initialize_SCD"):
 			initialize_SCD(input())
 		elif (command == "initialize_bottom"):
 			initialize_bottom(input())
+		elif (command == "export_node"):
+			String local_name
+			String location
+			local_name = input()
+			location = input()
+			export_node(location, global_models[local_name])
 		else:
 			log("Modelling error: did not understand command " + command)

+ 0 - 2
hybrid_server/classes/mvkcontroller.xml

@@ -178,8 +178,6 @@
                                         continue
                                     self.users.add(name)
                                 self.timeout = self.all_failed
-                                if self.timeout:
-                                    print("FAILED ALL")
                                 self.all_failed = True
                         </script>
                     </onentry>

+ 210 - 205
integration/test_constructors_models.py

@@ -15,176 +15,177 @@ def flatten(lst):
 
 bottom = [
         '"model"',
-        '"instantiate_bottom"', 1,
-        '"add_node"', 1, '"Class"',
-        '"add_node"', 1, '"Any"',
-        '"add_node"', 1, '"String"',
-        '"add_value"', 1, '"name"', '"name"',
-        '"add_edge"', 1, '"Association"', '"Class"', '"Any"',
-        '"add_edge"', 1, '"Inheritance"', '"Class"', '"Class"',
-        '"add_edge"', 1, '"Association_attribute"', '"Association"', '"String"',
-        '"add_edge"', 1, '"Association_name"', '"Association_attribute"', '"name"',
-        '"add_edge"', 1, '"assoc_inh_class"', '"Association"', '"Class"',
-        '"add_edge"', 1, '"class_inh_any"', '"Class"', '"Any"',
-        '"add_edge"', 1, '"string_inh_any"', '"String"', '"Any"',
-        '"retype_model"', 1, 1,
-        '"define_inheritance"', 1, '"Inheritance"',
-        '"retype"', 1, '"Class"', '"Class"',
-        '"retype"', 1, '"Any"', '"Class"',
-        '"retype"', 1, '"String"', '"Class"',
-        '"retype"', 1, '"name"', '"String"',
-        '"retype"', 1, '"Association"', '"Association"',
-        '"retype"', 1, '"Inheritance"', '"Association"',
-        '"retype"', 1, '"Association_attribute"', '"Association"',
-        '"retype"', 1, '"Association_name"', '"Association_attribute"',
-        '"retype"', 1, '"assoc_inh_class"', '"Inheritance"',
-        '"retype"', 1, '"class_inh_any"', '"Inheritance"',
-        '"retype"', 1, '"string_inh_any"', '"Inheritance"',
+        '"instantiate_bottom"', '"1"',
+        '"add_node"', '"1"', '"Class"',
+        '"add_node"', '"1"', '"Any"',
+        '"add_node"', '"1"', '"String"',
+        '"add_value"', '"1"', '"name"', '"name"',
+        '"add_edge"', '"1"', '"Association"', '"Class"', '"Any"',
+        '"add_edge"', '"1"', '"Inheritance"', '"Class"', '"Class"',
+        '"add_edge"', '"1"', '"Association_attribute"', '"Association"', '"String"',
+        '"add_edge"', '"1"', '"Association_name"', '"Association_attribute"', '"name"',
+        '"add_edge"', '"1"', '"assoc_inh_class"', '"Association"', '"Class"',
+        '"add_edge"', '"1"', '"class_inh_any"', '"Class"', '"Any"',
+        '"add_edge"', '"1"', '"string_inh_any"', '"String"', '"Any"',
+        '"retype_model"', '"1"', '"1"',
+        '"define_inheritance"', '"1"', '"Inheritance"',
+        '"retype"', '"1"', '"Class"', '"Class"',
+        '"retype"', '"1"', '"Any"', '"Class"',
+        '"retype"', '"1"', '"String"', '"Class"',
+        '"retype"', '"1"', '"name"', '"String"',
+        '"retype"', '"1"', '"Association"', '"Association"',
+        '"retype"', '"1"', '"Inheritance"', '"Association"',
+        '"retype"', '"1"', '"Association_attribute"', '"Association"',
+        '"retype"', '"1"', '"Association_name"', '"Association_attribute"',
+        '"retype"', '"1"', '"assoc_inh_class"', '"Inheritance"',
+        '"retype"', '"1"', '"class_inh_any"', '"Inheritance"',
+        '"retype"', '"1"', '"string_inh_any"', '"Inheritance"',
+        '"export_node"', '"1"', '"models/SimpleClassDiagrams"',
         '"exit"',
     ]
 
 action_language = [
         '"model"',
-        '"instantiate_node"', 1, '"Class"', '"Action"',
-        '"instantiate_node"', 1, '"Class"', '"Statement"',
-        '"instantiate_node"', 1, '"Class"', '"Expression"',
-        '"instantiate_node"', 1, '"Class"', '"funcdef"',
-        '"instantiate_node"', 1, '"Class"', '"param"',
-        '"instantiate_node"', 1, '"Class"', '"if"',
-        '"instantiate_node"', 1, '"Class"', '"break"',
-        '"instantiate_node"', 1, '"Class"', '"while"',
-        '"instantiate_node"', 1, '"Class"', '"continue"',
-        '"instantiate_node"', 1, '"Class"', '"assign"',
-        '"instantiate_node"', 1, '"Class"', '"return"',
-        '"instantiate_node"', 1, '"Class"', '"output"',
-        '"instantiate_node"', 1, '"Class"', '"declare"',
-        '"instantiate_node"', 1, '"Class"', '"global"',
-        '"instantiate_node"', 1, '"Class"', '"access"',
-        '"instantiate_node"', 1, '"Class"', '"constant"',
-        '"instantiate_node"', 1, '"Class"', '"input"',
-        '"instantiate_node"', 1, '"Class"', '"resolve"',
-        '"instantiate_node"', 1, '"Class"', '"call"',
-        '"instantiate_link"', 1, '"Association"', '"dict_link"', '"Action"', '"Any"',
-        '"instantiate_link"', 1, '"Association"', '"to_str"', '"dict_link"', '"String"',
-        '"instantiate_attribute"', 1, '"to_str"', '"name"', '"name"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"Action"', '"Any"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"funcdef"', '"Action"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"param"', '"Action"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"Statement"', '"Action"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"Expression"', '"Action"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"resolve"', '"Statement"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"if"', '"Statement"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"break"', '"Statement"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"continue"', '"Statement"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"global"', '"Statement"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"while"', '"Statement"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"assign"', '"Statement"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"return"', '"Statement"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"call"', '"Statement"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"declare"', '"Statement"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"call"', '"Expression"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"access"', '"Expression"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"constant"', '"Expression"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"input"', '"Expression"',
-        '"instantiate_link"', 1, '"Association"', '"statement_next"', '"Statement"', '"Statement"',
-        '"instantiate_attribute"', 1, '"statement_next"', '"name"', '"next"',
-        '"instantiate_link"', 1, '"Association"', '"if_cond"', '"if"', '"Expression"',
-        '"instantiate_attribute"', 1, '"if_cond"', '"name"', '"cond"',
-        '"instantiate_link"', 1, '"Association"', '"if_then"', '"if"', '"Statement"',
-        '"instantiate_attribute"', 1, '"if_then"', '"name"', '"true"',
-        '"instantiate_link"', 1, '"Association"', '"if_else"', '"if"', '"Statement"',
-        '"instantiate_attribute"', 1, '"if_else"', '"name"', '"false"',
-        '"instantiate_link"', 1, '"Association"', '"while_cond"', '"while"', '"Expression"',
-        '"instantiate_attribute"', 1, '"while_cond"', '"name"', '"cond"',
-        '"instantiate_link"', 1, '"Association"', '"while_body"', '"while"', '"Statement"',
-        '"instantiate_attribute"', 1, '"while_body"', '"name"', '"body"',
-        '"instantiate_link"', 1, '"Association"', '"assign_var"', '"assign"', '"Any"',
-        '"instantiate_attribute"', 1, '"assign_var"', '"name"', '"var"',
-        '"instantiate_link"', 1, '"Association"', '"assign_value"', '"assign"', '"Expression"',
-        '"instantiate_attribute"', 1, '"assign_value"', '"name"', '"value"',
-        '"instantiate_link"', 1, '"Association"', '"break_while"', '"break"', '"while"',
-        '"instantiate_attribute"', 1, '"break_while"', '"name"', '"while"',
-        '"instantiate_link"', 1, '"Association"', '"continue_while"', '"continue"', '"while"',
-        '"instantiate_attribute"', 1, '"continue_while"', '"name"', '"while"',
-        '"instantiate_link"', 1, '"Association"', '"return_value"', '"return"', '"Expression"',
-        '"instantiate_attribute"', 1, '"return_value"', '"name"', '"value"',
-        '"instantiate_link"', 1, '"Association"', '"resolve_var"', '"resolve"', '"Any"',
-        '"instantiate_attribute"', 1, '"resolve_var"', '"name"', '"var"',
-        '"instantiate_link"', 1, '"Association"', '"access_var"', '"access"', '"Any"',
-        '"instantiate_attribute"', 1, '"access_var"', '"name"', '"var"',
-        '"instantiate_link"', 1, '"Association"', '"constant_node"', '"constant"', '"Any"',
-        '"instantiate_attribute"', 1, '"constant_node"', '"name"', '"node"',
-        '"instantiate_link"', 1, '"Association"', '"output_node"', '"output"', '"Expression"',
-        '"instantiate_attribute"', 1, '"output_node"', '"name"', '"node"',
-        '"instantiate_link"', 1, '"Association"', '"global_var"', '"global"', '"String"',
-        '"instantiate_attribute"', 1, '"global_var"', '"name"', '"var"',
-        '"instantiate_link"', 1, '"Association"', '"param_name"', '"param"', '"String"',
-        '"instantiate_attribute"', 1, '"param_name"', '"name"', '"name"',
-        '"instantiate_link"', 1, '"Association"', '"param_value"', '"param"', '"Expression"',
-        '"instantiate_attribute"', 1, '"param_value"', '"name"', '"value"',
-        '"instantiate_link"', 1, '"Association"', '"param_next_param"', '"param"', '"param"',
-        '"instantiate_attribute"', 1, '"param_next_param"', '"name"', '"next_param"',
-        '"instantiate_link"', 1, '"Association"', '"funcdef_body"', '"funcdef"', '"Statement"',
-        '"instantiate_attribute"', 1, '"funcdef_body"', '"name"', '"body"',
-        '"instantiate_link"', 1, '"Association"', '"call_func"', '"call"', '"Expression"',
-        '"instantiate_attribute"', 1, '"call_func"', '"name"', '"func"',
-        '"instantiate_link"', 1, '"Association"', '"call_params"', '"call"', '"param"',
-        '"instantiate_attribute"', 1, '"call_params"', '"name"', '"params"',
-        '"instantiate_link"', 1, '"Association"', '"call_last_param"', '"call"', '"param"',
-        '"instantiate_attribute"', 1, '"call_last_param"', '"name"', '"last_param"',
+        '"instantiate_node"', '"1"', '"Class"', '"Action"',
+        '"instantiate_node"', '"1"', '"Class"', '"Statement"',
+        '"instantiate_node"', '"1"', '"Class"', '"Expression"',
+        '"instantiate_node"', '"1"', '"Class"', '"funcdef"',
+        '"instantiate_node"', '"1"', '"Class"', '"param"',
+        '"instantiate_node"', '"1"', '"Class"', '"if"',
+        '"instantiate_node"', '"1"', '"Class"', '"break"',
+        '"instantiate_node"', '"1"', '"Class"', '"while"',
+        '"instantiate_node"', '"1"', '"Class"', '"continue"',
+        '"instantiate_node"', '"1"', '"Class"', '"assign"',
+        '"instantiate_node"', '"1"', '"Class"', '"return"',
+        '"instantiate_node"', '"1"', '"Class"', '"output"',
+        '"instantiate_node"', '"1"', '"Class"', '"declare"',
+        '"instantiate_node"', '"1"', '"Class"', '"global"',
+        '"instantiate_node"', '"1"', '"Class"', '"access"',
+        '"instantiate_node"', '"1"', '"Class"', '"constant"',
+        '"instantiate_node"', '"1"', '"Class"', '"input"',
+        '"instantiate_node"', '"1"', '"Class"', '"resolve"',
+        '"instantiate_node"', '"1"', '"Class"', '"call"',
+        '"instantiate_link"', '"1"', '"Association"', '"dict_link"', '"Action"', '"Any"',
+        '"instantiate_link"', '"1"', '"Association"', '"to_str"', '"dict_link"', '"String"',
+        '"instantiate_attribute"', '"1"', '"to_str"', '"name"', '"name"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"Action"', '"Any"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"funcdef"', '"Action"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"param"', '"Action"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"Statement"', '"Action"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"Expression"', '"Action"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"resolve"', '"Statement"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"if"', '"Statement"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"break"', '"Statement"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"continue"', '"Statement"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"global"', '"Statement"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"while"', '"Statement"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"assign"', '"Statement"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"return"', '"Statement"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"call"', '"Statement"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"declare"', '"Statement"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"call"', '"Expression"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"access"', '"Expression"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"constant"', '"Expression"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"input"', '"Expression"',
+        '"instantiate_link"', '"1"', '"Association"', '"statement_next"', '"Statement"', '"Statement"',
+        '"instantiate_attribute"', '"1"', '"statement_next"', '"name"', '"next"',
+        '"instantiate_link"', '"1"', '"Association"', '"if_cond"', '"if"', '"Expression"',
+        '"instantiate_attribute"', '"1"', '"if_cond"', '"name"', '"cond"',
+        '"instantiate_link"', '"1"', '"Association"', '"if_then"', '"if"', '"Statement"',
+        '"instantiate_attribute"', '"1"', '"if_then"', '"name"', '"true"',
+        '"instantiate_link"', '"1"', '"Association"', '"if_else"', '"if"', '"Statement"',
+        '"instantiate_attribute"', '"1"', '"if_else"', '"name"', '"false"',
+        '"instantiate_link"', '"1"', '"Association"', '"while_cond"', '"while"', '"Expression"',
+        '"instantiate_attribute"', '"1"', '"while_cond"', '"name"', '"cond"',
+        '"instantiate_link"', '"1"', '"Association"', '"while_body"', '"while"', '"Statement"',
+        '"instantiate_attribute"', '"1"', '"while_body"', '"name"', '"body"',
+        '"instantiate_link"', '"1"', '"Association"', '"assign_var"', '"assign"', '"Any"',
+        '"instantiate_attribute"', '"1"', '"assign_var"', '"name"', '"var"',
+        '"instantiate_link"', '"1"', '"Association"', '"assign_value"', '"assign"', '"Expression"',
+        '"instantiate_attribute"', '"1"', '"assign_value"', '"name"', '"value"',
+        '"instantiate_link"', '"1"', '"Association"', '"break_while"', '"break"', '"while"',
+        '"instantiate_attribute"', '"1"', '"break_while"', '"name"', '"while"',
+        '"instantiate_link"', '"1"', '"Association"', '"continue_while"', '"continue"', '"while"',
+        '"instantiate_attribute"', '"1"', '"continue_while"', '"name"', '"while"',
+        '"instantiate_link"', '"1"', '"Association"', '"return_value"', '"return"', '"Expression"',
+        '"instantiate_attribute"', '"1"', '"return_value"', '"name"', '"value"',
+        '"instantiate_link"', '"1"', '"Association"', '"resolve_var"', '"resolve"', '"Any"',
+        '"instantiate_attribute"', '"1"', '"resolve_var"', '"name"', '"var"',
+        '"instantiate_link"', '"1"', '"Association"', '"access_var"', '"access"', '"Any"',
+        '"instantiate_attribute"', '"1"', '"access_var"', '"name"', '"var"',
+        '"instantiate_link"', '"1"', '"Association"', '"constant_node"', '"constant"', '"Any"',
+        '"instantiate_attribute"', '"1"', '"constant_node"', '"name"', '"node"',
+        '"instantiate_link"', '"1"', '"Association"', '"output_node"', '"output"', '"Expression"',
+        '"instantiate_attribute"', '"1"', '"output_node"', '"name"', '"node"',
+        '"instantiate_link"', '"1"', '"Association"', '"global_var"', '"global"', '"String"',
+        '"instantiate_attribute"', '"1"', '"global_var"', '"name"', '"var"',
+        '"instantiate_link"', '"1"', '"Association"', '"param_name"', '"param"', '"String"',
+        '"instantiate_attribute"', '"1"', '"param_name"', '"name"', '"name"',
+        '"instantiate_link"', '"1"', '"Association"', '"param_value"', '"param"', '"Expression"',
+        '"instantiate_attribute"', '"1"', '"param_value"', '"name"', '"value"',
+        '"instantiate_link"', '"1"', '"Association"', '"param_next_param"', '"param"', '"param"',
+        '"instantiate_attribute"', '"1"', '"param_next_param"', '"name"', '"next_param"',
+        '"instantiate_link"', '"1"', '"Association"', '"funcdef_body"', '"funcdef"', '"Statement"',
+        '"instantiate_attribute"', '"1"', '"funcdef_body"', '"name"', '"body"',
+        '"instantiate_link"', '"1"', '"Association"', '"call_func"', '"call"', '"Expression"',
+        '"instantiate_attribute"', '"1"', '"call_func"', '"name"', '"func"',
+        '"instantiate_link"', '"1"', '"Association"', '"call_params"', '"call"', '"param"',
+        '"instantiate_attribute"', '"1"', '"call_params"', '"name"', '"params"',
+        '"instantiate_link"', '"1"', '"Association"', '"call_last_param"', '"call"', '"param"',
+        '"instantiate_attribute"', '"1"', '"call_last_param"', '"name"', '"last_param"',
 
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"statement_next"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"if_cond"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"if_then"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"if_else"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"while_cond"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"while_body"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"assign_var"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"assign_value"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"break_while"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"continue_while"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"return_value"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"resolve_var"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"access_var"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"constant_node"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"output_node"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"global_var"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"param_name"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"param_value"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"param_next_param"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"funcdef_body"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"call_func"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"call_params"', '"dict_link"',
-        '"instantiate_link"', 1, '"Inheritance"', '""', '"call_last_param"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"statement_next"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"if_cond"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"if_then"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"if_else"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"while_cond"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"while_body"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"assign_var"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"assign_value"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"break_while"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"continue_while"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"return_value"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"resolve_var"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"access_var"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"constant_node"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"output_node"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"global_var"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"param_name"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"param_value"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"param_next_param"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"funcdef_body"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"call_func"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"call_params"', '"dict_link"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '""', '"call_last_param"', '"dict_link"',
 
-        '"instantiate_link"', 1, '"Association"', '"constraint"', '"Class"', '"funcdef"',
-        '"instantiate_attribute"', 1, '"constraint"', '"name"', '"constraint"',
+        '"instantiate_link"', '"1"', '"Association"', '"constraint"', '"Class"', '"funcdef"',
+        '"instantiate_attribute"', '"1"', '"constraint"', '"name"', '"constraint"',
         '"exit"',
     ]
 
 bottom_attributes = [
         '"model"',
-        '"instantiate_node"', 1, '"Class"', '"Integer"',
-        '"instantiate_link"', 1, '"Inheritance"', '"integer_inh_any"', '"Integer"', '"Any"',
-        '"instantiate_link"', 1, '"Association"', '"lc"', '"Class"', '"Integer"',
-        '"instantiate_attribute"', 1, '"lc"', '"name"', '"lower_cardinality"',
-        '"instantiate_link"', 1, '"Association"', '"uc"', '"Class"', '"Integer"',
-        '"instantiate_attribute"', 1, '"uc"', '"name"', '"upper_cardinality"',
-        '"instantiate_link"', 1, '"Association"', '"slc"', '"Association"', '"Integer"',
-        '"instantiate_attribute"', 1, '"slc"', '"name"', '"source_lower_cardinality"',
-        '"instantiate_link"', 1, '"Association"', '"suc"', '"Association"', '"Integer"',
-        '"instantiate_attribute"', 1, '"suc"', '"name"', '"source_upper_cardinality"',
-        '"instantiate_link"', 1, '"Association"', '"tlc"', '"Association"', '"Integer"',
-        '"instantiate_attribute"', 1, '"tlc"', '"name"', '"target_lower_cardinality"',
-        '"instantiate_link"', 1, '"Association"', '"tuc"', '"Association"', '"Integer"',
-        '"instantiate_attribute"', 1, '"tuc"', '"name"', '"target_upper_cardinality"',
+        '"instantiate_node"', '"1"', '"Class"', '"Integer"',
+        '"instantiate_link"', '"1"', '"Inheritance"', '"integer_inh_any"', '"Integer"', '"Any"',
+        '"instantiate_link"', '"1"', '"Association"', '"lc"', '"Class"', '"Integer"',
+        '"instantiate_attribute"', '"1"', '"lc"', '"name"', '"lower_cardinality"',
+        '"instantiate_link"', '"1"', '"Association"', '"uc"', '"Class"', '"Integer"',
+        '"instantiate_attribute"', '"1"', '"uc"', '"name"', '"upper_cardinality"',
+        '"instantiate_link"', '"1"', '"Association"', '"slc"', '"Association"', '"Integer"',
+        '"instantiate_attribute"', '"1"', '"slc"', '"name"', '"source_lower_cardinality"',
+        '"instantiate_link"', '"1"', '"Association"', '"suc"', '"Association"', '"Integer"',
+        '"instantiate_attribute"', '"1"', '"suc"', '"name"', '"source_upper_cardinality"',
+        '"instantiate_link"', '"1"', '"Association"', '"tlc"', '"Association"', '"Integer"',
+        '"instantiate_attribute"', '"1"', '"tlc"', '"name"', '"target_lower_cardinality"',
+        '"instantiate_link"', '"1"', '"Association"', '"tuc"', '"Association"', '"Integer"',
+        '"instantiate_attribute"', '"1"', '"tuc"', '"name"', '"target_upper_cardinality"',
         '"exit"',
     ]
 
 def add_constraints(model):
     return [
             '"model"',
-            '"add_constraint"', model, '"Integer"',
+            '"add_constraint"', '"%s"' % model, '"Integer"',
                 '"funcdef"',
                 '"constraint"',
                 '2', '"%s"' % (model*100), '"%s"' % (model*100+1),
@@ -218,62 +219,66 @@ def add_constraints(model):
 
 instantiate_scd = [
         '"model"',
-        '"instantiate_model"', 1, 2,
-        '"define_inheritance"', 2, '"Inheritance"',
-        '"instantiate_node"', 2, '"Class"', '"Place"',
-        '"instantiate_node"', 2, '"Class"', '"Transition"',
-        '"instantiate_node"', 2, '"Class"', '"Integer"',
-        '"instantiate_link"', 2, '"Association"', '"P2T"', '"Place"', '"Transition"',
-        '"instantiate_link"', 2, '"Association"', '"T2P"', '"Transition"', '"Place"',
-        '"instantiate_link"', 2, '"Association"', '"Place_tokens"', '"Place"', '"Integer"',
-        '"instantiate_attribute"', 2, '"Place_tokens"', '"name"', '"tokens"',
-        '"instantiate_link"', 2, '"Association"', '"P2T_weight"', '"P2T"', '"Integer"',
-        '"instantiate_attribute"', 2, '"P2T_weight"', '"name"', '"weight"',
-        '"instantiate_link"', 2, '"Association"', '"T2P_weight"', '"T2P"', '"Integer"',
-        '"instantiate_attribute"', 2, '"T2P_weight"', '"name"', '"weight"',
+        '"instantiate_model"', '"1"', '"2"',
+        '"define_inheritance"', '"2"', '"Inheritance"',
+        '"instantiate_node"', '"2"', '"Class"', '"Place"',
+        '"instantiate_node"', '"2"', '"Class"', '"Transition"',
+        '"instantiate_node"', '"2"', '"Class"', '"Integer"',
+        '"instantiate_link"', '"2"', '"Association"', '"P2T"', '"Place"', '"Transition"',
+        '"instantiate_link"', '"2"', '"Association"', '"T2P"', '"Transition"', '"Place"',
+        '"instantiate_link"', '"2"', '"Association"', '"Place_tokens"', '"Place"', '"Integer"',
+        '"instantiate_attribute"', '"2"', '"Place_tokens"', '"name"', '"tokens"',
+        '"instantiate_link"', '"2"', '"Association"', '"P2T_weight"', '"P2T"', '"Integer"',
+        '"instantiate_attribute"', '"2"', '"P2T_weight"', '"name"', '"weight"',
+        '"instantiate_link"', '"2"', '"Association"', '"T2P_weight"', '"T2P"', '"Integer"',
+        '"instantiate_attribute"', '"2"', '"T2P_weight"', '"name"', '"weight"',
+        '"export_node"', '"2"', '"models/PetriNets"',
         '"exit"',
     ]
 
 instantiate_pn = [
         '"model"',
-        '"instantiate_model"', 2, 3,
-        '"instantiate_node"', 3, '"Place"', '"p1"',
-        '"instantiate_node"', 3, '"Place"', '"p2"',
-        '"instantiate_node"', 3, '"Transition"', '"t1"',
-        '"instantiate_node"', 3, '"Transition"', '"t2"',
-        '"instantiate_link"', 3, '"P2T"', '"p1_t1"', '"p1"', '"t1"',
-        '"instantiate_link"', 3, '"T2P"', '"t1_p2"', '"t1"', '"p2"',
-        '"instantiate_link"', 3, '"P2T"', '"p2_t2"', '"p2"', '"t2"',
-        '"instantiate_link"', 3, '"T2P"', '"t2_p1"', '"t2"', '"p1"',
-        '"instantiate_attribute"', 3, '"p1_t1"', '"weight"', '1',
-        '"instantiate_attribute"', 3, '"t1_p2"', '"weight"', '2',
-        '"instantiate_attribute"', 3, '"p2_t2"', '"weight"', '3',
-        '"instantiate_attribute"', 3, '"t2_p1"', '"weight"', '4',
-        '"instantiate_attribute"', 3, '"p1"', '"tokens"', '5',
-        '"instantiate_attribute"', 3, '"p2"', '"tokens"', '6',
+        '"instantiate_model"', '"2"', '"3"',
+        '"instantiate_node"', '"3"', '"Place"', '"p1"',
+        '"instantiate_node"', '"3"', '"Place"', '"p2"',
+        '"instantiate_node"', '"3"', '"Transition"', '"t1"',
+        '"instantiate_node"', '"3"', '"Transition"', '"t2"',
+        '"instantiate_link"', '"3"', '"P2T"', '"p1_t1"', '"p1"', '"t1"',
+        '"instantiate_link"', '"3"', '"T2P"', '"t1_p2"', '"t1"', '"p2"',
+        '"instantiate_link"', '"3"', '"P2T"', '"p2_t2"', '"p2"', '"t2"',
+        '"instantiate_link"', '"3"', '"T2P"', '"t2_p1"', '"t2"', '"p1"',
+        '"instantiate_attribute"', '"3"', '"p1_t1"', '"weight"', '1',
+        '"instantiate_attribute"', '"3"', '"t1_p2"', '"weight"', '2',
+        '"instantiate_attribute"', '"3"', '"p2_t2"', '"weight"', '3',
+        '"instantiate_attribute"', '"3"', '"t2_p1"', '"weight"', '4',
+        '"instantiate_attribute"', '"3"', '"p1"', '"tokens"', '5',
+        '"instantiate_attribute"', '"3"', '"p2"', '"tokens"', '6',
+        '"export_node"', '"3"', '"models/PN_instance"',
         '"exit"',
     ]
 
 instantiate_example = [
         '"model"',
-        '"instantiate_model"', 1, 2,
-        '"define_inheritance"', 2, '"Inheritance"',
-        '"instantiate_node"', 2, '"Class"', '"A"',
-        '"instantiate_node"', 2, '"Class"', '"B"',
-        '"instantiate_node"', 2, '"Class"', '"C"',
-        '"instantiate_link"', 2, '"Inheritance"', '"b_inherits_a"', '"B"', '"A"',
-        '"instantiate_link"', 2, '"Association"', '"A_tokens"', '"A"', '"B"',
-        '"instantiate_attribute"', 2, '"A_tokens"', '"name"', '"tokens"',
-        '"instantiate_link"', 2, '"Association"', '"C_tokens"', '"C"', '"B"',
-        '"instantiate_attribute"', 2, '"C_tokens"', '"name"', '"tokens"',
+        '"instantiate_model"', '"1"', '"2"',
+        '"define_inheritance"', '"2"', '"Inheritance"',
+        '"instantiate_node"', '"2"', '"Class"', '"A"',
+        '"instantiate_node"', '"2"', '"Class"', '"B"',
+        '"instantiate_node"', '"2"', '"Class"', '"C"',
+        '"instantiate_link"', '"2"', '"Inheritance"', '"b_inherits_a"', '"B"', '"A"',
+        '"instantiate_link"', '"2"', '"Association"', '"A_tokens"', '"A"', '"B"',
+        '"instantiate_attribute"', '"2"', '"A_tokens"', '"name"', '"tokens"',
+        '"instantiate_link"', '"2"', '"Association"', '"C_tokens"', '"C"', '"B"',
+        '"instantiate_attribute"', '"2"', '"C_tokens"', '"name"', '"tokens"',
+        '"export_node"', '"2"', '"models/example_MM"',
         '"exit"',
         '"model"',
-        '"instantiate_model"', 2, 3,
-        '"instantiate_node"', 3, '"A"', '"a"',
-        '"instantiate_attribute"', 3, '"a"', '"tokens"', '"b"',
-        '"instantiate_node"', 3, '"B"', '"b"',
-        '"instantiate_node"', 3, '"C"', '"c"',
-        '"instantiate_attribute"', 3, '"c"', '"tokens"', '"b"',
+        '"instantiate_model"', '"2"', '"3"',
+        '"instantiate_node"', '"3"', '"A"', '"a"',
+        '"instantiate_attribute"', '"3"', '"a"', '"tokens"', '"b"',
+        '"instantiate_node"', '"3"', '"B"', '"b"',
+        '"instantiate_node"', '"3"', '"C"', '"c"',
+        '"instantiate_attribute"', '"3"', '"c"', '"tokens"', '"b"',
+        '"export_node"', '"3"', '"models/example_M"',
         '"exit"',
     ]
 
@@ -283,7 +288,7 @@ def conformance_call(operation, model, metamodel):
                 '"call"',
                     '"access"', '"resolve"', '"%s"' % operation,
                     '3',
-                    '"const"', 3,
+                    '"call"', '"access"', '"resolve"', '"import_node"', '1', '"models/example_M"', 'false',
                     '"const"', '"%s"' % model,
                     '"const"', '"%s"' % metamodel,
                 'false',
@@ -318,38 +323,38 @@ def conformance_check(node):
                 '"call"',
                     '"access"', '"resolve"', '"conformance_scd"',
                     '1',
-                    '"const"', node,
+                    '"call"', '"access"', '"resolve"', '"import_node"', '1', '"const"', '"%s"' % (node), 'false',
                     'false',
                 'true',
             ]
 
 class TestConstructorsModels(unittest.TestCase):
     def test_constructors_instantiate_bottom(self):
-        commands = bottom + bottom_attributes + conformance_check(1) + ['"return"', 'false']
+        commands = bottom + bottom_attributes + conformance_check("models/SimpleClassDiagrams") + ['"return"', 'false']
         self.assertTrue(run_barebone(commands, ["OK"], 1))
 
     def test_constructors_action_language(self):
-        commands = bottom + action_language + bottom_attributes + conformance_check(1) + ['"return"', 'false']
+        commands = bottom + action_language + bottom_attributes + conformance_check("models/SimpleClassDiagrams") + ['"return"', 'false']
         self.assertTrue(run_barebone(commands, ["OK"], 1))
 
     def test_constructors_constraints(self):
-        commands = bottom + action_language + bottom_attributes + add_constraints(1) + conformance_check(1) + ['"return"', 'false']
+        commands = bottom + action_language + bottom_attributes + add_constraints(1) + conformance_check("models/SimpleClassDiagrams") + ['"return"', 'false']
         self.assertTrue(run_barebone(commands, ["OK"], 1))
 
     def test_constructors_constraints_executed(self):
-        commands = bottom + action_language + bottom_attributes + add_constraints(1) + instantiate_scd + add_constraints(2) + instantiate_pn + conformance_check(3) + ['"return"', 'false']
+        commands = bottom + action_language + bottom_attributes + add_constraints(1) + instantiate_scd + add_constraints(2) + instantiate_pn + conformance_check("models/PN_instance") + ['"return"', 'false']
         self.assertTrue(run_barebone(commands, ["OK"], 1))
 
     def test_constructors_instantiate_scd(self):
-        commands = bottom + bottom_attributes + instantiate_scd + conformance_check(2) + ['"return"', 'false']
+        commands = bottom + bottom_attributes + instantiate_scd + conformance_check("models/PetriNets") + ['"return"', 'false']
         self.assertTrue(run_barebone(commands, ["OK"], 1))
 
     def test_constructors_instantiate_pn(self):
-        commands = bottom + bottom_attributes + instantiate_scd + instantiate_pn + conformance_check(3) + ['"return"', 'false']
+        commands = bottom + bottom_attributes + instantiate_scd + instantiate_pn + conformance_check("models/PN_instance") + ['"return"', 'false']
         self.assertTrue(run_barebone(commands, ["OK"], 1))
 
     def test_constructors_instantiate_example(self):
-        commands = bottom + bottom_attributes + instantiate_example + conformance_check(2) + conformance_check(3) + ['"return"', 'false']
+        commands = bottom + bottom_attributes + instantiate_example + conformance_check("models/example_MM") + conformance_check("models/example_M") + ['"return"', 'false']
         self.assertTrue(run_barebone(commands, ["OK", "OK"], 1))
 
     def test_constructors_is_direct_instance(self):

+ 2 - 0
interface/HUTN/hutn_compiler/compiler.py

@@ -143,6 +143,7 @@ def main(input_file, grammar_file, mode, args=[]):
     from primitives_object_visitor import PrimitivesObjectVisitor
     from constructors_visitor import ConstructorsVisitor
     from constructors_object_visitor import ConstructorsObjectVisitor
+    from model_visitor import ModelVisitor
 
     modes = {
         "N" : [],
@@ -154,6 +155,7 @@ def main(input_file, grammar_file, mode, args=[]):
         "BS" : [SemanticsVisitor, BootstrapVisitor],
         "CS" : [SemanticsVisitor, ConstructorsVisitor],
         "CO" : [SemanticsVisitor, ConstructorsObjectVisitor],
+        "M" : [ModelVisitor],
     }
     return do_compile(input_file, grammar_file, [v(args) for v in modes[mode]])
 

+ 14 - 0
interface/HUTN/test/modelling_language/code/petrinets.mvc

@@ -0,0 +1,14 @@
+import /formalisms/SimpleClassDiagrams as SCD
+
+SCD PetriNets{
+    Class Place{
+        tokens : Natural
+    }
+    Class Transition{}
+    Association P2T (Place, Transition) {
+        weight : Natural
+    }
+    Association T2P (Transition, Place) {
+        weight : Natural
+    }
+}