|
|
@@ -7,6 +7,76 @@ include "io.alh"
|
|
|
include "metamodels.alh"
|
|
|
include "modelling.alh"
|
|
|
|
|
|
+Element function petrinet_transformation(root: Element):
|
|
|
+ // Create A transformation model for petrinets (useful for testing)
|
|
|
+
|
|
|
+ //////////////////////////////////
|
|
|
+ //initialise an empty transformation model for petrinet
|
|
|
+ Element my_model
|
|
|
+ my_model = instantiate_model(root["PetriNets_MTransformation"])
|
|
|
+ define_inheritance(my_model, "l3")
|
|
|
+ dict_add(root, "transf_petrinet_fire", my_model)
|
|
|
+
|
|
|
+ ////////////////////////////
|
|
|
+ // root node
|
|
|
+ instantiate_node(my_model, "Transformation", "PetrinetFire")
|
|
|
+ instantiate_attribute(my_model, "PetrinetFire", "name", "PetriNetFire")
|
|
|
+
|
|
|
+ ////////////////////////////
|
|
|
+ // rule: find transitions
|
|
|
+
|
|
|
+ //rule: find_transitions
|
|
|
+ log("find_transitions")
|
|
|
+ instantiate_node(my_model, "Rule", "find_transitions")
|
|
|
+ instantiate_attribute(my_model, "find_transitions", "name", "find_transitions")
|
|
|
+ instantiate_attribute(my_model, "find_transitions", "precedence", 1)
|
|
|
+ //connect to transformation
|
|
|
+ instantiate_link(my_model, "transformation_to_rule", "", "PetrinetFire", "find_transitions")
|
|
|
+
|
|
|
+ //precondition: lhs_precondition
|
|
|
+ log("lhs_precondition")
|
|
|
+ instantiate_node(my_model, "Precondition","lhs_precondition")
|
|
|
+ //connect to rule
|
|
|
+ instantiate_link(my_model, "lhs", "", "find_transitions", "lhs_precondition")
|
|
|
+
|
|
|
+ //Transition_LHS: lhs_find_all
|
|
|
+ log("lhs_find_all")
|
|
|
+ instantiate_node(my_model, "Transition_LHS","lhs_find_all")
|
|
|
+ instantiate_attribute(my_model, "lhs_find_all", "plabel", 1)
|
|
|
+ //connect to rule
|
|
|
+ instantiate_link(my_model, "pre2ram", "", "lhs_precondition", "lhs_find_all")
|
|
|
+
|
|
|
+ //precondition: nac_precondition
|
|
|
+ log("nac_precondition")
|
|
|
+ instantiate_node(my_model, "Precondition","nac_precondition")
|
|
|
+ //connect to rule
|
|
|
+ instantiate_link(my_model, "nac", "", "find_transitions", "nac_precondition")
|
|
|
+
|
|
|
+ //Transition_LHS: nac_transition_place_before
|
|
|
+ log("nac_transition_place_before")
|
|
|
+ instantiate_node(my_model, "Transition_LHS","nac_transition_place_before")
|
|
|
+ instantiate_attribute(my_model, "nac_transition_place_before", "plabel", 1)
|
|
|
+ //connect to rule
|
|
|
+ instantiate_link(my_model, "pre2ram", "", "nac_precondition", "nac_transition_place_before")
|
|
|
+
|
|
|
+ //Place_LHS: nac_place_before
|
|
|
+ log("nac_place_before")
|
|
|
+ instantiate_node(my_model, "Place_LHS","nac_place_before")
|
|
|
+ instantiate_attribute(my_model, "nac_place_before", "plabel", 2)
|
|
|
+ instantiate_attribute(my_model, "nac_place_before", "tokens", "lambda x: sum([1 for i in x.out if i.weight<x.tokens]) == len(x.transition)")
|
|
|
+ //connect to rule
|
|
|
+ instantiate_link(my_model, "pre2ram", "", "nac_precondition", "nac_place_before")
|
|
|
+
|
|
|
+ //P2T_LHS: nac_ft_p2t
|
|
|
+ log("nac_transition_place_before")
|
|
|
+ instantiate_link(my_model, "P2T_LHS", "nac_p2tlhs_before", "nac_place_before", "nac_transition_place_before")
|
|
|
+ instantiate_attribute(my_model, "nac_p2tlhs_before", "plabel", 3)
|
|
|
+ instantiate_attribute(my_model, "nac_p2tlhs_before", "weight", "lambda x: True")
|
|
|
+ //connect to rule
|
|
|
+ instantiate_link(my_model, "pre2ram", "", "nac_precondition", "nac_p2tlhs_before")
|
|
|
+
|
|
|
+ return my_model
|
|
|
+
|
|
|
Element function pn_operations():
|
|
|
Element ops
|
|
|
ops = create_node()
|
|
|
@@ -434,4 +504,9 @@ Element function initial_prompt():
|
|
|
output("Command not recognized, use 'help' for a list of possible commands")
|
|
|
|
|
|
Void function main():
|
|
|
- initial_prompt()
|
|
|
+ //initial_prompt()
|
|
|
+ Element root
|
|
|
+ root = create_metamodels()
|
|
|
+ petrinet_transformation(root)
|
|
|
+ log("done")
|
|
|
+ return
|