27 lines
622 B
C
27 lines
622 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, yyget_lineno(scanner), state.current_column + 1,
|
|
yyget_text(scanner));
|
|
darray_push(state.tokens, token_struct);
|
|
free(token_struct);
|
|
if (token == TOKEN_NEW_LINE) {
|
|
state.current_column = 0;
|
|
} else {
|
|
state.current_column += yyget_leng(scanner);
|
|
}
|
|
}
|
|
yylex_destroy(scanner);
|
|
} |