Added foundation for Lexer

This commit is contained in:
Pasha Bibko
2025-07-20 13:49:10 +01:00
parent 7768ba4522
commit 8f75e52a07
6 changed files with 47 additions and 4 deletions

View File

@@ -2,7 +2,7 @@
// Standard libraries // // Standard libraries //
#include <iostream> #include <vector>
// LXC util files // // LXC util files //

View File

@@ -9,7 +9,9 @@ namespace LXC::Util
template<typename ErrorType> struct FunctionFail template<typename ErrorType> struct FunctionFail
{ {
explicit FunctionFail(ErrorType _err) explicit FunctionFail(ErrorType _err)
: error(_err) {} : error(_err)
{
}
ErrorType error; ErrorType error;
}; };

View File

@@ -7,7 +7,7 @@ int main(int argc, char** argv)
using namespace LXC; using namespace LXC;
// Reads the given file to a string // // Reads the given file to a string //
Util::ReturnVal fileContents = Util::ReadFile("example/example.lx"); Util::ReturnVal fileContents = Util::ReadFile("example/example.jk.lx");
if (fileContents.Failed()) if (fileContents.Failed())
{ {
// Stores the error for easier access // // Stores the error for easier access //
@@ -26,5 +26,13 @@ int main(int argc, char** argv)
return -1; return -1;
} }
// Turns the file contents into a vector of tokens //
Util::ReturnVal tokens = Lexer::TokenizeFile(fileContents);
if (tokens.Failed())
{
// Returns with default error code //
return -1;
}
return 0; return 0;
} }

View File

@@ -6,12 +6,24 @@ namespace LXC::Lexer
{ {
struct LexerContext struct LexerContext
{ {
// Constructor to set the information of the context //
LexerContext(const std::string& _source);
// Trackers for the Lexer itself // // Trackers for the Lexer itself //
std::string source; const std::string& source;
size_t index; size_t index;
LexerOutput out;
const size_t len;
// Trackers for where the Lexer is within the user version of source // // Trackers for where the Lexer is within the user version of source //
unsigned short column; unsigned short column;
unsigned short line; unsigned short line;
}; };
struct LexerError
{};
// Turns a file into a vector of tokens //
Util::ReturnVal<LexerOutput, LexerError> TokenizeFile(const std::string& fileContents);
} }

View File

@@ -112,4 +112,7 @@ namespace LXC::Lexer
// The data of the token // // The data of the token //
const char* contents; const char* contents;
}; };
// Typedef for the output type of how the Lexer outputs //
typedef std::vector<Token> LexerOutput;
} }

View File

@@ -5,4 +5,22 @@
namespace LXC::Lexer namespace LXC::Lexer
{ {
LexerContext::LexerContext(const std::string& _source) :
source(_source), index(0), out{}, len(_source.length()), column(0), line(0)
{}
Util::ReturnVal<LexerOutput, LexerError> TokenizeFile(const std::string& fileContents)
{
// Creates the context for the lexer //
LexerContext context(fileContents);
while (context.index > context.len)
{
// Iterates to the next index //
context.column++;
context.index++;
}
return context.out;
}
} }