added parser class

development
Michael Ochmann 3 years ago
parent a1391708b2
commit 8614e08569
  1. 12
      src/Compiler.cpp
  2. 4
      src/Compiler.hpp
  3. 8
      src/Parser.cpp
  4. 18
      src/Parser.hpp

@ -1,10 +1,18 @@
#include <iostream>
#include "Compiler.hpp"
namespace dumb {
Compiler::Compiler(ArgumentList file) : sourceFile(std::filesystem::current_path() / std::filesystem::path(file.at(0))),
lexer(std::make_unique<Lexer>(this->sourceFile)) {
this->lexer->tokenize();
lexer(std::make_unique<Lexer>(*this, this->sourceFile)) {
const Lexer::TokenStream& tokenStream = this->lexer->tokenize();
this->parser = std::make_unique<Parser>(*this, tokenStream);
}
void Compiler::reportError(std::string message, Token &token) {
std::cout << message << '\n';
}
}

@ -6,6 +6,7 @@
#include <memory>
#include "Lexer.hpp"
#include "Parser.hpp"
namespace dumb {
typedef std::vector<std::string> ArgumentList;
@ -14,8 +15,11 @@ namespace dumb {
private:
std::filesystem::path sourceFile;
std::unique_ptr<Lexer> lexer;
std::unique_ptr<Parser> parser;
public:
explicit Compiler(ArgumentList file);
void reportError(std::string message, Token& token);
};
}

@ -0,0 +1,8 @@
#include "Parser.hpp"
namespace dumb {
Parser::Parser(Compiler &compiler, const Lexer::TokenStream& tokenStream) : compiler(compiler), tokenStream(tokenStream), pointer(0) {
}
}

@ -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);
};
}
Loading…
Cancel
Save