#ifndef ASTNODE_H #define ASTNODE_H #include "token.h" /** * AST base class, all AST node classes extand this class. Class contains basic * information about a nodes location in file. */ class AstNode { public: Span span; AstNode() = default; virtual ~AstNode(); // this is defined in Ast.cpp just so that the // compiler doesn't complain about not knowing which // object file to include the vtable in AstNode(AstNode&&) = default; AstNode& operator=(AstNode&&) = default; AstNode(const AstNode&) = default; AstNode& operator=(const AstNode&) = default; }; class StringNode: public AstNode { public: std::string value; }; class IdentifierNode: public AstNode { public: std::string value; }; class NumberNode: public AstNode { public: long long int value; NumberNode(std::string expression); NumberNode(): value(0) {} }; class CountNode: public AstNode { public: NumberNode first; NumberNode second; CountNode(NumberNode first, NumberNode second): first(first), second(second) {} CountNode() {} }; #endif // ASTNODE_H