token.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. STRING = "STRING"
  15. // Operators
  16. ASSIGN = "="
  17. PLUS = "+"
  18. MINUS = "-"
  19. BANG = "!"
  20. ASTERISK = "*"
  21. SLASH = "/"
  22. LT = "<"
  23. GT = ">"
  24. EQ = "=="
  25. NotEq = "!="
  26. // Delimiters
  27. COMMA = ","
  28. SEMICOLON = ";"
  29. COLON = ":"
  30. LPAREN = "("
  31. RPAREN = ")"
  32. LBRACE = "{"
  33. RBRACE = "}"
  34. LBRACKET = "["
  35. RBRACKET = "]"
  36. // Keywords
  37. FUNCTION = "FUNCTION"
  38. LET = "LET"
  39. TRUE = "TRUE"
  40. FALSE = "FALSE"
  41. IF = "IF"
  42. ELSE = "ELSE"
  43. RETURN = "RETURN"
  44. )
  45. var keyword = map[string]TypeToken{
  46. "fn": FUNCTION,
  47. "let": LET,
  48. "true": TRUE,
  49. "false": FALSE,
  50. "if": IF,
  51. "else": ELSE,
  52. "return": RETURN,
  53. }
  54. func LookupIdent(ident string) TypeToken {
  55. if tok, ok := keyword[ident]; ok {
  56. return tok
  57. }
  58. return IDENT
  59. }
  60. type TypeToken string
  61. type Token struct {
  62. Type TypeToken
  63. Literal string
  64. }