/* retoor <retoor@molodetz.nl> */
#ifndef LOREX_LEXER_H
#define LOREX_LEXER_H
#include <stddef.h>
#include <stdbool.h>
typedef enum {
TOKEN_CHAR,
TOKEN_DOT,
TOKEN_STAR,
TOKEN_PLUS,
TOKEN_QUESTION,
TOKEN_PIPE,
TOKEN_LPAREN,
TOKEN_RPAREN,
TOKEN_LBRACKET,
TOKEN_RBRACKET,
TOKEN_CARET,
TOKEN_DOLLAR,
TOKEN_LBRACE,
TOKEN_RBRACE,
TOKEN_BACKSLASH,
TOKEN_DASH,
TOKEN_CLASS_DIGIT,
TOKEN_CLASS_WORD,
TOKEN_CLASS_SPACE,
TOKEN_CLASS_NDIGIT,
TOKEN_CLASS_NWORD,
TOKEN_CLASS_NSPACE,
TOKEN_EOF
} token_type_t;
typedef struct {
token_type_t type;
char value;
size_t position;
} token_t;
typedef struct {
const char *pattern;
size_t length;
size_t position;
bool in_bracket;
} lexer_t;
void lexer_init(lexer_t *lexer, const char *pattern);
token_t lexer_next(lexer_t *lexer);
token_t lexer_peek(lexer_t *lexer);
bool lexer_eof(lexer_t *lexer);
#endif