package aima.core.logic.propositional.parsing;
import java.util.ArrayList;
import java.util.List;
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 AbstractPLVisitor implements PLVisitor {
private PEParser parser = new PEParser();
public Object visitSymbol(Symbol s, Object arg) {
return new Symbol(s.getValue());
}
public Object visitTrueSentence(TrueSentence ts, Object arg) {
return new TrueSentence();
}
public Object visitFalseSentence(FalseSentence fs, Object arg) {
return new FalseSentence();
}
public Object visitNotSentence(UnarySentence fs, Object arg) {
return new UnarySentence((Sentence) fs.getNegated().accept(this, arg));
}
public Object visitBinarySentence(BinarySentence fs, Object arg) {
return new BinarySentence(fs.getOperator(), (Sentence) fs.getFirst()
.accept(this, arg), (Sentence) fs.getSecond().accept(this, arg));
}
public Object visitMultiSentence(MultiSentence fs, Object arg) {
List<Sentence> terms = fs.getSentences();
List<Sentence> newTerms = new ArrayList<Sentence>();
for (int i = 0; i < terms.size(); i++) {
Sentence s = (Sentence) terms.get(i);
Sentence subsTerm = (Sentence) s.accept(this, arg);
newTerms.add(subsTerm);
}
return new MultiSentence(fs.getOperator(), newTerms);
}
protected Sentence recreate(Object ast) {
return (Sentence) parser.parse(((Sentence) ast).toString());
}
}