Transformation pass to add provenance information.
More...
#include <Provenance.h>
Transformation pass to add provenance information.
Definition at line 34 of file Provenance.h.
◆ clone()
◆ getName()
std::string souffle::ast::transform::ProvenanceTransformer::getName |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ transform()
bool souffle::ast::transform::ProvenanceTransformer::transform |
( |
TranslationUnit & |
translationUnit | ) |
|
|
overrideprivatevirtual |
◆ transformMaxHeight()
bool souffle::ast::transform::ProvenanceTransformer::transformMaxHeight |
( |
TranslationUnit & |
translationUnit | ) |
|
|
private |
Definition at line 273 of file Provenance.cpp.
277 : program.getRelations()) {
289 relation->addAttribute(mk<Attribute>(std::string(
"@rule_number"), QualifiedName(
"number")));
290 relation->addAttribute(mk<Attribute>(std::string(
"@level_number"), QualifiedName(
"number")));
296 struct M :
public NodeMapper {
297 using NodeMapper::operator();
299 Own<Node> operator()(Own<Node> node)
const override {
301 if (
auto atom =
dynamic_cast<Atom*
>(node.get())) {
302 atom->addArgument(mk<UnnamedVariable>());
303 atom->addArgument(mk<UnnamedVariable>());
304 }
else if (
auto neg =
dynamic_cast<Negation*
>(node.get())) {
305 auto atom = neg->getAtom();
306 atom->addArgument(mk<UnnamedVariable>());
307 atom->addArgument(mk<UnnamedVariable>());
317 clause->getHead()->apply(M());
321 clause->getHead()->addArgument(mk<NumericConstant>(0));
322 clause->getHead()->addArgument(mk<NumericConstant>(0));
324 std::vector<Argument*> bodyLevels;
326 for (
size_t i = 0;
i < clause->getBodyLiterals().
size();
i++) {
327 auto lit = clause->getBodyLiterals()[
i];
333 if (
auto atom =
dynamic_cast<Atom*
>(lit)) {
334 atom->addArgument(mk<UnnamedVariable>());
335 atom->addArgument(mk<ast::Variable>(
"@level_num_" + std::to_string(
i)));
336 bodyLevels.push_back(
new ast::Variable(
"@level_num_" + std::to_string(
i)));
341 clause->getHead()->addArgument(mk<NumericConstant>(clauseNum));
342 clause->getHead()->addArgument(getNextLevelNumber(bodyLevels));
The documentation for this class was generated from the following files: