token.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package token
  2. /**
  3. * @Author: simon
  4. * @Author: ynwdlxm@163.com
  5. * @Date: 2022/10/2 上午10:44
  6. * @Desc:
  7. */
  8. const (
  9. ILLEGAL = "ILLEGAL"
  10. EOF = "EOF"
  11. // Identifiers + literals
  12. IDENT = "IDENT" // add, foobar, x, y ...
  13. INT = "INT" // 123456
  14. // Operators
  15. ASSIGN = "="
  16. PLUS = "+"
  17. MINUS = "-"
  18. BANG = "!"
  19. ASTERISK = "*"
  20. SLASH = "/"
  21. LT = "<"
  22. GT = ">"
  23. EQ = "=="
  24. NOT_EQ = "!="
  25. // Delimiters
  26. COMMA = ","
  27. SEMICOLON = ";"
  28. LPAREN = "("
  29. RPAREN = ")"
  30. LBRACE = "{"
  31. RBRACE = "}"
  32. // Keywords
  33. FUNCTION = "FUNCTION"
  34. LET = "LET"
  35. TRUE = "TRUE"
  36. FALSE = "FALSE"
  37. IF = "IF"
  38. ELSE = "ELSE"
  39. RETURN = "RETURN"
  40. )
  41. var keyword = map[string]TypeToken{
  42. "fn": FUNCTION,
  43. "let": LET,
  44. "true": TRUE,
  45. "false": FALSE,
  46. "if": IF,
  47. "else": ELSE,
  48. "return": RETURN,
  49. }
  50. func LookupIdent(ident string) TypeToken {
  51. if tok, ok := keyword[ident]; ok {
  52. return tok
  53. }
  54. return IDENT
  55. }
  56. type TypeToken string
  57. type Token struct {
  58. Type TypeToken
  59. Literal string
  60. }