token.go 816 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package token
  2. type TokenType string
  3. type Token struct {
  4. Type TokenType
  5. Literal string
  6. }
  7. const (
  8. ILLEGAL = "ILLEGAL"
  9. EOF = "EOF"
  10. // Identifiers + literals.
  11. IDENT = "IDENT" // add, foobar, x, y, ...
  12. INT = "INT" // 123456, ...
  13. // Operators.
  14. ASSIGN = "="
  15. PLUS = "+"
  16. MINUS = "-"
  17. BANG = "!"
  18. ASTERISK = "*"
  19. SLASH = "/"
  20. LT = "<"
  21. GT = ">"
  22. // Delimiters.
  23. COMMA = ","
  24. SEMICOLON = ";"
  25. LPAREN = "("
  26. RPAREN = ")"
  27. LBRACE = "{"
  28. RBRACE = "}"
  29. // Keywords
  30. FUNCTION = "FUNCTION"
  31. LET = "LET"
  32. )
  33. var keywords = map[string]TokenType{
  34. "fn": FUNCTION,
  35. "let": LET,
  36. }
  37. // LookupIdent checks the keywords table to see whether the given identifier is
  38. // in fact a keyword.
  39. func LookupIdent(ident string) TokenType {
  40. if tok, ok := keywords[ident]; ok {
  41. return tok
  42. }
  43. return IDENT
  44. }