From d5cb498ba37949193fecafa8c1f15d70ade79515 Mon Sep 17 00:00:00 2001 From: Dimitar Trendafilov Date: Sun, 21 Oct 2018 21:27:36 +0300 Subject: Added a tree interpreter --- JSImpl/src/ASTInterpreter.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 JSImpl/src/ASTInterpreter.h (limited to 'JSImpl/src/ASTInterpreter.h') diff --git a/JSImpl/src/ASTInterpreter.h b/JSImpl/src/ASTInterpreter.h new file mode 100644 index 0000000..1ffecde --- /dev/null +++ b/JSImpl/src/ASTInterpreter.h @@ -0,0 +1,44 @@ +#pragma once + +#include "ExpressionVisitor.h" +#include +#include +#include + +class ASTInterpreter : public ExpressionVisitor +{ +public: + ASTInterpreter(); + ~ASTInterpreter(); + + typedef double value_type; + typedef std::stack ValueStack; + + ValueStack Run(Expression* program); + + virtual void Visit(LiteralNull* e) override; + virtual void Visit(LiteralUndefined* e) override; + virtual void Visit(LiteralString* e) override; + virtual void Visit(LiteralNumber* e) override; + virtual void Visit(LiteralBoolean* e) override; + virtual void Visit(BinaryExpression* e) override; + virtual void Visit(UnaryExpression* e) override; + virtual void Visit(IdentifierExpression* e) override; + virtual void Visit(ListExpression* e) override; + virtual void Visit(VariableDefinitionExpression* e) override; + virtual void Visit(BlockStatement* e) override; + virtual void Visit(LabeledStatement* e) override; + virtual void Visit(IfStatement* e) override; + virtual void Visit(SwitchStatement* e) override; + virtual void Visit(CaseStatement *) override; + virtual void Visit(WhileStatement* e) override; + virtual void Visit(ForStatement* e) override; + virtual void Visit(FunctionDeclaration* e) override; + virtual void Visit(TopStatements* e) override; + virtual void Visit(EmptyExpression* e) override; +private: + void RunExpression(const ExpressionPtr& e); + bool EvalToBool(const ExpressionPtr& e); + ValueStack m_Evaluation; + std::unordered_map m_Variables; +}; -- cgit v1.3.1-23-gd82d