Skip to content

Commit

Permalink
Changed translateRelation to getConcreteRelationName.
Browse files Browse the repository at this point in the history
  • Loading branch information
azreika committed Oct 16, 2020
1 parent b3186c9 commit c333612
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 38 deletions.
42 changes: 21 additions & 21 deletions src/ast2ram/AstToRamTranslator.cpp
Expand Up @@ -201,21 +201,21 @@ std::vector<std::map<std::string, std::string>> AstToRamTranslator::getOutputDir
return outputDirectives;
}

std::string AstToRamTranslator::translateRelation(const ast::Atom* atom) {
std::string AstToRamTranslator::getConcreteRelationName(const ast::Atom* atom) {
return getRelationName(atom->getQualifiedName());
}

std::string AstToRamTranslator::translateRelation(
std::string AstToRamTranslator::getConcreteRelationName(
const ast::Relation* rel, const std::string relationNamePrefix) {
return relationNamePrefix + getRelationName(rel->getQualifiedName());
}

std::string AstToRamTranslator::translateDeltaRelation(const ast::Relation* rel) {
return translateRelation(rel, "@delta_");
return getConcreteRelationName(rel, "@delta_");
}

std::string AstToRamTranslator::translateNewRelation(const ast::Relation* rel) {
return translateRelation(rel, "@new_");
return getConcreteRelationName(rel, "@new_");
}

Own<ram::Expression> AstToRamTranslator::translateValue(const ast::Argument* arg, const ValueIndex& index) {
Expand Down Expand Up @@ -360,8 +360,8 @@ Own<ram::Condition> AstToRamTranslator::translateConstraint(
values.push_back(translator.translateValue(args[arity + height], index));
}
}
return mk<ram::Negation>(
mk<ram::ProvenanceExistenceCheck>(translator.translateRelation(atom), std::move(values)));
return mk<ram::Negation>(mk<ram::ProvenanceExistenceCheck>(
translator.getConcreteRelationName(atom), std::move(values)));
}

/** for negations */
Expand All @@ -373,7 +373,7 @@ Own<ram::Condition> AstToRamTranslator::translateConstraint(

if (arity == 0) {
// for a nullary, negation is a simple emptiness check
return mk<ram::EmptinessCheck>(translator.translateRelation(atom));
return mk<ram::EmptinessCheck>(translator.getConcreteRelationName(atom));
}

// else, we construct the atom and create a negation
Expand All @@ -386,7 +386,7 @@ Own<ram::Condition> AstToRamTranslator::translateConstraint(
values.push_back(mk<ram::UndefValue>());
}
return mk<ram::Negation>(
mk<ram::ExistenceCheck>(translator.translateRelation(atom), std::move(values)));
mk<ram::ExistenceCheck>(translator.getConcreteRelationName(atom), std::move(values)));
}
};
return ConstraintTranslator(*this, index)(*lit);
Expand Down Expand Up @@ -431,7 +431,7 @@ Own<ram::Statement> AstToRamTranslator::translateNonRecursiveRelation(
/* start with an empty sequence */
VecOwn<ram::Statement> res;

std::string relName = translateRelation(&rel);
std::string relName = getConcreteRelationName(&rel);

/* iterate over all clauses that belong to the relation */
for (ast::Clause* clause : relDetail->getClauses(rel.getQualifiedName())) {
Expand Down Expand Up @@ -559,7 +559,7 @@ Own<ram::Statement> AstToRamTranslator::translateRecursiveRelation(const std::se
for (const ast::Relation* rel : scc) {
/* create update statements for fixpoint (even iteration) */
Own<ram::Statement> updateRelTable =
mk<ram::Sequence>(genMerge(rel, translateRelation(rel), translateNewRelation(rel)),
mk<ram::Sequence>(genMerge(rel, getConcreteRelationName(rel), translateNewRelation(rel)),
mk<ram::Swap>(translateDeltaRelation(rel), translateNewRelation(rel)),
mk<ram::Clear>(translateNewRelation(rel)));

Expand All @@ -577,7 +577,7 @@ Own<ram::Statement> AstToRamTranslator::translateRecursiveRelation(const std::se
/* Generate code for non-recursive part of relation */
/* Generate merge operation for temp tables */
appendStmt(preamble, translateNonRecursiveRelation(*rel, recursiveClauses));
appendStmt(preamble, genMerge(rel, translateDeltaRelation(rel), translateRelation(rel)));
appendStmt(preamble, genMerge(rel, translateDeltaRelation(rel), getConcreteRelationName(rel)));

/* Add update operations of relations to parallel statements */
appendStmt(updateTable, std::move(updateRelTable));
Expand Down Expand Up @@ -711,9 +711,9 @@ Own<ram::Statement> AstToRamTranslator::translateRecursiveRelation(const std::se
for (const ast::Relation* rel : scc) {
addCondition(exitCond, mk<ram::EmptinessCheck>(translateNewRelation(rel)));
if (ioType->isLimitSize(rel)) {
Own<ram::Condition> limit =
mk<ram::Constraint>(BinaryConstraintOp::GE, mk<ram::RelationSize>(translateRelation(rel)),
mk<ram::SignedConstant>(ioType->getLimitSize(rel)));
Own<ram::Condition> limit = mk<ram::Constraint>(BinaryConstraintOp::GE,
mk<ram::RelationSize>(getConcreteRelationName(rel)),
mk<ram::SignedConstant>(ioType->getLimitSize(rel)));
appendStmt(exitStmts, mk<ram::Exit>(std::move(limit)));
}
}
Expand Down Expand Up @@ -900,7 +900,7 @@ Own<ram::Statement> AstToRamTranslator::makeNegationSubproofSubroutine(const ast
if (auto atom = dynamic_cast<ast::Atom*>(lit)) {
size_t auxiliaryArity = auxArityAnalysis->getArity(atom);

auto relName = translateRelation(atom);
auto relName = getConcreteRelationName(atom);
// construct a query
VecOwn<ram::Expression> query;

Expand Down Expand Up @@ -944,7 +944,7 @@ Own<ram::Statement> AstToRamTranslator::makeNegationSubproofSubroutine(const ast
auto atom = neg->getAtom();

size_t auxiliaryArity = auxArityAnalysis->getArity(atom);
auto relName = translateRelation(atom);
auto relName = getConcreteRelationName(atom);
// construct a query
VecOwn<ram::Expression> query;

Expand Down Expand Up @@ -1040,12 +1040,12 @@ void AstToRamTranslator::translateProgram(const ast::TranslationUnit& translatio
// a function to load relations
const auto& makeRamLoad = [&](VecOwn<ram::Statement>& current, const ast::Relation* relation) {
for (auto directives : getInputDirectives(relation)) {
Own<ram::Statement> statement = mk<ram::IO>(translateRelation(relation), directives);
Own<ram::Statement> statement = mk<ram::IO>(getConcreteRelationName(relation), directives);
if (Global::config().has("profile")) {
const std::string logTimerStatement = LogStatement::tRelationLoadTime(
toString(relation->getQualifiedName()), relation->getSrcLoc());
statement = mk<ram::LogRelationTimer>(
std::move(statement), logTimerStatement, translateRelation(relation));
std::move(statement), logTimerStatement, getConcreteRelationName(relation));
}
appendStmt(current, std::move(statement));
}
Expand All @@ -1054,20 +1054,20 @@ void AstToRamTranslator::translateProgram(const ast::TranslationUnit& translatio
// a function to store relations
const auto& makeRamStore = [&](VecOwn<ram::Statement>& current, const ast::Relation* relation) {
for (auto directives : getOutputDirectives(relation)) {
Own<ram::Statement> statement = mk<ram::IO>(translateRelation(relation), directives);
Own<ram::Statement> statement = mk<ram::IO>(getConcreteRelationName(relation), directives);
if (Global::config().has("profile")) {
const std::string logTimerStatement = LogStatement::tRelationSaveTime(
toString(relation->getQualifiedName()), relation->getSrcLoc());
statement = mk<ram::LogRelationTimer>(
std::move(statement), logTimerStatement, translateRelation(relation));
std::move(statement), logTimerStatement, getConcreteRelationName(relation));
}
appendStmt(current, std::move(statement));
}
};

// a function to drop relations
const auto& makeRamClear = [&](VecOwn<ram::Statement>& current, const ast::Relation* relation) {
appendStmt(current, mk<ram::Clear>(translateRelation(relation)));
appendStmt(current, mk<ram::Clear>(getConcreteRelationName(relation)));
};

// create all Ram relations in ramRels
Expand Down
8 changes: 4 additions & 4 deletions src/ast2ram/AstToRamTranslator.h
Expand Up @@ -91,11 +91,11 @@ class AstToRamTranslator {
/** translate an AST argument to a RAM value */
Own<ram::Expression> translateValue(const ast::Argument* arg, const ValueIndex& index);

/** a utility to translate atoms to relations */
std::string translateRelation(const ast::Atom* atom);
/** Get the corresponding concretised RAM relation name for the atom */
std::string getConcreteRelationName(const ast::Atom* atom);

/** translate an AST relation to a RAM relation */
std::string translateRelation(const ast::Relation* rel, const std::string relationNamePrefix = "");
/** Get the corresponding concretised RAM relation name for the relation */
std::string getConcreteRelationName(const ast::Relation* rel, const std::string relationNamePrefix = "");

/** determine the auxiliary for relations */
size_t getEvaluationArity(const ast::Atom* atom) const;
Expand Down
28 changes: 15 additions & 13 deletions src/ast2ram/ClauseTranslator.cpp
Expand Up @@ -70,7 +70,7 @@ Own<ram::Statement> ClauseTranslator::translateClause(
}

// create a fact statement
return mk<ram::Query>(mk<ram::Project>(translator.translateRelation(head), std::move(values)));
return mk<ram::Query>(mk<ram::Project>(translator.getConcreteRelationName(head), std::move(values)));
}

// the rest should be rules
Expand Down Expand Up @@ -186,8 +186,8 @@ Own<ram::Statement> ClauseTranslator::translateClause(
auto expr = translator.translateValue(agg->getTargetExpression(), *valueIndex);

// add Ram-Aggregation layer
op = mk<ram::Aggregate>(std::move(op), agg->getOperator(), translator.translateRelation(atom),
expr ? std::move(expr) : mk<ram::UndefValue>(),
op = mk<ram::Aggregate>(std::move(op), agg->getOperator(),
translator.getConcreteRelationName(atom), expr ? std::move(expr) : mk<ram::UndefValue>(),
aggCond ? std::move(aggCond) : mk<ram::True>(), level);
} else if (const auto* func = dynamic_cast<const ast::IntrinsicFunctor*>(cur)) {
VecOwn<ram::Expression> args;
Expand Down Expand Up @@ -235,14 +235,14 @@ Own<ram::Statement> ClauseTranslator::translateClause(

// add check for emptiness for an atom
op = mk<ram::Filter>(
mk<ram::Negation>(mk<ram::EmptinessCheck>(translator.translateRelation(atom))),
mk<ram::Negation>(mk<ram::EmptinessCheck>(translator.getConcreteRelationName(atom))),
std::move(op));

// add a scan level
if (atom->getArity() != 0 && !isAllArgsUnnamed) {
if (head->getArity() == 0) {
op = mk<ram::Break>(
mk<ram::Negation>(mk<ram::EmptinessCheck>(translator.translateRelation(head))),
op = mk<ram::Break>(mk<ram::Negation>(mk<ram::EmptinessCheck>(
translator.getConcreteRelationName(head))),
std::move(op));
}
if (Global::config().has("profile")) {
Expand All @@ -256,9 +256,10 @@ Own<ram::Statement> ClauseTranslator::translateClause(
ss << stringify(toString(*atom)) << ';';
ss << stringify(toString(originalClause)) << ';';
ss << level << ';';
op = mk<ram::Scan>(translator.translateRelation(atom), level, std::move(op), ss.str());
op = mk<ram::Scan>(
translator.getConcreteRelationName(atom), level, std::move(op), ss.str());
} else {
op = mk<ram::Scan>(translator.translateRelation(atom), level, std::move(op));
op = mk<ram::Scan>(translator.getConcreteRelationName(atom), level, std::move(op));
}
}

Expand Down Expand Up @@ -293,11 +294,12 @@ Own<ram::Operation> ClauseTranslator::createOperation(const ast::Clause& clause)
values.push_back(translator.translateValue(arg, *valueIndex));
}

Own<ram::Operation> project = mk<ram::Project>(translator.translateRelation(head), std::move(values));
Own<ram::Operation> project =
mk<ram::Project>(translator.getConcreteRelationName(head), std::move(values));

if (head->getArity() == 0) {
project = mk<ram::Filter>(
mk<ram::EmptinessCheck>(translator.translateRelation(head)), std::move(project));
mk<ram::EmptinessCheck>(translator.getConcreteRelationName(head)), std::move(project));
}

// build up insertion call
Expand All @@ -310,7 +312,7 @@ Own<ram::Condition> ClauseTranslator::createCondition(const ast::Clause& origina
// add stopping criteria for nullary relations
// (if it contains already the null tuple, don't re-compute)
if (head->getArity() == 0) {
return mk<ram::EmptinessCheck>(translator.translateRelation(head));
return mk<ram::EmptinessCheck>(translator.getConcreteRelationName(head));
}
return nullptr;
}
Expand Down Expand Up @@ -425,7 +427,7 @@ void ClauseTranslator::createValueIndex(const ast::Clause& clause) {

// index each value in the atom
indexValues(atom, atom->getArguments(), nodeLevel,
translator.lookupRelation(translator.translateRelation(atom)));
translator.lookupRelation(translator.getConcreteRelationName(atom)));
}

// add aggregation functions
Expand Down Expand Up @@ -460,7 +462,7 @@ void ClauseTranslator::createValueIndex(const ast::Clause& clause) {
for (auto* arg : atom->getArguments()) {
if (const auto* var = dynamic_cast<const ast::Variable*>(arg)) {
valueIndex->addVarReference(
*var, *aggLoc, (int)pos, translator.translateRelation(atom));
*var, *aggLoc, (int)pos, translator.getConcreteRelationName(atom));
}
++pos;
}
Expand Down

0 comments on commit c333612

Please sign in to comment.