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 1.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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_COLON_EQ,
  14. L2_TOK_EOL,
  15. L2_TOK_EOF,
  16. L2_TOK_NUMBER,
  17. L2_TOK_STRING,
  18. L2_TOK_IDENT,
  19. L2_TOK_ERROR,
  20. };
  21. const char *l2_token_kind_name(enum l2_token_kind kind);
  22. struct l2_token {
  23. enum l2_token_kind kind;
  24. int line;
  25. int ch;
  26. union {
  27. char *str;
  28. double num;
  29. } v;
  30. };
  31. void l2_token_free(struct l2_token *tok);
  32. char *l2_token_extract_str(struct l2_token *tok);
  33. void l2_token_print(struct l2_token *tok, struct l2_io_writer *w);
  34. struct l2_lexer {
  35. struct l2_token toks[4];
  36. int tokidx;
  37. int line;
  38. int ch;
  39. int parens;
  40. struct l2_bufio_reader reader;
  41. };
  42. void l2_lexer_init(struct l2_lexer *lexer, struct l2_io_reader *r);
  43. struct l2_token *l2_lexer_peek(struct l2_lexer *lexer, int count);
  44. void l2_lexer_consume(struct l2_lexer *lexer);
  45. void l2_lexer_skip_opt(struct l2_lexer *lexer, enum l2_token_kind kind);
  46. #endif