Added back completion support.
This commit is contained in:
@@ -16,56 +16,6 @@ namespace ast
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Replacing Variables
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Replaces all occurrences of a variable in a given term with another term
|
||||
struct ReplaceVariableInTermVisitor : public RecursiveTermVisitor<ReplaceVariableInTermVisitor>
|
||||
{
|
||||
static void accept(Variable &variable, Term &, const VariableDeclaration *original, VariableDeclaration *replacement)
|
||||
{
|
||||
if (variable.declaration == original)
|
||||
variable.declaration = replacement;
|
||||
}
|
||||
|
||||
// Ignore all other types of expressions
|
||||
template<class T>
|
||||
static void accept(T &, Term &, const VariableDeclaration *, VariableDeclaration *)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Replaces all occurrences of a variable in a given formula with a term
|
||||
struct ReplaceVariableInFormulaVisitor : public RecursiveFormulaVisitor<ReplaceVariableInFormulaVisitor>
|
||||
{
|
||||
static void accept(Comparison &comparison, Formula &, const VariableDeclaration *original, VariableDeclaration *replacement)
|
||||
{
|
||||
comparison.left.accept(ReplaceVariableInTermVisitor(), comparison.left, original, replacement);
|
||||
comparison.right.accept(ReplaceVariableInTermVisitor(), comparison.right, original, replacement);
|
||||
}
|
||||
|
||||
static void accept(In &in, Formula &, const VariableDeclaration *original, VariableDeclaration *replacement)
|
||||
{
|
||||
in.element.accept(ReplaceVariableInTermVisitor(), in.element, original, replacement);
|
||||
in.set.accept(ReplaceVariableInTermVisitor(), in.set, original, replacement);
|
||||
}
|
||||
|
||||
static void accept(Predicate &predicate, Formula &, const VariableDeclaration *original, VariableDeclaration *replacement)
|
||||
{
|
||||
for (auto &argument : predicate.arguments)
|
||||
argument.accept(ReplaceVariableInTermVisitor(), argument, original, replacement);
|
||||
}
|
||||
|
||||
// Ignore all other types of expressions
|
||||
template<class T>
|
||||
static void accept(T &, Formula &, const VariableDeclaration *, VariableDeclaration *)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Preparing Copying
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
Reference in New Issue
Block a user