diff --git a/src/AstTranslator.cpp b/src/AstToRamTranslator.cpp similarity index 95% rename from src/AstTranslator.cpp rename to src/AstToRamTranslator.cpp index b8eb5efe4f0..2855043ef69 100644 --- a/src/AstTranslator.cpp +++ b/src/AstToRamTranslator.cpp @@ -8,13 +8,13 @@ /************************************************************************ * - * @file AstTranslator.cpp + * @file AstToRamTranslator.cpp * * Translator from AST to RAM structures. * ***********************************************************************/ -#include "AstTranslator.h" +#include "AstToRamTranslator.h" #include "BinaryConstraintOps.h" #include "DebugReport.h" #include "FunctorOps.h" @@ -80,11 +80,11 @@ inline void appendStmt( } } -std::unique_ptr AstTranslator::makeRamTupleElement(const Location& loc) { +std::unique_ptr AstToRamTranslator::makeRamTupleElement(const Location& loc) { return std::make_unique(loc.identifier, loc.element); } -size_t AstTranslator::getEvaluationArity(const AstAtom* atom) const { +size_t AstToRamTranslator::getEvaluationArity(const AstAtom* atom) const { if (atom->getQualifiedName().toString().find("@delta_") == 0) { const AstQualifiedName& originalRel = AstQualifiedName(atom->getQualifiedName().toString().substr(7)); return auxArityAnalysis->getArity(getRelation(*program, originalRel)); @@ -98,7 +98,7 @@ size_t AstTranslator::getEvaluationArity(const AstAtom* atom) const { } } -std::vector> AstTranslator::getInputDirectives(const AstRelation* rel) { +std::vector> AstToRamTranslator::getInputDirectives(const AstRelation* rel) { std::vector> inputDirectives; for (const auto* load : program->getIOs()) { @@ -120,7 +120,7 @@ std::vector> AstTranslator::getInputDirective return inputDirectives; } -std::vector> AstTranslator::getOutputDirectives(const AstRelation* rel) { +std::vector> AstToRamTranslator::getOutputDirectives(const AstRelation* rel) { std::vector> outputDirectives; for (const auto* store : program->getIOs()) { @@ -142,7 +142,7 @@ std::vector> AstTranslator::getOutputDirectiv return outputDirectives; } -std::unique_ptr AstTranslator::createRelationReference(const std::string name) { +std::unique_ptr AstToRamTranslator::createRelationReference(const std::string name) { auto it = ramRels.find(name); assert(it != ramRels.end() && "relation name not found"); @@ -150,35 +150,35 @@ std::unique_ptr AstTranslator::createRelationReference(con return std::make_unique(relation); } -std::unique_ptr AstTranslator::translateRelation(const AstAtom* atom) { +std::unique_ptr AstToRamTranslator::translateRelation(const AstAtom* atom) { return createRelationReference(getRelationName(atom->getQualifiedName())); } -std::unique_ptr AstTranslator::translateRelation( +std::unique_ptr AstToRamTranslator::translateRelation( const AstRelation* rel, const std::string relationNamePrefix) { return createRelationReference(relationNamePrefix + getRelationName(rel->getQualifiedName())); } -std::unique_ptr AstTranslator::translateDeltaRelation(const AstRelation* rel) { +std::unique_ptr AstToRamTranslator::translateDeltaRelation(const AstRelation* rel) { return translateRelation(rel, "@delta_"); } -std::unique_ptr AstTranslator::translateNewRelation(const AstRelation* rel) { +std::unique_ptr AstToRamTranslator::translateNewRelation(const AstRelation* rel) { return translateRelation(rel, "@new_"); } -std::unique_ptr AstTranslator::translateValue( +std::unique_ptr AstToRamTranslator::translateValue( const AstArgument* arg, const ValueIndex& index) { if (arg == nullptr) { return nullptr; } class ValueTranslator : public AstVisitor> { - AstTranslator& translator; + AstToRamTranslator& translator; const ValueIndex& index; public: - ValueTranslator(AstTranslator& translator, const ValueIndex& index) + ValueTranslator(AstToRamTranslator& translator, const ValueIndex& index) : translator(translator), index(index) {} std::unique_ptr visitVariable(const AstVariable& var) override { @@ -268,14 +268,14 @@ std::unique_ptr AstTranslator::translateValue( return ValueTranslator(*this, index)(*arg); } -std::unique_ptr AstTranslator::translateConstraint( +std::unique_ptr AstToRamTranslator::translateConstraint( const AstLiteral* lit, const ValueIndex& index) { class ConstraintTranslator : public AstVisitor> { - AstTranslator& translator; + AstToRamTranslator& translator; const ValueIndex& index; public: - ConstraintTranslator(AstTranslator& translator, const ValueIndex& index) + ConstraintTranslator(AstToRamTranslator& translator, const ValueIndex& index) : translator(translator), index(index) {} /** for atoms */ @@ -344,7 +344,7 @@ std::unique_ptr AstTranslator::translateConstraint( return ConstraintTranslator(*this, index)(*lit); } -std::unique_ptr AstTranslator::ClauseTranslator::getReorderedClause( +std::unique_ptr AstToRamTranslator::ClauseTranslator::getReorderedClause( const AstClause& clause, const int version) const { const auto plan = clause.getExecutionPlan(); @@ -377,7 +377,7 @@ std::unique_ptr AstTranslator::ClauseTranslator::getReorderedClause( return reorderedClause; } -AstTranslator::ClauseTranslator::arg_list* AstTranslator::ClauseTranslator::getArgList( +AstToRamTranslator::ClauseTranslator::arg_list* AstToRamTranslator::ClauseTranslator::getArgList( const AstNode* curNode, std::map>& nodeArgs) const { if (nodeArgs.count(curNode) == 0u) { if (auto rec = dynamic_cast(curNode)) { @@ -391,7 +391,7 @@ AstTranslator::ClauseTranslator::arg_list* AstTranslator::ClauseTranslator::getA return nodeArgs[curNode].get(); } -void AstTranslator::ClauseTranslator::indexValues(const AstNode* curNode, +void AstToRamTranslator::ClauseTranslator::indexValues(const AstNode* curNode, std::map>& nodeArgs, std::map& arg_level, RamRelationReference* relation) { arg_list* cur = getArgList(curNode, nodeArgs); @@ -424,7 +424,7 @@ void AstTranslator::ClauseTranslator::indexValues(const AstNode* curNode, } /** index values in rule */ -void AstTranslator::ClauseTranslator::createValueIndex(const AstClause& clause) { +void AstToRamTranslator::ClauseTranslator::createValueIndex(const AstClause& clause) { for (const auto* atom : getBodyLiterals(clause)) { // std::map arg_level; std::map> nodeArgs; @@ -475,7 +475,7 @@ void AstTranslator::ClauseTranslator::createValueIndex(const AstClause& clause) }); } -std::unique_ptr AstTranslator::ClauseTranslator::createOperation(const AstClause& clause) { +std::unique_ptr AstToRamTranslator::ClauseTranslator::createOperation(const AstClause& clause) { const auto head = clause.getHead(); std::vector> values; @@ -495,7 +495,7 @@ std::unique_ptr AstTranslator::ClauseTranslator::createOperation(c return project; // start with innermost } -std::unique_ptr AstTranslator::ProvenanceClauseTranslator::createOperation( +std::unique_ptr AstToRamTranslator::ProvenanceClauseTranslator::createOperation( const AstClause& clause) { std::vector> values; @@ -527,7 +527,7 @@ std::unique_ptr AstTranslator::ProvenanceClauseTranslator::createO return std::make_unique(std::move(values)); } -std::unique_ptr AstTranslator::ClauseTranslator::createCondition( +std::unique_ptr AstToRamTranslator::ClauseTranslator::createCondition( const AstClause& originalClause) { const auto head = originalClause.getHead(); @@ -539,12 +539,12 @@ std::unique_ptr AstTranslator::ClauseTranslator::createCondition( return nullptr; } -std::unique_ptr AstTranslator::ProvenanceClauseTranslator::createCondition( +std::unique_ptr AstToRamTranslator::ProvenanceClauseTranslator::createCondition( const AstClause& /* originalClause */) { return nullptr; } -std::unique_ptr AstTranslator::ClauseTranslator::filterByConstraints(size_t const level, +std::unique_ptr AstToRamTranslator::ClauseTranslator::filterByConstraints(size_t const level, const std::vector& args, std::unique_ptr op, bool constrainByFunctors) { size_t pos = 0; @@ -575,7 +575,7 @@ std::unique_ptr AstTranslator::ClauseTranslator::filterByConstrain } /** generate RAM code for a clause */ -std::unique_ptr AstTranslator::ClauseTranslator::translateClause( +std::unique_ptr AstToRamTranslator::ClauseTranslator::translateClause( const AstClause& clause, const AstClause& originalClause, const int version) { if (auto reorderedClause = getReorderedClause(clause, version)) { // translate reordered clause @@ -819,7 +819,7 @@ std::unique_ptr AstTranslator::ClauseTranslator::translateClause( } } -std::unique_ptr AstTranslator::translateConstant(AstConstant const& c) { +std::unique_ptr AstToRamTranslator::translateConstant(AstConstant const& c) { auto const rawConstant = getConstantRamRepresentation(c); if (auto* const c_num = dynamic_cast(&c)) { @@ -834,7 +834,7 @@ std::unique_ptr AstTranslator::translateConstant(AstConstant cons } /** generate RAM code for a non-recursive relation */ -std::unique_ptr AstTranslator::translateNonRecursiveRelation( +std::unique_ptr AstToRamTranslator::translateNonRecursiveRelation( const AstRelation& rel, const RecursiveClauses* recursiveClauses) { /* start with an empty sequence */ std::vector> res; @@ -903,7 +903,7 @@ std::unique_ptr AstTranslator::translateNonRecursiveRelation( * A utility function assigning names to unnamed variables such that enclosing * constructs may be cloned without losing the variable-identity. */ -void AstTranslator::nameUnnamedVariables(AstClause* clause) { +void AstToRamTranslator::nameUnnamedVariables(AstClause* clause) { // the node mapper conducting the actual renaming struct Instantiator : public AstNodeMapper { mutable int counter = 0; @@ -933,7 +933,7 @@ void AstTranslator::nameUnnamedVariables(AstClause* clause) { } /** generate RAM code for recursive relations in a strongly-connected component */ -std::unique_ptr AstTranslator::translateRecursiveRelation( +std::unique_ptr AstToRamTranslator::translateRecursiveRelation( const std::set& scc, const RecursiveClauses* recursiveClauses) { // initialize sections std::vector> preamble; @@ -1144,7 +1144,7 @@ std::unique_ptr AstTranslator::translateRecursiveRelation( } /** make a subroutine to search for subproofs */ -std::unique_ptr AstTranslator::makeSubproofSubroutine(const AstClause& clause) { +std::unique_ptr AstToRamTranslator::makeSubproofSubroutine(const AstClause& clause) { auto intermediateClause = std::make_unique(souffle::clone(clause.getHead())); // create a clone where all the constraints are moved to the end @@ -1204,7 +1204,7 @@ std::unique_ptr AstTranslator::makeSubproofSubroutine(const AstCla } /** make a subroutine to search for subproofs for the non-existence of a tuple */ -std::unique_ptr AstTranslator::makeNegationSubproofSubroutine(const AstClause& clause) { +std::unique_ptr AstToRamTranslator::makeNegationSubproofSubroutine(const AstClause& clause) { // TODO (taipan-snake): Currently we only deal with atoms (no constraints or negations or aggregates // or anything else...) // @@ -1429,7 +1429,7 @@ std::unique_ptr AstTranslator::makeNegationSubproofSubroutine(cons } /** translates the given datalog program into an equivalent RAM program */ -void AstTranslator::translateProgram(const AstTranslationUnit& translationUnit) { +void AstToRamTranslator::translateProgram(const AstTranslationUnit& translationUnit) { // obtain type environment from analysis typeEnv = &translationUnit.getAnalysis()->getTypeEnvironment(); @@ -1610,7 +1610,7 @@ void AstTranslator::translateProgram(const AstTranslationUnit& translationUnit) } } -std::unique_ptr AstTranslator::translateUnit(AstTranslationUnit& tu) { +std::unique_ptr AstToRamTranslator::translateUnit(AstTranslationUnit& tu) { auto ram_start = std::chrono::high_resolution_clock::now(); program = tu.getProgram(); diff --git a/src/AstTranslator.h b/src/AstToRamTranslator.h similarity index 98% rename from src/AstTranslator.h rename to src/AstToRamTranslator.h index ef35e2d06b7..f8dbfb6d754 100644 --- a/src/AstTranslator.h +++ b/src/AstToRamTranslator.h @@ -8,7 +8,7 @@ /************************************************************************ * - * @file AstTranslator.h + * @file AstToRamTranslator.h * * Translator from AST into RAM * @@ -62,9 +62,9 @@ class TypeEnvironment; /** * Main class for AST Translator */ -class AstTranslator { +class AstToRamTranslator { public: - AstTranslator() = default; + AstToRamTranslator() = default; /** translates AST to translation unit */ std::unique_ptr translateUnit(AstTranslationUnit& tu); @@ -347,7 +347,7 @@ class AstTranslator { void createValueIndex(const AstClause& clause); protected: - AstTranslator& translator; + AstToRamTranslator& translator; // create value index ValueIndex valueIndex; @@ -365,7 +365,7 @@ class AstTranslator { const AuxiliaryArity* auxArityAnalysis; public: - ClauseTranslator(AstTranslator& translator) + ClauseTranslator(AstToRamTranslator& translator) : translator(translator), auxArityAnalysis(translator.auxArityAnalysis) {} std::unique_ptr translateClause( @@ -378,7 +378,7 @@ class AstTranslator { std::unique_ptr createCondition(const AstClause& originalClause) override; public: - ProvenanceClauseTranslator(AstTranslator& translator) : ClauseTranslator(translator) {} + ProvenanceClauseTranslator(AstToRamTranslator& translator) : ClauseTranslator(translator) {} }; /** diff --git a/src/Makefile.am b/src/Makefile.am index bce27a36fd9..7c5e4eb72db 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -72,8 +72,8 @@ endif souffle_sources = \ AggregateOp.h \ - AstTranslator.cpp \ - AstTranslator.h \ + AstToRamTranslator.cpp \ + AstToRamTranslator.h \ BinaryConstraintOps.h \ Constraints.h \ DebugReport.cpp \ diff --git a/src/Synthesiser.cpp b/src/Synthesiser.cpp index 2af590b0a54..a172cb24a54 100644 --- a/src/Synthesiser.cpp +++ b/src/Synthesiser.cpp @@ -526,7 +526,7 @@ void Synthesiser::emitCode(std::ostream& out, const RamStatement& stmt) { assert(pscan.getTupleId() == 0 && "not outer-most loop"); - assert(rel.getArity() > 0 && "AstTranslator failed/no parallel scans for nullaries"); + assert(rel.getArity() > 0 && "AstToRamTranslator failed/no parallel scans for nullaries"); assert(!preambleIssued && "only first loop can be made parallel"); preambleIssued = true; @@ -556,7 +556,7 @@ void Synthesiser::emitCode(std::ostream& out, const RamStatement& stmt) { PRINT_BEGIN_COMMENT(out); - assert(rel.getArity() > 0 && "AstTranslator failed/no scans for nullaries"); + assert(rel.getArity() > 0 && "AstToRamTranslator failed/no scans for nullaries"); out << "for(const auto& env" << id << " : " << "*" << relName << ") {\n"; @@ -573,7 +573,7 @@ void Synthesiser::emitCode(std::ostream& out, const RamStatement& stmt) { auto relName = synthesiser.getRelationName(rel); auto identifier = choice.getTupleId(); - assert(rel.getArity() > 0 && "AstTranslator failed/no choice for nullaries"); + assert(rel.getArity() > 0 && "AstToRamTranslator failed/no choice for nullaries"); PRINT_BEGIN_COMMENT(out); @@ -600,7 +600,7 @@ void Synthesiser::emitCode(std::ostream& out, const RamStatement& stmt) { assert(pchoice.getTupleId() == 0 && "not outer-most loop"); - assert(rel.getArity() > 0 && "AstTranslator failed/no parallel choice for nullaries"); + assert(rel.getArity() > 0 && "AstToRamTranslator failed/no parallel choice for nullaries"); assert(!preambleIssued && "only first loop can be made parallel"); preambleIssued = true; @@ -640,7 +640,7 @@ void Synthesiser::emitCode(std::ostream& out, const RamStatement& stmt) { const auto& rangePatternLower = iscan.getRangePattern().first; const auto& rangePatternUpper = iscan.getRangePattern().second; - assert(arity > 0 && "AstTranslator failed/no index scans for nullaries"); + assert(arity > 0 && "AstToRamTranslator failed/no index scans for nullaries"); PRINT_BEGIN_COMMENT(out); @@ -675,7 +675,7 @@ void Synthesiser::emitCode(std::ostream& out, const RamStatement& stmt) { assert(piscan.getTupleId() == 0 && "not outer-most loop"); - assert(arity > 0 && "AstTranslator failed/no parallel index scan for nullaries"); + assert(arity > 0 && "AstToRamTranslator failed/no parallel index scan for nullaries"); assert(!preambleIssued && "only first loop can be made parallel"); preambleIssued = true; @@ -721,7 +721,7 @@ void Synthesiser::emitCode(std::ostream& out, const RamStatement& stmt) { auto keys = isa->getSearchSignature(&ichoice); // check list of keys - assert(arity > 0 && "AstTranslator failed"); + assert(arity > 0 && "AstToRamTranslator failed"); out << "const Tuple lower{{"; out << join(rangePatternLower.begin(), rangePatternLower.begin() + arity, ",", recWithDefault); @@ -762,7 +762,7 @@ void Synthesiser::emitCode(std::ostream& out, const RamStatement& stmt) { assert(pichoice.getTupleId() == 0 && "not outer-most loop"); - assert(arity > 0 && "AstTranslator failed"); + assert(arity > 0 && "AstToRamTranslator failed"); assert(!preambleIssued && "only first loop can be made parallel"); preambleIssued = true; @@ -1664,7 +1664,7 @@ void Synthesiser::emitCode(std::ostream& out, const RamStatement& stmt) { auto relName = synthesiser.getRelationName(rel); auto ctxName = "READ_OP_CONTEXT(" + synthesiser.getOpContextName(rel) + ")"; auto arity = rel.getArity(); - assert(arity > 0 && "AstTranslator failed"); + assert(arity > 0 && "AstToRamTranslator failed"); std::string after; if (Global::config().has("profile") && !exists.getRelation().isTemp()) { out << R"_((reads[)_" << synthesiser.lookupReadIdx(rel.getName()) << R"_(]++,)_"; diff --git a/src/main.cpp b/src/main.cpp index 42938d1d942..7f174422440 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,7 +14,7 @@ * ***********************************************************************/ -#include "AstTranslator.h" +#include "AstToRamTranslator.h" #include "DebugReport.h" #include "ErrorReport.h" #include "Explain.h" @@ -525,7 +525,7 @@ int main(int argc, char** argv) { /* translate AST to RAM */ debugReport.startSection(); std::unique_ptr ramTranslationUnit = - AstTranslator().translateUnit(*astTranslationUnit); + AstToRamTranslator().translateUnit(*astTranslationUnit); debugReport.endSection("ast-to-ram", "Translate AST to RAM"); std::unique_ptr ramTransform = std::make_unique(