lexer.h 735 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #ifndef __sti__lexer_lexer_h__
  2. #define __sti__lexer_lexer_h__
  3. #define LEXER_TYPE_LIST(X) \
  4. X(unknown) \
  5. X(whitespace) \
  6. X(ident) \
  7. X(charlit) \
  8. X(stringlit) \
  9. X(number) \
  10. X(comment) \
  11. X(punct) \
  12. enum {
  13. #define X(a,...) LEXER_TOKEN_TYPE_##a,
  14. LEXER_TYPE_LIST(X)
  15. #undef X
  16. };
  17. typedef struct lexer_token {
  18. long start_line, start_col;
  19. long end_line, end_col;
  20. char* text; // interred string, used as the token type
  21. size_t text_len;
  22. char sol, eol;
  23. char type;
  24. char is_generic;
  25. void* id; // doesn't appear to be used...
  26. } lexer_token_t;
  27. typedef struct lexer_opts {
  28. void (*got_token)(lexer_token_t*);
  29. char** symbols;
  30. } lexer_opts_t;
  31. int lex_file(char* path, lexer_opts_t* opts);
  32. #endif