package aima.core.logic.propositional.visitors; 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.Sentence; import aima.core.logic.propositional.parsing.ast.Symbol; import aima.core.logic.propositional.parsing.ast.TrueSentence; import aima.core.logic.propositional.parsing.ast.UnarySentence; /** * @author Ravi Mohan * */ public class AndDetector implements PLVisitor { public Object visitSymbol(Symbol s, Object arg) { return new Boolean(false); } public Object visitTrueSentence(TrueSentence ts, Object arg) { return new Boolean(false); } public Object visitFalseSentence(FalseSentence fs, Object arg) { return new Boolean(false); } public Object visitNotSentence(UnarySentence fs, Object arg) { return fs.getNegated().accept(this, null); } public Object visitBinarySentence(BinarySentence fs, Object arg) { if (fs.isAndSentence()) { return new Boolean(true); } else { boolean first = ((Boolean) fs.getFirst().accept(this, null)) .booleanValue(); boolean second = ((Boolean) fs.getSecond().accept(this, null)) .booleanValue(); return new Boolean((first || second)); } } public Object visitMultiSentence(MultiSentence fs, Object arg) { throw new RuntimeException("can't handle multisentences"); } public boolean containsEmbeddedAnd(Sentence s) { return ((Boolean) s.accept(this, null)).booleanValue(); } }