You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

lex.h 855B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #ifndef L2_PARSE_LEX_H
  2. #define L2_PARSE_LEX_H
  3. #include "../io.h"
  4. enum l2_token_kind {
  5. L2_TOK_OPEN_PAREN,
  6. L2_TOK_CLOSE_PAREN,
  7. L2_TOK_OPEN_BRACE,
  8. L2_TOK_CLOSE_BRACE,
  9. L2_TOK_OPEN_BRACKET,
  10. L2_TOK_CLOSE_BRACKET,
  11. L2_TOK_COMMA,
  12. L2_TOK_PERIOD,
  13. L2_TOK_NUMBER,
  14. L2_TOK_EOF,
  15. L2_TOK_STRING,
  16. L2_TOK_ERROR,
  17. };
  18. struct l2_token {
  19. enum l2_token_kind kind;
  20. int line;
  21. int ch;
  22. union {
  23. char *str;
  24. double num;
  25. } v;
  26. };
  27. void l2_token_free(struct l2_token *tok);
  28. struct l2_token l2_token_move(struct l2_token *tok);
  29. struct l2_lexer {
  30. struct l2_token currtok;
  31. struct l2_token toks[2];
  32. int tokidx;
  33. int line;
  34. int ch;
  35. struct l2_bufio_reader reader;
  36. };
  37. void l2_lexer_init(struct l2_lexer *lexer, struct l2_io_reader *r);
  38. struct l2_token *l2_lexer_peek(struct l2_lexer *lexer, int count);
  39. struct l2_token *l2_lexer_get(struct l2_lexer *lexer);
  40. #endif