#ifndef LEXER_H #define LEXER_H #include "types.h" typedef enum { PIT_LEX_TOKEN_ERROR=-1, PIT_LEX_TOKEN_EOF=0, PIT_LEX_TOKEN_LPAREN, PIT_LEX_TOKEN_RPAREN, PIT_LEX_TOKEN_DOT, PIT_LEX_TOKEN_QUOTE, PIT_LEX_TOKEN_INTEGER_LITERAL, PIT_LEX_TOKEN_STRING_LITERAL, PIT_LEX_TOKEN_SYMBOL, PIT_LEX_TOKEN__SENTINEL } pit_lex_token; typedef struct { char *input; i64 len; /* length of input */ i64 start, end; /* bounds of the current token */ i64 line, column; /* for error reporting only; current line and column */ i64 start_line, start_column; /* for error reporting only; line and column of token start */ char *error; } pit_lexer; void pit_lex_cstr(pit_lexer *ret, char *buf); void pit_lex_bytes(pit_lexer *ret, char *buf, i64 len); void pit_lex_file(pit_lexer *ret, char *path); pit_lex_token pit_lex_next(pit_lexer *st); const char *pit_lex_token_name(pit_lex_token t); #endif