nodes.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from __future__ import annotations
  2. from dataclasses import dataclass
  3. import src.zelkelc.ast.values as values
  4. @dataclass
  5. class ClassDeclaration:
  6. name: str
  7. members: list[ValueDeclaration]
  8. methods: list[FunctionDeclaration]
  9. irname: str
  10. @dataclass
  11. class StructDeclaration:
  12. name: str
  13. members: list[MemberDeclaration]
  14. irname: str
  15. @dataclass
  16. class MemberDeclaration:
  17. name: str
  18. mutable: bool
  19. typ: values.Value
  20. real_idx: int
  21. @dataclass
  22. class ValueDeclaration:
  23. name: str
  24. mutable: bool
  25. typ: values.Value
  26. expr: Expression
  27. irname: str
  28. @dataclass
  29. class FunctionDeclaration:
  30. name: str
  31. typ: values.Value
  32. args: dict[str, values.Value]
  33. body: list[Node]
  34. irname: str
  35. @dataclass
  36. class ReturnStatement:
  37. expr: Expression | None
  38. Node = ClassDeclaration | ValueDeclaration | FunctionDeclaration | StructDeclaration
  39. @dataclass
  40. class BinaryExpression:
  41. left: Expression
  42. right: Expression
  43. op: str
  44. @dataclass
  45. class UnaryExpression:
  46. expr: Expression
  47. sign: str
  48. @dataclass
  49. class PrimaryExpression:
  50. value: values.Value
  51. Expression = BinaryExpression | UnaryExpression | PrimaryExpression