Guest User

Untitled

a guest
Dec 15th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. package checker
  2.  
  3. import (
  4. "errors"
  5. "fmt"
  6. "github.com/Lebonesco/go-compiler/ast"
  7. "reflect"
  8. )
  9.  
  10. func Checker(program *ast.Program) error {
  11. env = NewEnvironment() // reset environment
  12. _, err := checker(program)
  13. return err
  14. }
  15.  
  16. func checker(node ast.Node) (string, error) {
  17. switch node := node.(type) {
  18. // Statements
  19. case *ast.Program:
  20. return evalProgram(node)
  21. case *ast.BlockStatement:
  22. return evalBlockStatement(node)
  23. case *ast.ReturnStatement:
  24. return evalReturnStatement(node)
  25. case *ast.IfStatement:
  26. return evalIfStatement(node)
  27. case *ast.ExpressionStatement:
  28. return evalExpressionStatement(node)
  29. case *ast.AssignStatement:
  30. return evalAssignStatement(node)
  31. case *ast.InitStatement:
  32. return evalInitStatement(node)
  33. case *ast.FunctionStatement:
  34. return evalFunctionStatement(node)
  35. // Expressions
  36. case *ast.InfixExpression:
  37. return evalInfixExpression(node)
  38. case *ast.IntegerLiteral:
  39. return evalInteger(node)
  40. case *ast.StringLiteral:
  41. return evalString(node)
  42. case *ast.Boolean:
  43. return evalBoolean(node)
  44. case *ast.Identifier:
  45. return evalIdentifier(node)
  46. case *ast.FunctionCall:
  47. return evalFunctionCall(node)
  48. }
  49. return "", nil
  50. }
Add Comment
Please, Sign In to add comment