devs_to_string.alc 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. include "primitives.alh"
  2. include "modelling.alh"
  3. include "object_operations.alh"
  4. include "typing.alh"
  5. Boolean function devs_to_string(model: Element):
  6. log("Entering devs_to_string function!")
  7. String model_rep
  8. Element all_atomics
  9. Element curr_atomic
  10. Element all_coupleds
  11. Element curr_coupled
  12. Element string_element
  13. Element all_ports
  14. Element all_submodels
  15. Element curr_port
  16. Element curr_submodel
  17. Element out_channels
  18. Element curr_channel
  19. Element possible_parent
  20. Element parent
  21. String curr_port_name
  22. String curr_port_type
  23. String curr_submodel_name
  24. String curr_submodel_type
  25. model_rep = "\nfrom DEVS import *\nfrom infinity import INFINITY\n\n"
  26. all_atomics = allInstances(model, "ParallelDEVS/AtomicDEVSBlock")
  27. while (read_nr_out(all_atomics) > 0):
  28. curr_atomic = set_pop(all_atomics)
  29. model_rep = ((model_rep + "class ") + cast_string(read_attribute(model, curr_atomic, "name"))) + "(AtomicDEVS):\n"
  30. model_rep = ((model_rep + "\tdef __init__(self, name=") + cast_value(read_attribute(model, curr_atomic, "name"))) + "):\n"
  31. model_rep = model_rep + "\t\tAtomicDEVS.__init__(self, name)\n"
  32. model_rep = model_rep + "\t\tself.state = self.initialState()\n"
  33. model_rep = model_rep + "\t\tself.my_ports = {"
  34. all_ports = allAssociationDestinations(model, curr_atomic, "ParallelDEVS/DEVSBlockToPort")
  35. while (read_nr_out(all_ports) > 0):
  36. curr_port = set_pop(all_ports)
  37. curr_port_name = cast_value(read_attribute(model, curr_port, "name"))
  38. curr_port_type = read_type(model, curr_port)
  39. if (curr_port_type == "ParallelDEVS/InputPort"):
  40. model_rep = (((model_rep + curr_port_name) + ": self.addInPort(") + curr_port_name) + ")"
  41. if (curr_port_type == "ParallelDEVS/OutputPort"):
  42. model_rep = (((model_rep + curr_port_name) + ": self.addOutPort(") + curr_port_name) + ")"
  43. if (read_nr_out(all_ports) > 0):
  44. model_rep = model_rep + ", "
  45. model_rep = model_rep + "}\n"
  46. model_rep = model_rep + "\tdef initialState(self):\n" + cast_string(read_attribute(model, curr_atomic, "initialState")) + "\n"
  47. model_rep = ((model_rep + "\tdef timeAdvance(self):\n") + cast_string(read_attribute(model, curr_atomic, "timeAdvance"))) + "\n"
  48. model_rep = ((model_rep + "\tdef outputFnc(self):\n") + cast_string(read_attribute(model, curr_atomic, "outputFnc"))) + "\n"
  49. model_rep = ((model_rep + "\tdef intTransition(self):\n") + cast_string(read_attribute(model, curr_atomic, "intTransition"))) + "\n"
  50. model_rep = ((model_rep + "\tdef extTransition(self, my_inputs):\n") + cast_string(read_attribute(model, curr_atomic, "extTransition"))) + "\n"
  51. model_rep = ((model_rep + "\tdef confTransition(self, my_inputs):\n") + cast_string(read_attribute(model, curr_atomic, "confTransition"))) + "\n"
  52. all_coupleds = allInstances(model, "ParallelDEVS/CoupledDEVSBlock")
  53. while (read_nr_out(all_coupleds) > 0):
  54. curr_coupled = set_pop(all_coupleds)
  55. model_rep = ((model_rep + "class ") + cast_string(read_attribute(model, curr_coupled, "name"))) + "(CoupledDEVS):\n"
  56. model_rep = ((model_rep + "\tdef __init__(self, name=") + cast_value(read_attribute(model, curr_coupled, "name"))) + "):\n"
  57. model_rep = model_rep + "\t\tCoupledDEVS.__init__(self, name)\n"
  58. model_rep = model_rep + "\t\tself.my_ports = {"
  59. all_ports = allAssociationDestinations(model, curr_coupled, "ParallelDEVS/DEVSBlockToPort")
  60. while (read_nr_out(all_ports) > 0):
  61. curr_port = set_pop(all_ports)
  62. curr_port_name = cast_value(read_attribute(model, curr_port, "name"))
  63. curr_port_type = read_type(model, curr_port)
  64. log(curr_port_type)
  65. if (curr_port_type == "ParallelDEVS/InputPort"):
  66. model_rep = (((model_rep + curr_port_name) + ": self.addInPort(") + curr_port_name) + ")"
  67. if (curr_port_type == "ParallelDEVS/OutputPort"):
  68. model_rep = (((model_rep + curr_port_name) + ": self.addOutPort(") + curr_port_name) + ")"
  69. if (read_nr_out(all_ports) > 0):
  70. model_rep = model_rep + ", "
  71. model_rep = model_rep + "}\n"
  72. model_rep = model_rep + "\t\tself.submodels = {"
  73. all_submodels = allAssociationDestinations(model, curr_coupled, "ParallelDEVS/SubModel")
  74. while (read_nr_out(all_submodels) > 0):
  75. curr_submodel = set_pop(all_submodels)
  76. curr_submodel_name = cast_value(read_attribute(model, curr_submodel, "name"))
  77. curr_submodel_type = cast_string(read_attribute(model, curr_submodel, "type"))
  78. model_rep = ((((((model_rep + curr_submodel_name) + ": self.addSubModel(") + curr_submodel_type) + "(name=") + curr_submodel_name) + ")") + ")"
  79. if (read_nr_out(all_submodels) > 0):
  80. model_rep = model_rep + ", "
  81. model_rep = model_rep + "}\n"
  82. all_ports = allAssociationDestinations(model, curr_coupled, "ParallelDEVS/DEVSBlockToPort")
  83. while (read_nr_out(all_ports) > 0):
  84. curr_port = set_pop(all_ports)
  85. out_channels = allAssociationDestinations(model, curr_port, "ParallelDEVS/Channel")
  86. while (read_nr_out(out_channels) > 0):
  87. curr_channel = set_pop(out_channels)
  88. parent = set_pop(allAssociationOrigins(model, curr_channel, "ParallelDEVS/DEVSInstanceToPort"))
  89. model_rep = ((((((model_rep + "\t\tself.connectPorts(self.my_ports[") + cast_value(read_attribute(model, curr_port, "name"))) + "], self.submodels[") + cast_value(read_attribute(model, parent, "name"))) + "].my_ports[") + cast_value(read_attribute(model, curr_channel, "name"))) + "])\n"
  90. all_submodels = allAssociationDestinations(model, curr_coupled, "ParallelDEVS/SubModel")
  91. while (read_nr_out(all_submodels) > 0):
  92. curr_submodel = set_pop(all_submodels)
  93. curr_submodel_name = cast_value(read_attribute(model, curr_submodel, "name"))
  94. log(curr_submodel_name)
  95. all_ports = allAssociationDestinations(model, curr_submodel, "ParallelDEVS/DEVSInstanceToPort")
  96. while (read_nr_out(all_ports) > 0):
  97. curr_port = set_pop(all_ports)
  98. out_channels = allAssociationDestinations(model, curr_port, "ParallelDEVS/Channel")
  99. log(cast_value(read_nr_out(out_channels)))
  100. while (read_nr_out(out_channels) > 0):
  101. curr_channel = set_pop(out_channels)
  102. possible_parent = allAssociationOrigins(model, curr_channel, "ParallelDEVS/DEVSInstanceToPort")
  103. if (read_nr_out(possible_parent) == 0):
  104. model_rep = ((((((model_rep + "\t\tself.connectPorts(self.submodels[") + curr_submodel_name) + "].my_ports[") + cast_value(read_attribute(model, curr_port, "name"))) + "], self.my_ports[") + cast_value(read_attribute(model, curr_channel, "name"))) + "])\n"
  105. else:
  106. parent = set_pop(possible_parent)
  107. model_rep = ((((((((model_rep + "\t\tself.connectPorts(self.submodels[") + curr_submodel_name) + "].my_ports[") + cast_value(read_attribute(model, curr_port, "name"))) + "], self.submodels[") + cast_value(read_attribute(model, parent, "name"))) + "].my_ports[") + cast_value(read_attribute(model, curr_channel, "name"))) + "])\n"
  108. model_rep = model_rep + "\n"
  109. string_element = instantiate_node(model, "MyString/MyString", "my_string")
  110. instantiate_attribute(model, string_element, "value", model_rep)
  111. log("Printing model_rep...")
  112. log("\n" + model_rep)
  113. return True!