From 8614e085693b8bdd7e46aca127b5f66a9a50fe61 Mon Sep 17 00:00:00 2001 From: Michael Ochmann Date: Thu, 17 Feb 2022 23:30:00 +0100 Subject: [PATCH] added parser class --- src/Compiler.cpp | 12 ++++++++++-- src/Compiler.hpp | 4 ++++ src/Parser.cpp | 8 ++++++++ src/Parser.hpp | 18 ++++++++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/Parser.cpp create mode 100644 src/Parser.hpp diff --git a/src/Compiler.cpp b/src/Compiler.cpp index 9dc279a..0c81d25 100644 --- a/src/Compiler.cpp +++ b/src/Compiler.cpp @@ -1,10 +1,18 @@ +#include + #include "Compiler.hpp" namespace dumb { Compiler::Compiler(ArgumentList file) : sourceFile(std::filesystem::current_path() / std::filesystem::path(file.at(0))), - lexer(std::make_unique(this->sourceFile)) { - this->lexer->tokenize(); + lexer(std::make_unique(*this, this->sourceFile)) { + + const Lexer::TokenStream& tokenStream = this->lexer->tokenize(); + this->parser = std::make_unique(*this, tokenStream); + } + + void Compiler::reportError(std::string message, Token &token) { + std::cout << message << '\n'; } } diff --git a/src/Compiler.hpp b/src/Compiler.hpp index daa3166..687a981 100644 --- a/src/Compiler.hpp +++ b/src/Compiler.hpp @@ -6,6 +6,7 @@ #include #include "Lexer.hpp" +#include "Parser.hpp" namespace dumb { typedef std::vector ArgumentList; @@ -14,8 +15,11 @@ namespace dumb { private: std::filesystem::path sourceFile; std::unique_ptr lexer; + std::unique_ptr parser; public: explicit Compiler(ArgumentList file); + + void reportError(std::string message, Token& token); }; } diff --git a/src/Parser.cpp b/src/Parser.cpp new file mode 100644 index 0000000..911d001 --- /dev/null +++ b/src/Parser.cpp @@ -0,0 +1,8 @@ +#include "Parser.hpp" + +namespace dumb { + + Parser::Parser(Compiler &compiler, const Lexer::TokenStream& tokenStream) : compiler(compiler), tokenStream(tokenStream), pointer(0) { + + } +} \ No newline at end of file diff --git a/src/Parser.hpp b/src/Parser.hpp new file mode 100644 index 0000000..17ea795 --- /dev/null +++ b/src/Parser.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "Lexer.hpp" + +namespace dumb { + class Compiler; + + class Parser { + private: + Compiler& compiler; + const Lexer::TokenStream& tokenStream; + size_t pointer; + public: + Parser(Compiler& compiler, const Lexer::TokenStream& tokenStream); + }; + + +} \ No newline at end of file