46 lines
977 B
C++
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;
|
|
}
|
|
|