diff options
Diffstat (limited to 'lex.h')
| -rw-r--r-- | lex.h | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -22,6 +22,10 @@ X(EQUALS, "=")\ X(COLON, ":")\ X(COMMA, ",")\ + X(NOT, "~")\ + X(AND, "&")\ + X(OR, "|")\ + X(XOR, "^")\ X(LIT_STR, "string literal")\ X(LIT_CHAR, "character literal")\ X(LIT_NUM, "numeric literal") @@ -37,7 +41,12 @@ X(TOK_SLASH, '/')\ X(TOK_EQUALS, '=')\ X(TOK_COLON, ':')\ - X(TOK_COMMA, ',') + X(TOK_COMMA, ',')\ + X(TOK_NOT, '~')\ + X(TOK_AND, '&')\ + X(TOK_OR, '|')\ + X(TOK_XOR, '^') + typedef enum { #define X(n, s) TOK_##n, @@ -61,8 +70,13 @@ typedef enum { } TokMask; typedef struct { + int ofs, n; +} LexSpan; + +typedef struct { Token tok; Str ident; + LexSpan pos; Str filename, buf; Arena arena; int ofs; @@ -79,8 +93,9 @@ void lex_expected(Lexer *l, TokMask t); void lex_expected_not(Lexer *l, TokMask t); void lex_expect(Lexer *l, TokMask t); /* next -> expected */ void lex_expect_not(Lexer *l, TokMask t); /* next -> expected_not */ +void lex_error_at(Lexer *l, LexSpan pos, LexErr e, Str msg); void lex_error(Lexer *l, LexErr e, Str msg); -void lex_pos(Lexer *l, int *line, int *col); +void lex_pos(Lexer *l, int ofs, int *line, int *col); void lex_next(Lexer *l); #endif |
