#ifndef STATEMENT_H #define STATEMENT_H #include #include "Token.h" #include "Expression.h" using namespace std; class Statement; class StatementBlock; class StatementReturn; class StatementExpression; class StatementInvalid; class Statement { public: enum Kind { FUNCTION_DECLARATION, BLOCK, RETURN, EXPRESSION, INVALID }; private: Kind kind; //shared_ptr token; //shared_ptr expression; //shared_ptr blockStatement; //vector> statements; //string name; public: Statement(Kind kind); //Statement(Kind kind, shared_ptr token, shared_ptr expression, shared_ptr blockStatement, vector> statements, string name); Kind getKind(); //shared_ptr getToken(); //shared_ptr getExpression(); //shared_ptr getBlockStatement(); //vector> getStatements(); //string getName(); bool isValid(); string toString(); }; class StatementFunctionDeclaration: public Statement { private: string name; shared_ptr statementBlock; public: StatementFunctionDeclaration(string name, shared_ptr statementBlock); string getName(); shared_ptr getStatementBlock(); }; class StatementBlock: public Statement { private: vector> statements; public: StatementBlock(vector> statements); vector> getStatements(); }; class StatementReturn: public Statement { private: shared_ptr expression; public: StatementReturn(shared_ptr expression); shared_ptr getExpression(); }; class StatementExpression: public Statement { private: shared_ptr expression; public: StatementExpression(shared_ptr expression); shared_ptr getExpression(); }; class StatementInvalid: public Statement { //private: // string message; public: StatementInvalid(); //StatementInvalid(string message); //string getMessage(); }; #endif