package aima.core.logic.propositional.visitors;
import java.util.Set;
import aima.core.logic.propositional.parsing.PLVisitor;
import aima.core.logic.propositional.parsing.ast.BinarySentence;
import aima.core.logic.propositional.parsing.ast.FalseSentence;
import aima.core.logic.propositional.parsing.ast.MultiSentence;
import aima.core.logic.propositional.parsing.ast.Symbol;
import aima.core.logic.propositional.parsing.ast.TrueSentence;
import aima.core.logic.propositional.parsing.ast.UnarySentence;
import aima.core.util.SetOps;
/**
* Super class of Visitors that are "read only" and gather information from an
* existing parse tree .
*
* @author Ravi Mohan
*
*/
public class BasicTraverser implements PLVisitor {
public Object visitSymbol(Symbol s, Object arg) {
return arg;
}
public Object visitTrueSentence(TrueSentence ts, Object arg) {
return arg;
}
public Object visitFalseSentence(FalseSentence fs, Object arg) {
return arg;
}
@SuppressWarnings("unchecked")
public Object visitNotSentence(UnarySentence ns, Object arg) {
Set s = (Set) arg;
return SetOps.union(s, (Set) ns.getNegated().accept(this, arg));
}
@SuppressWarnings("unchecked")
public Object visitBinarySentence(BinarySentence bs, Object arg) {
Set s = (Set) arg;
Set termunion = SetOps.union((Set) bs.getFirst().accept(this, arg),
(Set) bs.getSecond().accept(this, arg));
return SetOps.union(s, termunion);
}
public Object visitMultiSentence(MultiSentence fs, Object arg) {
throw new RuntimeException("Can't handle MultiSentence");
}
}