token.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. NOT_EQ = "!="
  26. // Delimiters
  27. COMMA = ","
  28. SEMICOLON = ";"
  29. LPAREN = "("
  30. RPAREN = ")"
  31. LBRACE = "{"
  32. RBRACE = "}"
  33. LBRACKET = "["
  34. RBRACKET = "]"
  35. // Keywords
  36. FUNCTION = "FUNCTION"
  37. LET = "LET"
  38. TRUE = "TRUE"
  39. FALSE = "FALSE"
  40. IF = "IF"
  41. ELSE = "ELSE"
  42. RETURN = "RETURN"
  43. )
  44. var keyword = map[string]TypeToken{
  45. "fn": FUNCTION,
  46. "let": LET,
  47. "true": TRUE,
  48. "false": FALSE,
  49. "if": IF,
  50. "else": ELSE,
  51. "return": RETURN,
  52. }
  53. func LookupIdent(ident string) TypeToken {
  54. if tok, ok := keyword[ident]; ok {
  55. return tok
  56. }
  57. return IDENT
  58. }
  59. type TypeToken string
  60. type Token struct {
  61. Type TypeToken
  62. Literal string
  63. }