#ifndef LEX_H #define LEX_H enum lexcode { Lok = 1, Lerror, /* Returned when lexer could not produce any tokens from * current input, but no error was detected either */ Lmore, }; struct lexresult { enum lexcode res; union { struct token token; char *errmsg; }; }; /** * lexbuf is a sans-io implementation. The user must provide input * bytes and a length. */ struct lexstate { u8 buf[4096]; usize pos; /* current position in buffer */ usize len; /* user-provided length of input */ /* already lexed tokens that aren't yet consumed */ struct lexresult results[4096]; usize nres; usize respos; /* line and column info */ usize lineno; usize column; }; struct lexresult lex(struct lexstate *); void lexreset(struct lexstate *); void lexfeed(struct lexstate *, usize len, u8 *data); #endif