diff --git a/CMakeLists.txt b/CMakeLists.txt index c2244e2..beae58f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,6 +60,8 @@ SET(SCULLY_SOURCE src/AST/ASTElement.cpp src/AST/ASTVisitor.cpp + src/AST/ConstantExpression.cpp + src/AST/Expression.cpp src/AST/ParameterList.cpp src/AST/Statement.cpp src/AST/Type.cpp diff --git a/grammar/grammar.y b/grammar/grammar.y index a65cd0f..72f9c3c 100644 --- a/grammar/grammar.y +++ b/grammar/grammar.y @@ -8,6 +8,8 @@ #include "Token.h" #include "AST/ASTElement.h" +#include "AST/ConstantExpression.h" +#include "AST/Expression.h" #include "AST/ParameterList.h" #include "AST/Statement.h" #include "AST/Type.h" diff --git a/inc/AST/ASTVisitor.h b/inc/AST/ASTVisitor.h index 8e4ee8e..00c27b2 100644 --- a/inc/AST/ASTVisitor.h +++ b/inc/AST/ASTVisitor.h @@ -1,6 +1,7 @@ #ifndef ASTVISITOR_H #define ASTVISITOR_H +#include "ConstantExpression.h" #include "VariableDefinition.h" #include "ParameterList.h" @@ -9,6 +10,7 @@ public: ASTVisitor(); virtual ~ASTVisitor(); + virtual void visit(ConstantExpression* e) = 0; virtual void visit(ParameterList* e) = 0; virtual void visit(VariableDefinition* e) = 0; }; diff --git a/inc/AST/ConstantExpression.h b/inc/AST/ConstantExpression.h new file mode 100644 index 0000000..46daa9f --- /dev/null +++ b/inc/AST/ConstantExpression.h @@ -0,0 +1,19 @@ +#ifndef CONSTANTEXPRESSION_H +#define CONSTANTEXPRESSION_H + +#include "AST/Expression.h" +#include + +class ConstantExpression : public Expression { +public: + ConstantExpression(std::string value); + virtual ~ConstantExpression(); + + virtual void accept(ASTVisitor* visitor); + + std::string getValue(); +private: + std::string value_; +}; + +#endif // CONSTANTEXPRESSION_H diff --git a/inc/AST/Expression.h b/inc/AST/Expression.h new file mode 100644 index 0000000..0f2fa98 --- /dev/null +++ b/inc/AST/Expression.h @@ -0,0 +1,14 @@ +#ifndef EXPRESSION_H +#define EXPRESSION_H + +#include "AST/ASTElement.h" + +class Expression : public ASTElement { +public: + Expression(); + virtual ~Expression(); + + virtual void accept(ASTVisitor* visitor) = 0; +}; + +#endif // EXPRESSION_H diff --git a/src/AST/ConstantExpression.cpp b/src/AST/ConstantExpression.cpp new file mode 100644 index 0000000..5d96fda --- /dev/null +++ b/src/AST/ConstantExpression.cpp @@ -0,0 +1,17 @@ +#include "AST/ConstantExpression.h" +#include "AST/ASTVisitor.h" + +ConstantExpression::ConstantExpression(std::string value) : value_(value) { + // +} + +ConstantExpression::~ConstantExpression() { +} + +void ConstantExpression::accept(ASTVisitor* visitor) { + visitor->visit(this); +} + +std::string ConstantExpression::getValue() { + return value_; +} diff --git a/src/AST/Expression.cpp b/src/AST/Expression.cpp new file mode 100644 index 0000000..6eedb16 --- /dev/null +++ b/src/AST/Expression.cpp @@ -0,0 +1,9 @@ +#include "AST/Expression.h" + +Expression::Expression() { + // +} + +Expression::~Expression() { + // +}