#include "lexer.h" #include #include #include Lexer initLexer(char *source) { Lexer newLexer = { .source = source, .position = -1, .readPosition = 0, .lineNumber = 1, .currentChar = '\0' }; return newLexer; } void readChar(Lexer *lexer) { if (lexer->readPosition >= strlen(lexer->source)) lexer->currentChar = '\0'; else lexer->currentChar = lexer->source[lexer->readPosition]; lexer->position = lexer->readPosition; lexer->readPosition++; } void skipWhitespace(Lexer *lexer) { switch (lexer->currentChar) { case ' ': case '\t': case '\n': case '\r': if (lexer->currentChar == '\n') lexer->lineNumber++; readChar(lexer); break; default: break; } } Token nextToken(Lexer *lexer) { //Token tok; skipWhitespace(lexer); switch (lexer->currentChar) { case '+': return NEW_TOKEN(lexer, PLUS, "+"); break; case '-': return NEW_TOKEN(lexer, MINUS, "-"); break; case '*': return NEW_TOKEN(lexer, ASTERISK, "*"); break; case '/': return NEW_TOKEN(lexer, SLASH, "/"); break; case '%': return NEW_TOKEN(lexer, MODULUS, "%"); break; case '^': return NEW_TOKEN(lexer, POW, "^"); break; case '(': return NEW_TOKEN(lexer, LPAREN, "("); break; case ')': return NEW_TOKEN(lexer, RPAREN, ")"); break; case '\0': return NEW_TOKEN(lexer, EOF, ""); break; default: if (isdigit()) break; } //return tok; }