1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #ifndef LEXER_H
- #define LEXER_H
-
- #define LEXER_REGEX_WHITESPACE "\\s+"
- #define LEXER_REGEX_IDENTIFIER "[a-zA-Z][a-zA-Z0-9]*"
- #define LEXER_REGEX_KEYWORD "if|ret|func|str|arr|err|null"
- #define LEXER_REGEX_OPERATOR "=|=="
-
- #define LEXER_REGEX_INTEGER "[0-9]+"
- #define LEXER_REGEX_STRING "\\\"[^\\\"]*\\\""
-
- #define LEXER_REGEX_COMMA "\\,"
- #define LEXER_REGEX_OPENBRACE "\\{"
- #define LEXER_REGEX_CLOSEBRACE "\\}"
- #define LEXER_REGEX_OPENPAREN "\\("
- #define LEXER_REGEX_CLOSEPAREN "\\)"
-
- typedef enum lexer_token_class
- {
- LEXER_TOKEN_WHITESPACE,
- LEXER_TOKEN_IDENTIFIER,
- LEXER_TOKEN_KEYWORD,
- LEXER_TOKEN_OPERATOR,
-
- LEXER_TOKEN_INTEGER,
- LEXER_TOKEN_STRING,
-
- LEXER_TOKEN_COMMA,
- LEXER_TOKEN_OPENBRACE,
- LEXER_TOKEN_CLOSEBRACE,
- LEXER_TOKEN_OPENPAREN,
- LEXER_TOKEN_CLOSEPAREN,
-
- LEXER_TOKEN_NONE
- } lexer_token_class;
-
- typedef struct lexer_token
- {
- lexer_token_class tokenClass;
- char* str;
- size_t len;
- } lexer_token;
-
- typedef struct lexer_tokens
- {
- lexer_token* pairs;
- size_t length;
- size_t allocd;
- } lexer_tokens;
-
- lexer_tokens* lexer_analyze(char* str);
-
- #endif
|