PorygonLang/src/Script.cpp

46 lines
977 B
C++

#include <utility>
#include "Script.hpp"
#include "Parser/Lexer.hpp"
#include "Parser/Parser.hpp"
#include "Binder/Binder.hpp"
Script Script::Create(string script) {
auto s = Script();
s.Parse(std::move(script));
return s;
}
Script::Script() {
Diagnostics = new class Diagnostics();
_evaluator = new Evaluator(this);
}
void Script::Evaluate() {
_evaluator->Evaluate(BoundScript);
}
Script::~Script() {
delete this -> Diagnostics;
delete this -> BoundScript;
delete this -> _lastValue;
delete this -> _evaluator;
}
void Script::Parse(string script) {
auto lexer = Lexer(std::move(script), this);
auto lexResult = lexer.Lex();
auto parser = Parser(lexResult, this);
auto parseResult = parser.Parse();
for (auto token : lexResult){
delete token;
}
lexResult.clear();
if (!Diagnostics->HasErrors()){
this->BoundScript = Binder::Bind(this, parseResult);
}
delete parseResult;
}