Package aima.core.logic.fol.parsing

Source Code of aima.core.logic.fol.parsing.AbstractFOLVisitor

package aima.core.logic.fol.parsing;

import java.util.ArrayList;
import java.util.List;

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.Term;
import aima.core.logic.fol.parsing.ast.TermEquality;
import aima.core.logic.fol.parsing.ast.Variable;

/**
* @author Ravi Mohan
*
*/
public class AbstractFOLVisitor implements FOLVisitor {

  public AbstractFOLVisitor() {
  }

  protected Sentence recreate(Object ast) {
    return ((Sentence) ast).copy();
  }

  public Object visitVariable(Variable variable, Object arg) {
    return variable.copy();
  }

  public Object visitQuantifiedSentence(QuantifiedSentence sentence,
      Object arg) {
    List<Variable> variables = new ArrayList<Variable>();
    for (Variable var : sentence.getVariables()) {
      variables.add((Variable) var.accept(this, arg));
    }

    return new QuantifiedSentence(sentence.getQuantifier(), variables,
        (Sentence) sentence.getQuantified().accept(this, arg));
  }

  public Object visitPredicate(Predicate predicate, Object arg) {
    List<Term> terms = predicate.getTerms();
    List<Term> newTerms = new ArrayList<Term>();
    for (int i = 0; i < terms.size(); i++) {
      Term t = terms.get(i);
      Term subsTerm = (Term) t.accept(this, arg);
      newTerms.add(subsTerm);
    }
    return new Predicate(predicate.getPredicateName(), newTerms);

  }

  public Object visitTermEquality(TermEquality equality, Object arg) {
    Term newTerm1 = (Term) equality.getTerm1().accept(this, arg);
    Term newTerm2 = (Term) equality.getTerm2().accept(this, arg);
    return new TermEquality(newTerm1, newTerm2);
  }

  public Object visitConstant(Constant constant, Object arg) {
    return constant;
  }

  public Object visitFunction(Function function, Object arg) {
    List<Term> terms = function.getTerms();
    List<Term> newTerms = new ArrayList<Term>();
    for (int i = 0; i < terms.size(); i++) {
      Term t = terms.get(i);
      Term subsTerm = (Term) t.accept(this, arg);
      newTerms.add(subsTerm);
    }
    return new Function(function.getFunctionName(), newTerms);
  }

  public Object visitNotSentence(NotSentence sentence, Object arg) {
    return new NotSentence((Sentence) sentence.getNegated().accept(this,
        arg));
  }

  public Object visitConnectedSentence(ConnectedSentence sentence, Object arg) {
    Sentence substFirst = (Sentence) sentence.getFirst().accept(this, arg);
    Sentence substSecond = (Sentence) sentence.getSecond()
        .accept(this, arg);
    return new ConnectedSentence(sentence.getConnector(), substFirst,
        substSecond);
  }
}
TOP

Related Classes of aima.core.logic.fol.parsing.AbstractFOLVisitor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.