lola.alc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. include "primitives.alh"
  2. include "modelling.alh"
  3. include "object_operations.alh"
  4. include "services.alh"
  5. Boolean function lola_format(model : Element):
  6. Element all_places
  7. String place
  8. String name
  9. Integer tokens
  10. String transition
  11. Element all_transitions
  12. Element associations
  13. Element association
  14. String weight
  15. String lola_net
  16. String query
  17. String place_output
  18. String marking_output
  19. String transition_output
  20. all_places = allInstances(model, "PN/Place")
  21. log("ALL PLACES")
  22. log(cast_i2s(list_len(all_places)))
  23. place_output = "PLACE "
  24. marking_output = "MARKING "
  25. while (set_len(all_places) > 0):
  26. place = set_pop(all_places)
  27. name = read_attribute(model, place, "name")
  28. tokens = read_attribute(model, place, "tokens")
  29. place_output = string_join(place_output, name)
  30. if tokens > 0:
  31. if marking_output != "MARKING ":
  32. marking_output = string_join(marking_output, ", ")
  33. marking_output = string_join(marking_output, name)
  34. marking_output = string_join(marking_output, ": ")
  35. marking_output = string_join(marking_output, cast_i2s(tokens))
  36. if list_len(all_places) == 0:
  37. place_output = string_join(place_output, ";")
  38. marking_output = string_join(marking_output, ";")
  39. else:
  40. place_output = string_join(place_output, ", ")
  41. lola_net = string_join(place_output, marking_output)
  42. all_transitions = allInstances(model, "PN/Transition")
  43. transition_output = ""
  44. while (set_len(all_transitions) > 0):
  45. transition = set_pop(all_transitions)
  46. name = read_attribute(model, transition, "name")
  47. transition_output = string_join(transition_output, " TRANSITION ")
  48. transition_output = string_join(transition_output, name)
  49. transition_output = string_join(transition_output, " CONSUME ")
  50. associations = allIncomingAssociationInstances(model, transition, "PN/P2T")
  51. while (set_len(associations) > 0):
  52. association = set_pop(associations)
  53. place = readAssociationSource(model, association)
  54. weight = read_attribute(model, association, "weight")
  55. if cast_s2i(weight) > 0:
  56. transition_output = string_join(transition_output, read_attribute(model, place, "name"))
  57. transition_output = string_join(transition_output, ": ")
  58. transition_output = string_join(transition_output, weight)
  59. if list_len(associations) == 0:
  60. transition_output = string_join(transition_output, ";")
  61. else:
  62. transition_output = string_join(transition_output, ", ")
  63. transition_output = string_join(transition_output, " PRODUCE ")
  64. associations = allOutgoingAssociationInstances(model, transition, "PN/T2P")
  65. while (set_len(associations) > 0):
  66. association = set_pop(associations)
  67. place = readAssociationDestination(model, association)
  68. weight = read_attribute(model, association, "weight")
  69. if cast_s2i(weight) > 0:
  70. transition_output = string_join(transition_output, read_attribute(model, place, "name"))
  71. transition_output = string_join(transition_output, ": ")
  72. transition_output = string_join(transition_output, weight)
  73. if list_len(associations) == 0:
  74. transition_output = string_join(transition_output, ";")
  75. else:
  76. transition_output = string_join(transition_output, ", ")
  77. lola_net = string_join(lola_net, transition_output)
  78. all_places = allInstances(model, "Query/Place")
  79. if set_len(all_places) > 0:
  80. place = set_pop(all_places)
  81. name = read_attribute(model, place, "name")
  82. tokens = read_attribute(model, place, "tokens")
  83. query = string_join(name, ' = ')
  84. query = string_join(query, cast_i2s(tokens))
  85. log("PETRINET OUTPUT")
  86. log(lola_net)
  87. log("\n QUERY OUTPUT")
  88. log(query)
  89. output = string_join("{\"petrinet\":\"", lola_net)
  90. output = string_join(output, "\" , \"query\":\"")
  91. output = string_join(output, query)
  92. output = string_join(output, "\"}")
  93. log("\n JSON OUTPUT")
  94. log(output)
  95. String port
  96. port = comm_connect("lola")
  97. comm_set(port, output)
  98. String result
  99. String path
  100. result = comm_get(port)
  101. path = comm_get(port)
  102. log("\nLola safety query analysis result: " + result)
  103. log("\nLola path: "+path)
  104. comm_close(port)
  105. return True!