#pragma once #include namespace LXC::Lexer { struct LexerContext final { // Constructor to set the information of the context // LexerContext(const std::string& _source); // Trackers for the Lexer itself // const std::string& source; __int32 index; LexerOutput out; const __int32 len; // Trackers for where the Lexer is within the user version of source // unsigned short column; unsigned short line; }; struct LexerError final { // Different reasons why the Lexer can fail // enum Reason { InvalidCharacter, UnterminatedStringLiteral }; // Constructor to pass arguments through to the struct // LexerError(Reason _reason, __int32 errorIndex) : reason(_reason), index(errorIndex) {} // Turns the error into a c-string // inline static const char* const ReasonStr(Reason reason) { static const char* reasons[] = { "Invalid character found in source: ", "Unterminated string literal in source starting at: " }; return reasons[reason]; } // Error information // const Reason reason; const __int32 index; }; // Turns a file into a vector of tokens // Util::ReturnVal TokenizeFile(const std::string& fileContents); }