content: 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;
  	}
  }