node.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package node
  2. import (
  3. "fw/cp/constant/enter"
  4. "fw/cp/constant/operation"
  5. "fw/cp/constant/statement"
  6. "fw/cp/object"
  7. )
  8. type Node interface {
  9. SetLeft(n Node)
  10. SetRight(n Node)
  11. SetLink(n Node)
  12. SetObject(o object.Object)
  13. Left() Node
  14. Right() Node
  15. Link() Node
  16. Object() object.Object
  17. }
  18. type EnterNode interface {
  19. Enter() enter.Enter
  20. SetEnter(enter enter.Enter)
  21. Node
  22. }
  23. type OperationNode interface {
  24. SetOperation(op operation.Operation)
  25. Operation() operation.Operation
  26. Node
  27. }
  28. type ConstantNode interface {
  29. SetType(typ object.Type)
  30. SetData(data interface{})
  31. Data() interface{}
  32. Type() object.Type
  33. Min() *int
  34. Max() *int
  35. SetMin(int)
  36. SetMax(int)
  37. Node
  38. }
  39. // Self-designator for empty interfaces
  40. type AssignNode interface {
  41. self() AssignNode
  42. SetStatement(statement.Statement)
  43. Statement() statement.Statement
  44. Node
  45. }
  46. type VariableNode interface {
  47. self() VariableNode
  48. Node
  49. }
  50. type CallNode interface {
  51. self() CallNode
  52. Node
  53. }
  54. type ProcedureNode interface {
  55. self() ProcedureNode
  56. Node
  57. }
  58. type ParameterNode interface {
  59. Node
  60. self() ParameterNode
  61. }
  62. type ReturnNode interface {
  63. Node
  64. self() ReturnNode
  65. }
  66. type DyadicNode interface {
  67. OperationNode
  68. self() DyadicNode
  69. }
  70. type MonadicNode interface {
  71. OperationNode
  72. SetType(typ object.Type)
  73. Type() object.Type
  74. self() MonadicNode
  75. }
  76. type ConditionalNode interface {
  77. self() ConditionalNode
  78. Node
  79. }
  80. type IfNode interface {
  81. self() IfNode
  82. Node
  83. }
  84. type WhileNode interface {
  85. self() WhileNode
  86. Node
  87. }
  88. type RepeatNode interface {
  89. self() RepeatNode
  90. Node
  91. }
  92. type ExitNode interface {
  93. self() ExitNode
  94. Node
  95. }
  96. type LoopNode interface {
  97. self() LoopNode
  98. Node
  99. }
  100. type DerefNode interface {
  101. self() DerefNode
  102. Node
  103. }
  104. type FieldNode interface {
  105. self() FieldNode
  106. Node
  107. }
  108. type IndexNode interface {
  109. self() IndexNode
  110. Node
  111. }
  112. type TrapNode interface {
  113. self() TrapNode
  114. Node
  115. }
  116. type WithNode interface {
  117. self() WithNode
  118. Node
  119. }
  120. type GuardNode interface {
  121. self() GuardNode
  122. Node
  123. Type() object.ComplexType
  124. SetType(object.ComplexType)
  125. }
  126. type CaseNode interface {
  127. self() CaseNode
  128. Node
  129. }
  130. type ElseNode interface {
  131. Node
  132. Min(...int) int
  133. Max(...int) int
  134. // SetMin(int)
  135. // SetMax(int)
  136. }
  137. type DoNode interface {
  138. self() DoNode
  139. Node
  140. }