scanner.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /**
  2. ******************************************************************************
  3. * @file : scanner.h
  4. * @author : simon
  5. * @brief : None
  6. * @attention : None
  7. * @date : 2023/8/17
  8. ******************************************************************************
  9. */
  10. #ifndef CLOX__SCANNER_H_
  11. #define CLOX__SCANNER_H_
  12. typedef enum {
  13. /// Single-character tokens.
  14. TOKEN_LEFT_PAREN, TOKEN_RIGHT_PAREN,
  15. TOKEN_LEFT_BRACE, TOKEN_RIGHT_BRACE,
  16. TOKEN_COMMA, TOKEN_DOT, TOKEN_MINUS, TOKEN_PLUS,
  17. TOKEN_SEMICOLON, TOKEN_SLASH, TOKEN_STAR,
  18. /// One or two character tokens.
  19. TOKEN_BANG, TOKEN_BANG_EQUAL,
  20. TOKEN_EQUAL, TOKEN_EQUAL_EQUAL,
  21. TOKEN_GREATER, TOKEN_GREATER_EQUAL,
  22. TOKEN_LESS, TOKEN_LESS_EQUAL,
  23. /// Literals.
  24. TOKEN_IDENTIFIER, TOKEN_STRING, TOKEN_NUMBER,
  25. /// Keywords.
  26. TOKEN_AND, TOKEN_CLASS, TOKEN_ELSE, TOKEN_FALSE,
  27. TOKEN_FOR, TOKEN_FUN, TOKEN_IF, TOKEN_NIL, TOKEN_OR,
  28. TOKEN_PRINT, TOKEN_RETURN, TOKEN_SUPER, TOKEN_THIS,
  29. TOKEN_TRUE, TOKEN_VAR, TOKEN_WHILE,
  30. TOKEN_ERROR, TOKEN_EOF
  31. } TokenType;
  32. typedef struct {
  33. TokenType type;
  34. const char *start;
  35. int length;
  36. int line;
  37. } Token;
  38. void initScanner(const char *source);
  39. Token scanToken();
  40. #endif //CLOX__SCANNER_H_