statechart.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from sccd.statechart.static.tree import *
  2. from sccd.action_lang.static.scope import *
  3. from sccd.statechart.static.semantic_configuration import *
  4. @dataclass(eq=False)
  5. class Statechart(Visitable):
  6. # __slots__ = ["semantics", "scope", "datamodel", "in_events", "out_events", "internal_events", "tree"]
  7. # Semantic configuration for statechart execution
  8. semantics: SemanticConfiguration = field(default_factory=SemanticConfiguration)
  9. # Instance scope, the set of variable names (and their types and offsets in memory) that belong to the statechart
  10. scope: Scope = None # for datamodel
  11. # Block of statements setting up the datamodel (variables in instance scope)
  12. datamodel: Optional[Block] = None
  13. # Mapping from event name to event parameter types
  14. in_events: Dict[str, List[SCCDType]] = field(default_factory=dict)
  15. # Mapping from event name to event parameter types
  16. out_events: Dict[str, List[SCCDType]] = field(default_factory=dict)
  17. # Mapping from event name to event parameter types
  18. internal_events: Dict[str, List[SCCDType]] = field(default_factory=dict)
  19. tree: StateTree = None
  20. def generate_semantic_variants(self) -> List['Statechart']:
  21. return [
  22. Statechart(
  23. semantics=variant,
  24. # All other fields remain the same.
  25. scope=self.scope,
  26. datamodel=self.datamodel,
  27. in_events=self.in_events,
  28. out_events=self.out_events,
  29. internal_events=self.internal_events,
  30. tree=self.tree)
  31. for variant in self.semantics.generate_variants()]