token.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. // Keywords
  34. FUNCTION = "FUNCTION"
  35. LET = "LET"
  36. TRUE = "TRUE"
  37. FALSE = "FALSE"
  38. IF = "IF"
  39. ELSE = "ELSE"
  40. RETURN = "RETURN"
  41. )
  42. var keyword = map[string]TypeToken{
  43. "fn": FUNCTION,
  44. "let": LET,
  45. "true": TRUE,
  46. "false": FALSE,
  47. "if": IF,
  48. "else": ELSE,
  49. "return": RETURN,
  50. }
  51. func LookupIdent(ident string) TypeToken {
  52. if tok, ok := keyword[ident]; ok {
  53. return tok
  54. }
  55. return IDENT
  56. }
  57. type TypeToken string
  58. type Token struct {
  59. Type TypeToken
  60. Literal string
  61. }