package aima.core.logic.fol;
import java.util.ArrayList;
import java.util.List;
import aima.core.logic.fol.parsing.FOLVisitor;
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.TermEquality;
import aima.core.logic.fol.parsing.ast.Variable;
/**
* @author Ravi Mohan
*
*/
public class PredicateCollector implements FOLVisitor {
public PredicateCollector() {
}
@SuppressWarnings("unchecked")
public List<Predicate> getPredicates(Sentence s) {
return (List<Predicate>) s.accept(this, new ArrayList<Predicate>());
}
@SuppressWarnings("unchecked")
public Object visitPredicate(Predicate p, Object arg) {
List<Predicate> predicates = (List<Predicate>) arg;
predicates.add(p);
return predicates;
}
public Object visitTermEquality(TermEquality equality, Object arg) {
return arg;
}
public Object visitVariable(Variable variable, Object arg) {
return arg;
}
public Object visitConstant(Constant constant, Object arg) {
return arg;
}
public Object visitFunction(Function function, Object arg) {
return arg;
}
public Object visitNotSentence(NotSentence sentence, Object arg) {
sentence.getNegated().accept(this, arg);
return arg;
}
public Object visitConnectedSentence(ConnectedSentence sentence, Object arg) {
sentence.getFirst().accept(this, arg);
sentence.getSecond().accept(this, arg);
return arg;
}
public Object visitQuantifiedSentence(QuantifiedSentence sentence,
Object arg) {
sentence.getQuantified().accept(this, arg);
return arg;
}
}