fsa_simulate.alc 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. include "primitives.alh"
  2. include "modelling.alh"
  3. include "object_operations.alh"
  4. include "conformance_scd.alh"
  5. include "io.alh"
  6. include "metamodels.alh"
  7. include "mini_modify.alh"
  8. Boolean function main(model : Element):
  9. String input_value
  10. Float start_time
  11. String current_state
  12. String old_state
  13. Element transitions
  14. String transition
  15. start_time = time() - cast_float(read_attribute(model, set_pop(allInstances(model, "FullRuntime/Time")), "current_time"))
  16. Element all_states
  17. String element_name
  18. all_states = allInstances(model, "FullRuntime/State")
  19. while (set_len(all_states) > 0):
  20. element_name = set_pop(all_states)
  21. log("Check " + cast_value(read_attribute(model, element_name, "name")))
  22. log(" Current: " + cast_value(read_attribute(model, element_name, "current")))
  23. if (value_eq(read_attribute(model, element_name, "current"), True)):
  24. log("Found current: " + cast_value(read_attribute(model, element_name, "current")))
  25. current_state = element_name
  26. old_state = element_name
  27. break!
  28. while (True):
  29. if (has_input()):
  30. input_value = input()
  31. if (input_value == "__EXIT__"):
  32. break!
  33. log(cast_value(time() - start_time) + " input " + input_value)
  34. output(cast_value(time() - start_time) + " input " + input_value)
  35. transitions = allOutgoingAssociationInstances(model, current_state, "FullRuntime/Transition")
  36. while (set_len(transitions) > 0):
  37. transition = set_pop(transitions)
  38. if (cast_string(read_attribute(model, transition, "trigger")) == input_value):
  39. if (element_neq(read_attribute(model, transition, "raise"), read_root())):
  40. log(cast_value(time() - start_time) + " output " + cast_string(read_attribute(model, transition, "raise")))
  41. output(cast_value(time() - start_time) + " output " + cast_string(read_attribute(model, transition, "raise")))
  42. current_state = readAssociationDestination(model, transition)
  43. break!
  44. log(cast_value(time() - start_time) + " state " + cast_string(read_attribute(model, current_state, "name")))
  45. output(cast_value(time() - start_time) + " state " + cast_string(read_attribute(model, current_state, "name")))
  46. sleep(0.2)
  47. log("CLOSE")
  48. output("CLOSE")
  49. instantiate_attribute(model, current_state, "current", True)
  50. instantiate_attribute(model, old_state, "current", True)
  51. instantiate_attribute(model, set_pop(allInstances(model, "FullRuntime/Time")), "current_time", time() - start_time)
  52. return True!