Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.05 KB | None | 0 0
  1. class ProgramNode(
  2.         val procedures: ArrayList<ProcedureNode>
  3. )
  4.  
  5. class ProcedureNode(
  6.         val statementListNode: StatementListNode
  7. )
  8.  
  9. class StatementListNode(
  10.         val statementList: ArrayList<StatementNode>
  11. )
  12.  
  13. open class StatementNode
  14.  
  15. class AssignNode(
  16.         val variable: VariableNode,
  17.         val expr: ExpressionNode
  18. ) : StatementNode()
  19.  
  20. class CallNode(
  21.         val procedure: ProcedureNode
  22. ) : StatementNode()
  23.  
  24. class WhileNode(
  25.         val variable: VariableNode,
  26.         val statementList: StatementListNode
  27. ) : StatementNode()
  28.  
  29. class IfNode(
  30.         val variable: VariableNode,
  31.         val thenStatementList: StatementListNode,
  32.         val elseStatementList: StatementListNode
  33. ) : StatementNode()
  34.  
  35. open class ValueNode
  36.  
  37. class VariableNode(
  38.         val name: String,
  39.         val value: ExpressionNode = RefExpression(ConstantNode(0))
  40. ) : ValueNode()
  41.  
  42. class ConstantNode(
  43.         val value: Int
  44. ) : ValueNode()
  45.  
  46. abstract class ExpressionNode {
  47.     abstract fun evaluate() : Int
  48. }
  49.  
  50. class PlusExpression(
  51.         val expr0: ExpressionNode,
  52.         val expr1: ExpressionNode
  53. ) : ExpressionNode() {
  54.     override fun evaluate(): Int {
  55.         return expr0.evaluate() + expr1.evaluate()
  56.     }
  57. }
  58.  
  59. class MinusExpression(
  60.         val expr0: ExpressionNode,
  61.         val expr1: ExpressionNode
  62. ) : ExpressionNode() {
  63.     override fun evaluate(): Int {
  64.         return expr0.evaluate() + expr1.evaluate()
  65.     }
  66. }
  67.  
  68. class TimesExpression(
  69.         val expr0: ExpressionNode,
  70.         val expr1: ExpressionNode
  71. ) : ExpressionNode() {
  72.     override fun evaluate(): Int {
  73.         return expr0.evaluate() + expr1.evaluate()
  74.     }
  75. }
  76.  
  77. class RefExpression(
  78.         val ref: ValueNode
  79. ) : ExpressionNode() {
  80.     override fun evaluate(): Int {
  81.         when (ref) {
  82.             is VariableNode -> return ref.value.evaluate()
  83.             is ConstantNode -> return ref.value
  84.         }
  85.         throw IllegalStateException("Ref expression tried to fetch value of something that is neither Variable or ConstantNode")
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement