package aima.core.logic.propositional.visitors; import java.util.HashSet; import java.util.Set; import aima.core.logic.propositional.parsing.ast.Sentence; import aima.core.logic.propositional.parsing.ast.Symbol; import aima.core.logic.propositional.parsing.ast.UnarySentence; import aima.core.util.SetOps; /** * @author Ravi Mohan * */ public class PositiveSymbolCollector extends BasicTraverser { @SuppressWarnings("unchecked") @Override public Object visitSymbol(Symbol symbol, Object arg) { Set<Symbol> s = (Set<Symbol>) arg; s.add(symbol);// add ALL symbols not discarded by the visitNotSentence // mathod return arg; } @SuppressWarnings("unchecked") @Override public Object visitNotSentence(UnarySentence ns, Object arg) { Set<Symbol> s = (Set<Symbol>) arg; if (ns.getNegated() instanceof Symbol) { // do nothing .do NOT add a negated Symbol } else { s = SetOps .union(s, (Set<Symbol>) ns.getNegated().accept(this, arg)); } return s; } @SuppressWarnings("unchecked") public Set<Symbol> getPositiveSymbolsIn(Sentence sentence) { return (Set<Symbol>) sentence.accept(this, new HashSet<Symbol>()); } }