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.

lexer.h 1.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef LEXER_H
  2. #define LEXER_H
  3. #define LEXER_REGEX_WHITESPACE "\\s+"
  4. #define LEXER_REGEX_IDENTIFIER "[a-zA-Z][a-zA-Z0-9]*"
  5. #define LEXER_REGEX_KEYWORD "if|ret|func|str|arr|err|null"
  6. #define LEXER_REGEX_OPERATOR "=|=="
  7. #define LEXER_REGEX_INTEGER "[0-9]+"
  8. #define LEXER_REGEX_STRING "\\\"[^\\\"]*\\\""
  9. #define LEXER_REGEX_COMMA "\\,"
  10. #define LEXER_REGEX_OPENBRACE "\\{"
  11. #define LEXER_REGEX_CLOSEBRACE "\\}"
  12. #define LEXER_REGEX_OPENPAREN "\\("
  13. #define LEXER_REGEX_CLOSEPAREN "\\)"
  14. typedef enum lexer_token_class
  15. {
  16. LEXER_TOKEN_WHITESPACE,
  17. LEXER_TOKEN_IDENTIFIER,
  18. LEXER_TOKEN_KEYWORD,
  19. LEXER_TOKEN_OPERATOR,
  20. LEXER_TOKEN_INTEGER,
  21. LEXER_TOKEN_STRING,
  22. LEXER_TOKEN_COMMA,
  23. LEXER_TOKEN_OPENBRACE,
  24. LEXER_TOKEN_CLOSEBRACE,
  25. LEXER_TOKEN_OPENPAREN,
  26. LEXER_TOKEN_CLOSEPAREN,
  27. LEXER_TOKEN_NONE
  28. } lexer_token_class;
  29. typedef struct lexer_token
  30. {
  31. lexer_token_class tokenClass;
  32. char* str;
  33. size_t len;
  34. } lexer_token;
  35. typedef struct lexer_tokens
  36. {
  37. lexer_token* pairs;
  38. size_t length;
  39. size_t allocd;
  40. } lexer_tokens;
  41. lexer_tokens* lexer_analyze(char* str);
  42. #endif