analyze_lola.alc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. String outp
  21. all_places = allInstances(model, "PN/Place")
  22. log("ALL PLACES")
  23. log(cast_string(list_len(all_places)))
  24. place_output = "PLACE "
  25. marking_output = "MARKING "
  26. while (set_len(all_places) > 0):
  27. place = set_pop(all_places)
  28. name = read_attribute(model, place, "name")
  29. tokens = read_attribute(model, place, "tokens")
  30. place_output = string_join(place_output, name)
  31. if tokens > 0:
  32. if marking_output != "MARKING ":
  33. marking_output = string_join(marking_output, ", ")
  34. marking_output = string_join(marking_output, name)
  35. marking_output = string_join(marking_output, ": ")
  36. marking_output = string_join(marking_output, cast_string(tokens))
  37. if list_len(all_places) == 0:
  38. place_output = string_join(place_output, ";")
  39. marking_output = string_join(marking_output, ";")
  40. else:
  41. place_output = string_join(place_output, ", ")
  42. lola_net = string_join(place_output, marking_output)
  43. all_transitions = allInstances(model, "PN/Transition")
  44. transition_output = ""
  45. while (set_len(all_transitions) > 0):
  46. transition = set_pop(all_transitions)
  47. name = read_attribute(model, transition, "name")
  48. transition_output = string_join(transition_output, " TRANSITION ")
  49. transition_output = string_join(transition_output, name)
  50. transition_output = string_join(transition_output, " CONSUME ")
  51. associations = allIncomingAssociationInstances(model, transition, "PN/P2T")
  52. while (set_len(associations) > 0):
  53. association = set_pop(associations)
  54. place = readAssociationSource(model, association)
  55. weight = read_attribute(model, association, "weight")
  56. if cast_integer(weight) > 0:
  57. transition_output = string_join(transition_output, read_attribute(model, place, "name"))
  58. transition_output = string_join(transition_output, ": ")
  59. transition_output = string_join(transition_output, weight)
  60. if list_len(associations) == 0:
  61. transition_output = string_join(transition_output, ";")
  62. else:
  63. transition_output = string_join(transition_output, ", ")
  64. transition_output = string_join(transition_output, " PRODUCE ")
  65. associations = allOutgoingAssociationInstances(model, transition, "PN/T2P")
  66. while (set_len(associations) > 0):
  67. association = set_pop(associations)
  68. place = readAssociationDestination(model, association)
  69. weight = read_attribute(model, association, "weight")
  70. if cast_integer(weight) > 0:
  71. transition_output = string_join(transition_output, read_attribute(model, place, "name"))
  72. transition_output = string_join(transition_output, ": ")
  73. transition_output = string_join(transition_output, weight)
  74. if list_len(associations) == 0:
  75. transition_output = string_join(transition_output, ";")
  76. else:
  77. transition_output = string_join(transition_output, ", ")
  78. lola_net = string_join(lola_net, transition_output)
  79. all_places = allInstances(model, "Query/Place")
  80. if set_len(all_places) > 0:
  81. place = set_pop(all_places)
  82. name = read_attribute(model, place, "name")
  83. tokens = read_attribute(model, place, "tokens")
  84. query = string_join(name, ' = ')
  85. query = string_join(query, cast_string(tokens))
  86. log("PETRINET OUTPUT")
  87. log(lola_net)
  88. log("\n QUERY OUTPUT")
  89. log(query)
  90. outp = string_join("{\"petrinet\":\"", lola_net)
  91. outp = string_join(outp, "\" , \"query\":\"")
  92. outp = string_join(outp, query)
  93. outp = string_join(outp, "\"}")
  94. log("\n JSON OUTPUT")
  95. log(outp)
  96. String port
  97. port = comm_connect("lola")
  98. comm_set(port, outp)
  99. String result
  100. String path
  101. result = comm_get(port)
  102. path = comm_get(port)
  103. log("\nLola safety query analysis result: " + result)
  104. log("\nLola path: "+path)
  105. comm_close(port)
  106. return True!