瀏覽代碼

Initialize SCD in the root task upon startup

Yentl Van Tendeloo 8 年之前
父節點
當前提交
d0427ceecc

+ 7 - 0
bootstrap/initial_code_manager.alb

@@ -5,6 +5,13 @@ Void function __main():
 	Element root
 	root = read_root()
 	root = root["__hierarchy"]["objects"]
+	exec(root["bootstrap/compilation_manager.alc"]["initializers"])
+	exec(root["bootstrap/constructors.alc"]["initializers"])
+	exec(root["bootstrap/library.alc"]["initializers"])
+	exec(root["bootstrap/object_operations.alc"]["initializers"])
+	exec(root["bootstrap/conformance_scd.alc"]["initializers"])
+	exec(root["bootstrap/metamodels.alc"]["initializers"])
+	exec(root["bootstrap/modelling.alc"]["initializers"])
 	exec(root["bootstrap/task_manager.alc"]["initializers"])
 	task_management()
 	return!

+ 0 - 2
bootstrap/metamodels.alc

@@ -191,8 +191,6 @@ Element function create_metamodels():
 	location_PN = "models/PetriNets"
 	location_bottom = "models/LTM_bottom"
 
-	if (bool_not(dict_in(dict_read(dict_read(read_root(), "__hierarchy"), "models"), "SimpleClassDiagrams"))):
-		initialize_SCD(location_SCD)
 	if (bool_not(dict_in(dict_read(dict_read(read_root(), "__hierarchy"), "models"), "PetriNets"))):
 		initialize_PN(location_SCD, location_PN)
 	if (bool_not(dict_in(dict_read(dict_read(read_root(), "__hierarchy"), "models"), "LTM_bottom"))):

+ 0 - 4
bootstrap/modelling.alc

@@ -554,8 +554,6 @@ String function add_AL(model : Element, element : Element):
 Void function construct_model():
 	String command
 
-	initialize_SCD("models/SimpleClassDiagrams")
-
 	while (True):
 		command = input()
 		if (command == "instantiate_bottom"):
@@ -590,8 +588,6 @@ Void function construct_model():
 			instantiate_link(global_models[input()], input(), input(), input(), input())
 		elif (command == "model_define_attribute"):
 			model_define_attribute(global_models[input()], input(), input(), input(), input())
-		elif (command == "initialize_SCD"):
-			initialize_SCD(input())
 		elif (command == "initialize_bottom"):
 			initialize_bottom(input())
 		elif (command == "export_node"):

+ 4 - 0
bootstrap/task_manager.alc

@@ -1,5 +1,6 @@
 include "io.alh"
 include "primitives.alh"
+include "metamodels.alh"
 
 Void function task_management():
 	String taskname
@@ -7,6 +8,9 @@ Void function task_management():
 	Element task_frame
 	Element output_value
 	Element input_value
+
+	// Initialize the basic formalisms before allowing new users
+	initialize_SCD("models/SimpleClassDiagrams")
 	
 	while (True):
 		taskname = input()

+ 5 - 8
integration/code/reachability.alc

@@ -44,7 +44,6 @@ Element function reachability_graph(params : Element, output_mms : Element):
 	all_transitions = allInstances(in_model, "Transition")
 	while (read_nr_out(all_transitions) > 0):
 		transition = set_pop(all_transitions)
-		log("Consider transition " + transition)
 
 		tv = create_node()
 		links = allIncomingAssociationInstances(in_model, transition, "P2T")
@@ -95,6 +94,9 @@ Element function reachability_graph(params : Element, output_mms : Element):
 
 	while (read_nr_out(workset) > 0):
 		state_id = set_pop(workset)
+		log("Work on state ID " + cast_v2s(state_id))
+		log("Reachable states: " + cast_i2s(read_nr_out(reachable_states)))
+		log("Workset: " + cast_i2s(read_nr_out(workset)))
 
 		// TODO check if dict_repr is already in the set of reachable states
 		dict_repr = reachable_states[state_id]
@@ -104,8 +106,7 @@ Element function reachability_graph(params : Element, output_mms : Element):
 		all_transitions = set_copy(all_transitions_original)
 		while (read_nr_out(all_transitions) > 0):
 			transition = set_pop(all_transitions)
-
-			log("Test transition: " + cast_v2s(read_attribute(in_model, transition, "name")))
+			log("Test " + cast_v2s(read_attribute(in_model, transition, "name")))
 
 			keys = dict_keys(transition_vectors_consume[transition])
 			possible = True
@@ -116,14 +117,11 @@ Element function reachability_graph(params : Element, output_mms : Element):
 				if (integer_lt(dict_repr[key], transition_vectors_consume[transition][key])):
 					// Impossible transition, so discard this one
 					possible = False
-					log("Not applicable!")
 					break!
 
 			if (possible):
-				log("Applicable!")
 				new_dict_repr = dict_copy(dict_repr)
 				// Transition can execute, so compute and add the new state based on the consume/produce vectors
-				log("Before transition: " + dict_to_string(new_dict_repr))
 				keys = dict_keys(transition_vectors_consume[transition])
 				while (read_nr_out(keys) > 0):
 					key = set_pop(keys)
@@ -133,7 +131,6 @@ Element function reachability_graph(params : Element, output_mms : Element):
 				while (read_nr_out(keys) > 0):
 					key = set_pop(keys)
 					dict_overwrite(new_dict_repr, key, integer_addition(new_dict_repr[key], transition_vectors_produce[transition][key]))
-				log("After transition: " + dict_to_string(new_dict_repr))
 
 				// Check if this state already has an associated ID
 				Integer other_state_id
@@ -163,6 +160,7 @@ Element function reachability_graph(params : Element, output_mms : Element):
 					instantiate_attribute(out_model, state, "name", cast_i2s(target_id))
 
 					keys = dict_keys(new_dict_repr)
+					// TODO optimize this part?
 					while (read_nr_out(keys) > 0):
 						key = set_pop(keys)
 						place = instantiate_node(out_model, "Place", "")
@@ -176,7 +174,6 @@ Element function reachability_graph(params : Element, output_mms : Element):
 				// And also store it in the model itself
 				new_transition = instantiate_link(out_model, "Transition", "", cast_i2s(state_id), cast_i2s(target_id))
 				instantiate_attribute(out_model, new_transition, "name", read_attribute(in_model, transition, "name"))
-				log("Add transition name: " + cast_v2s(read_attribute(in_model, transition, "name")))
 
 	dict_add(result, "ReachabilityGraph", out_model)
 	return result!

+ 7 - 14
integration/test_constructors_models_compiled.py

@@ -35,46 +35,39 @@ def conformance_check(node):
 
 class TestConstructorsModelsCompiled(unittest.TestCase):
     def test_constructors_petrinets(self):
-        commands = ["initialize_SCD", "models/SimpleClassDiagrams"] + \
-                   model_compile("integration/code/petrinets.mvc") + \
+        commands = model_compile("integration/code/petrinets.mvc") + \
                    ["exit", 1] + conformance_check("models/PetriNets") + ["return", False]
         self.assertTrue(run_barebone(commands, ["OK"], 4))
 
     def test_constructors_petrinet_instance(self):
-        commands = ["initialize_SCD", "models/SimpleClassDiagrams"] + \
-                   model_compile("integration/code/petrinets.mvc") + \
+        commands = model_compile("integration/code/petrinets.mvc") + \
                    model_compile("integration/code/my_petrinet.mvc") + \
                    ["exit", 1] + conformance_check("models/my_petrinet") + ["return", False]
         self.assertTrue(run_barebone(commands, ["OK"], 4))
 
     def test_constructors_petrinet_full(self):
-        commands = ["initialize_SCD", "models/SimpleClassDiagrams"] + \
-                   model_compile("integration/code/my_petrinet_with_MM.mvc") + \
+        commands = model_compile("integration/code/my_petrinet_with_MM.mvc") + \
                    ["exit", 1] + conformance_check("models/my_petrinet") + ["return", False]
         self.assertTrue(run_barebone(commands, ["OK"], 4))
 
     def test_constructors_petrinets_constraints(self):
-        commands = ["initialize_SCD", "models/SimpleClassDiagrams"] + \
-                   model_compile("integration/code/petrinets_constraints.mvc") + \
+        commands = model_compile("integration/code/petrinets_constraints.mvc") + \
                    ["exit", 1] + conformance_check("models/PetriNets") + ["return", False]
         self.assertTrue(run_barebone(commands, ["OK"], 4))
 
     def test_constructors_petrinet_instance_constraints(self):
-        commands = ["initialize_SCD", "models/SimpleClassDiagrams"] + \
-                   model_compile("integration/code/petrinets_constraints.mvc") + \
+        commands = model_compile("integration/code/petrinets_constraints.mvc") + \
                    model_compile("integration/code/my_petrinet.mvc") + \
                    ["exit", 1] + conformance_check("models/my_petrinet") + ["return", False]
         self.assertTrue(run_barebone(commands, ["OK"], 4))
 
     def test_constructors_petrinet_full_constraints(self):
-        commands = ["initialize_SCD", "models/SimpleClassDiagrams"] + \
-                   model_compile("integration/code/my_petrinet_with_MM_and_constraints.mvc") + \
+        commands = model_compile("integration/code/my_petrinet_with_MM_and_constraints.mvc") + \
                    ["exit", 1] + conformance_check("models/my_petrinet") + ["return", False]
         self.assertTrue(run_barebone(commands, ["OK"], 4))
 
     def test_constructors_petrinet_invalids(self):
-        commands = ["initialize_SCD", "models/SimpleClassDiagrams"] + \
-                   model_compile("integration/code/several_petrinets.mvc") + \
+        commands = model_compile("integration/code/several_petrinets.mvc") + \
                    ["exit", 1] + \
                    conformance_check("models/valid_petrinet") + \
                    conformance_check("models/invalid_petrinet_1") + \

+ 0 - 28
scripts/execute_model.py

@@ -24,38 +24,10 @@ for f in files:
         print("Unknown file format for file " + f)
         print("Requires either .mvc or .alc")
 
-def initialize_SCD():
-    import urllib2
-    import urllib
-    import json
-    taskname = random.random()
-
-    while 1:
-        try:
-            # Create new task
-            urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"%s"' % taskname, "taskname": "task_manager"}))).read()
-            break
-        except:
-            time.sleep(0.01)
-
-    data = []
-    data.append(4)
-    data.append("initialize_SCD")
-    data.append("models/SimpleClassDiagrams")
-    data.append("exit")
-    data.append(2)
-
-    print("Initializing SCD")
-    urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "data": json.dumps(data), "taskname": taskname}))).read()
-    urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "get_output", "taskname": taskname}))).read()
-    print("Initialized!")
-
 def do_compile_wrapper(filename, mode, grammar):
     do_compile(address, filename, str(random.random()), filename, mode, ["--debug"], grammar=grammar)
 
 # Parse all models and upload them
-initialize_SCD()
-
 for m in models:
     print("[MODEL] %s" % m)
     do_compile_wrapper(m, "MO", "grammars/modelling.g")