#pragma once #include namespace PashaBibko::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; uint32_t index; LexerOutput out; const uint32_t 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, UnknownSymbolOrOperand }; // Constructor to pass arguments through to the struct // LexerError(Reason _reason, uint32_t errorIndex, std::string _info = "") : reason(_reason), index(errorIndex), info(_info) {} // 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", "Unknown symbol or operand in source" }; return reasons[reason]; } // Error information // const Reason reason; const uint32_t index; const std::string info; }; // Turns a file into a vector of tokens // Util::ReturnVal TokenizeFile(const std::string& fileContents); }