aima.core.logic.fol.parsing.AbstractFOLVisitor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aima-core Show documentation
Show all versions of aima-core Show documentation
AIMA-Java Core Algorithms from the book Artificial Intelligence a Modern Approach 3rd Ed.
The newest version!
package aima.core.logic.fol.parsing;
import java.util.ArrayList;
import java.util.List;
import aima.core.logic.fol.parsing.ast.ConnectedSentence;
import aima.core.logic.fol.parsing.ast.Constant;
import aima.core.logic.fol.parsing.ast.Function;
import aima.core.logic.fol.parsing.ast.NotSentence;
import aima.core.logic.fol.parsing.ast.Predicate;
import aima.core.logic.fol.parsing.ast.QuantifiedSentence;
import aima.core.logic.fol.parsing.ast.Sentence;
import aima.core.logic.fol.parsing.ast.Term;
import aima.core.logic.fol.parsing.ast.TermEquality;
import aima.core.logic.fol.parsing.ast.Variable;
/**
* @author Ravi Mohan
*
*/
public class AbstractFOLVisitor implements FOLVisitor {
public AbstractFOLVisitor() {
}
protected Sentence recreate(Object ast) {
return ((Sentence) ast).copy();
}
public Object visitVariable(Variable variable, Object arg) {
return variable.copy();
}
public Object visitQuantifiedSentence(QuantifiedSentence sentence,
Object arg) {
List variables = new ArrayList();
for (Variable var : sentence.getVariables()) {
variables.add((Variable) var.accept(this, arg));
}
return new QuantifiedSentence(sentence.getQuantifier(), variables,
(Sentence) sentence.getQuantified().accept(this, arg));
}
public Object visitPredicate(Predicate predicate, Object arg) {
List terms = predicate.getTerms();
List newTerms = new ArrayList();
for (int i = 0; i < terms.size(); i++) {
Term t = terms.get(i);
Term subsTerm = (Term) t.accept(this, arg);
newTerms.add(subsTerm);
}
return new Predicate(predicate.getPredicateName(), newTerms);
}
public Object visitTermEquality(TermEquality equality, Object arg) {
Term newTerm1 = (Term) equality.getTerm1().accept(this, arg);
Term newTerm2 = (Term) equality.getTerm2().accept(this, arg);
return new TermEquality(newTerm1, newTerm2);
}
public Object visitConstant(Constant constant, Object arg) {
return constant;
}
public Object visitFunction(Function function, Object arg) {
List terms = function.getTerms();
List newTerms = new ArrayList();
for (int i = 0; i < terms.size(); i++) {
Term t = terms.get(i);
Term subsTerm = (Term) t.accept(this, arg);
newTerms.add(subsTerm);
}
return new Function(function.getFunctionName(), newTerms);
}
public Object visitNotSentence(NotSentence sentence, Object arg) {
return new NotSentence((Sentence) sentence.getNegated().accept(this,
arg));
}
public Object visitConnectedSentence(ConnectedSentence sentence, Object arg) {
Sentence substFirst = (Sentence) sentence.getFirst().accept(this, arg);
Sentence substSecond = (Sentence) sentence.getSecond()
.accept(this, arg);
return new ConnectedSentence(sentence.getConnector(), substFirst,
substSecond);
}
}