#ifndef __ANTHEM__AST_FORWARD_H #define __ANTHEM__AST_FORWARD_H #include #include #include #include namespace anthem { //////////////////////////////////////////////////////////////////////////////////////////////////// // // AST Forward Declarations // //////////////////////////////////////////////////////////////////////////////////////////////////// namespace ast { //////////////////////////////////////////////////////////////////////////////////////////////////// struct And; struct BinaryOperation; struct Biconditional; struct Boolean; struct Comparison; struct Constant; struct Exists; struct ForAll; struct Function; struct Implies; struct In; struct Integer; struct Interval; struct Not; struct Or; struct Predicate; struct SpecialInteger; struct String; struct Variable; using AndPointer = std::unique_ptr; using BinaryOperationPointer = std::unique_ptr; using BiconditionalPointer = std::unique_ptr; using BooleanPointer = std::unique_ptr; using ComparisonPointer = std::unique_ptr; using ConstantPointer = std::unique_ptr; using ExistsPointer = std::unique_ptr; using ForAllPointer = std::unique_ptr; using FunctionPointer = std::unique_ptr; using ImpliesPointer = std::unique_ptr; using InPointer = std::unique_ptr; using IntegerPointer = std::unique_ptr; using IntervalPointer = std::unique_ptr; using NotPointer = std::unique_ptr; using OrPointer = std::unique_ptr; using PredicatePointer = std::unique_ptr; using SpecialIntegerPointer = std::unique_ptr; using StringPointer = std::unique_ptr; using VariablePointer = std::unique_ptr; //////////////////////////////////////////////////////////////////////////////////////////////////// // Variants //////////////////////////////////////////////////////////////////////////////////////////////////// using FormulaT = Clingo::Variant< And, Biconditional, Boolean, Comparison, Exists, ForAll, Implies, In, Not, Or, Predicate>; class Formula : public FormulaT { using FormulaT::FormulaT; }; using TermT = Clingo::Variant< BinaryOperation, Boolean, Constant, Function, Integer, Interval, SpecialInteger, String, Variable>; class Term : public TermT { using TermT::TermT; }; //////////////////////////////////////////////////////////////////////////////////////////////////// } } #endif