Files
Chloride/src/lexer/lexer.c

28 lines
652 B
C

#include "lexer.h"
#include "lex.yy.h"
void lexer(LexerState state) {
yyscan_t scanner;
yylex_init(&scanner);
yyset_extra(&state, scanner);
yyset_in(state.file, scanner);
int token;
while ((token = yylex(scanner)) != 0) {
Token *token_struct =
create_token(token, state.current_line+1, state.current_column + 1,
yyget_text(scanner));
darray_push(state.tokens, token_struct);
free(token_struct);
if (token == TOKEN_NEW_LINE) {
state.current_line += 1;
state.current_column = 0;
} else {
state.current_column += yyget_leng(scanner);
}
}
yylex_destroy(scanner);
}