DEPRECATED_fsasimulator.sccd 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. Diagram(name = 'FSASimulator',
  2. author = 'Sadaf Mustafiz and Bruno Barroca and Claudio Gomes',
  3. description = 'An FSA simulator written in SCCD. It supports after and events.'):
  4. Top {
  5. import fsaclasses
  6. }
  7. Class(name = 'FSASimulator', default = True):
  8. Attribute(name = 'timestep')
  9. Attribute(name = 'elapsed')
  10. Attribute(name = 'currentState')
  11. Attribute(name = 'logicalTime')
  12. Attribute(name = 'currentEvent')
  13. Attribute(name = 'selectedTransition')
  14. Attribute(name = 'eventList')
  15. Attribute(name = 'model')
  16. Constructor(amodel, events) {
  17. self.model = amodel
  18. self.eventList = events
  19. }
  20. Method getInputEventAt(time) {
  21. return self.eventList->getInputAt(time)
  22. }
  23. Method processEvent(event) {
  24. if (event != None):
  25. self.eventList->popEvent(event)
  26. event.processed = True
  27. end
  28. }
  29. StateMachine:
  30. initial = 'Start'
  31. final = 'End'
  32. State('Start'):
  33. Transition(target='../Check'):
  34. Actions {
  35. self.logicalTime = 0
  36. self.elapsed = 0
  37. self.timestep = 1.0
  38. self.currentState = self.model.initialState
  39. }
  40. State('Check'):
  41. Transition(target='../Processing'):
  42. guard = { self.currentState.final == False }
  43. Actions {
  44. print('going to process... ')
  45. }
  46. Transition(target='../End'):
  47. guard = { self.currentState.final == True }
  48. Actions {
  49. print('going to end... ')
  50. }
  51. OnEnter {
  52. self.currentEvent = self->getInputEventAt(self.logicalTime)
  53. self.selectedTransition = self.model->getTransitionFrom(self.currentState, self.currentEvent, self.elapsed)
  54. }
  55. State('Processing'):
  56. Transition(target='../Check'):
  57. guard = {self.selectedTransition != None}
  58. Actions {
  59. self.currentState = self.selectedTransition.target
  60. self.elapsed = 0
  61. self->processEvent(self.currentEvent)
  62. print("changing to state: ")
  63. print(self.currentState->getName())
  64. print(self.logicalTime)
  65. print(self.elapsed)
  66. }
  67. Transition(target='../Check'):
  68. guard = {self.selectedTransition == None}
  69. Actions {
  70. self.logicalTime = self.logicalTime + self.timestep
  71. self.elapsed = self.elapsed + self.timestep
  72. print(self.logicalTime)
  73. print(self.elapsed)
  74. }
  75. State('End')