lexer
static int lex_init(struct lexer *lex, const char *in, size_t in_len)
static int lex_do(struct lexer *lex)
static int lex_eot(struct lexer *lex)
static int lex_peek_char(struct lexer *lex)
static int lex_skip_char(struct lexer *lex)
static int lex_match(struct lexer *lex, const char *s, size_t s_len)
static void lex_get_rest(struct lexer *lex, const char **str, size_t *str_l)
static int lex_extract_to(struct lexer *lex, char c,
static int lex_fail(struct lexer *lex, const char *msg)
struct lexer lex = { 0 };