From b582c1f75ff1705152a0f9e13e13be2a6ebf44f9 Mon Sep 17 00:00:00 2001 From: Abdul Zreika Date: Fri, 13 Nov 2020 17:46:28 +1100 Subject: [PATCH] Gave clearer names to some ast2ram constructs. --- src/ast2ram/AstToRamTranslator.cpp | 16 +++---- src/ast2ram/AstToRamTranslator.h | 65 +++++++++------------------- src/ast2ram/ProvenanceTranslator.cpp | 4 +- 3 files changed, 31 insertions(+), 54 deletions(-) diff --git a/src/ast2ram/AstToRamTranslator.cpp b/src/ast2ram/AstToRamTranslator.cpp index e448c5ae547..cae70591e39 100644 --- a/src/ast2ram/AstToRamTranslator.cpp +++ b/src/ast2ram/AstToRamTranslator.cpp @@ -714,16 +714,16 @@ void AstToRamTranslator::createRamRelation(size_t scc) { getTypeQualifier(typeEnv->getType(attributes[i]->getTypeName()))); } } - ramRels[name] = mk( + ramRelations[name] = mk( name, arity, auxiliaryArity, attributeNames, attributeTypeQualifiers, representation); // recursive relations also require @delta and @new variants, with the same signature if (isRecursive) { std::string deltaName = "@delta_" + name; std::string newName = "@new_" + name; - ramRels[deltaName] = mk(deltaName, arity, auxiliaryArity, attributeNames, + ramRelations[deltaName] = mk(deltaName, arity, auxiliaryArity, attributeNames, attributeTypeQualifiers, representation); - ramRels[newName] = mk( + ramRelations[newName] = mk( newName, arity, auxiliaryArity, attributeNames, attributeTypeQualifiers, representation); } } @@ -767,7 +767,7 @@ void AstToRamTranslator::translateProgram(const ast::TranslationUnit& translatio if (Global::config().has("RamSIPS")) { sipsChosen = Global::config().get("RamSIPS"); } - sips = ast::SipsMetric::create(sipsChosen, translationUnit); + sipsMetric = ast::SipsMetric::create(sipsChosen, translationUnit); // replace ADTs with record representatives removeADTs(translationUnit); @@ -775,7 +775,7 @@ void AstToRamTranslator::translateProgram(const ast::TranslationUnit& translatio // handle the case of an empty SCC graph if (sccGraph->getNumberOfSCCs() == 0) return; - // create all Ram relations in ramRels + // create all Ram relations in ramRelations for (const auto& scc : sccOrder.order()) { createRamRelation(scc); } @@ -784,7 +784,7 @@ void AstToRamTranslator::translateProgram(const ast::TranslationUnit& translatio size_t indexOfScc = 0; for (const auto& scc : sccOrder.order()) { // create subroutine for this stratum - ramSubs["stratum_" + std::to_string(indexOfScc)] = translateSCC(scc, indexOfScc); + ramSubroutines["stratum_" + std::to_string(indexOfScc)] = translateSCC(scc, indexOfScc); indexOfScc++; } @@ -815,14 +815,14 @@ Own AstToRamTranslator::translateUnit(ast::TranslationUnit ErrorReport& errReport = tu.getErrorReport(); DebugReport& debugReport = tu.getDebugReport(); VecOwn rels; - for (auto& cur : ramRels) { + for (auto& cur : ramRelations) { rels.push_back(std::move(cur.second)); } if (ramMain == nullptr) { ramMain = mk(); } - auto ramProg = mk(std::move(rels), std::move(ramMain), std::move(ramSubs)); + auto ramProg = mk(std::move(rels), std::move(ramMain), std::move(ramSubroutines)); // add the translated program to the debug report if (!Global::config().get("debug-report").empty()) { diff --git a/src/ast2ram/AstToRamTranslator.h b/src/ast2ram/AstToRamTranslator.h index 6c73809cb02..4693a7ccba7 100644 --- a/src/ast2ram/AstToRamTranslator.h +++ b/src/ast2ram/AstToRamTranslator.h @@ -86,14 +86,14 @@ class AstToRamTranslator { } const ast::SipsMetric* getSipsMetric() const { - return sips.get(); + return sipsMetric.get(); } - /** translates AST to translation unit */ + /** AST->RAM translation methods */ Own translateUnit(ast::TranslationUnit& tu); - - /** translate an AST argument to a RAM value */ Own translateValue(const ast::Argument* arg, const ValueIndex& index); + Own translateConstraint(const ast::Literal* arg, const ValueIndex& index); + Own translateConstant(const ast::Constant& c); /** determine the auxiliary for relations */ size_t getEvaluationArity(const ast::Atom* atom) const; @@ -101,15 +101,9 @@ class AstToRamTranslator { /** create a RAM element access node */ static Own makeRamTupleElement(const Location& loc); - /** translate an AST constraint to a RAM condition */ - Own translateConstraint(const ast::Literal* arg, const ValueIndex& index); - - /** translate RAM code for a constant value */ - Own translateConstant(ast::Constant const& c); - const ram::Relation* lookupRelation(const std::string& name) const { - auto it = ramRels.find(name); - assert(it != ramRels.end() && "relation not found"); + auto it = ramRelations.find(name); + assert(it != ramRelations.end() && "relation not found"); return (*it).second.get(); } @@ -120,46 +114,32 @@ class AstToRamTranslator { /** RAM program */ Own ramMain; - /** Subroutines */ - std::map> ramSubs; - - /** RAM relations */ - std::map> ramRels; - - const ast::analysis::AuxiliaryArityAnalysis* auxArityAnalysis = nullptr; - - /** - * assigns names to unnamed variables such that enclosing - * constructs may be cloned without losing the variable-identity - */ - virtual void addNegation(ast::Clause& clause, const ast::Atom* atom); - - void nameUnnamedVariables(ast::Clause* clause); - - void appendStmt(VecOwn& stmtList, Own stmt); - - /** translate AST to RAM Program */ - virtual void translateProgram(const ast::TranslationUnit& translationUnit); - - virtual void clearExpiredRelations( - VecOwn& stmts, const std::set& expiredRelations); - -private: - /** Type environment */ - const ast::analysis::TypeEnvironment* typeEnv = nullptr; + std::map> ramSubroutines; + std::map> ramRelations; + Own sipsMetric; /** Analyses needed */ + const ast::analysis::TypeEnvironment* typeEnv = nullptr; const ast::analysis::IOTypeAnalysis* ioType = nullptr; const ast::analysis::FunctorAnalysis* functorAnalysis = nullptr; + const ast::analysis::AuxiliaryArityAnalysis* auxArityAnalysis = nullptr; const ast::analysis::RelationScheduleAnalysis* relationSchedule = nullptr; const ast::analysis::SCCGraphAnalysis* sccGraph = nullptr; const ast::analysis::RecursiveClausesAnalysis* recursiveClauses = nullptr; const ast::analysis::RelationDetailCacheAnalysis* relDetail = nullptr; const ast::analysis::PolymorphicObjectsAnalysis* polyAnalysis = nullptr; - /** SIPS metric for reordering */ - Own sips; + /** Translate AST to RAM Program */ + virtual void translateProgram(const ast::TranslationUnit& translationUnit); + void nameUnnamedVariables(ast::Clause* clause); + void appendStmt(VecOwn& stmtList, Own stmt); + Own translateSCC(size_t scc, size_t idx); + virtual void addNegation(ast::Clause& clause, const ast::Atom* atom); + virtual void clearExpiredRelations( + VecOwn& stmts, const std::set& expiredRelations); + +private: /** replace ADTs with special records */ static bool removeADTs(const ast::TranslationUnit& translationUnit); @@ -175,9 +155,6 @@ class AstToRamTranslator { /** Get ram representation of constant */ RamDomain getConstantRamRepresentation(const ast::Constant& constant); - /** translate RAM code for a given SCC */ - Own translateSCC(size_t scc, size_t idx); - /** create RAM relations for a given SCC */ void createRamRelation(size_t scc); diff --git a/src/ast2ram/ProvenanceTranslator.cpp b/src/ast2ram/ProvenanceTranslator.cpp index eb8d9fb701b..d177a55f98e 100644 --- a/src/ast2ram/ProvenanceTranslator.cpp +++ b/src/ast2ram/ProvenanceTranslator.cpp @@ -67,11 +67,11 @@ void ProvenanceTranslator::addProvenanceClauseSubroutines(const ast::Program* pr std::string subroutineLabel = relName.str() + "_" + std::to_string(getClauseNum(program, &clause)) + "_subproof"; - ramSubs[subroutineLabel] = makeSubproofSubroutine(clause); + ramSubroutines[subroutineLabel] = makeSubproofSubroutine(clause); std::string negationSubroutineLabel = relName.str() + "_" + std::to_string(getClauseNum(program, &clause)) + "_negation_subproof"; - ramSubs[negationSubroutineLabel] = makeNegationSubproofSubroutine(clause); + ramSubroutines[negationSubroutineLabel] = makeNegationSubproofSubroutine(clause); }); }