![JAR search and dependency download from the Maven repository](/logo.png)
org.ggp.base.util.gdl.GdlVisitors Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alloy-ggp-base Show documentation
Show all versions of alloy-ggp-base Show documentation
A modified version of the GGP-Base library for Alloy.
The newest version!
package org.ggp.base.util.gdl;
import java.util.Collection;
import org.ggp.base.util.gdl.grammar.Gdl;
import org.ggp.base.util.gdl.grammar.GdlConstant;
import org.ggp.base.util.gdl.grammar.GdlDistinct;
import org.ggp.base.util.gdl.grammar.GdlFunction;
import org.ggp.base.util.gdl.grammar.GdlLiteral;
import org.ggp.base.util.gdl.grammar.GdlNot;
import org.ggp.base.util.gdl.grammar.GdlOr;
import org.ggp.base.util.gdl.grammar.GdlProposition;
import org.ggp.base.util.gdl.grammar.GdlRelation;
import org.ggp.base.util.gdl.grammar.GdlRule;
import org.ggp.base.util.gdl.grammar.GdlSentence;
import org.ggp.base.util.gdl.grammar.GdlTerm;
import org.ggp.base.util.gdl.grammar.GdlVariable;
public class GdlVisitors {
/**
* Visits the given Gdl object and any contained Gdl objects within
* with the given GdlVisitor. For example, when called on a GdlRule,
* the visitor's visitConstant function is called once for every
* constant anywhere in the head or body of the rule.
*
* @author Alex Landau
*/
public static void visitAll(Gdl gdl, GdlVisitor visitor) {
visitor.visitGdl(gdl);
if (gdl instanceof GdlTerm) {
visitTerm((GdlTerm) gdl, visitor);
} else if (gdl instanceof GdlLiteral) {
visitLiteral((GdlLiteral) gdl, visitor);
} else if (gdl instanceof GdlRule) {
visitRule((GdlRule) gdl, visitor);
} else {
throw new RuntimeException("Unexpected Gdl type " + gdl.getClass());
}
}
public static void visitAll(Collection extends Gdl> collection, GdlVisitor visitor) {
for (Gdl gdl : collection) {
visitAll(gdl, visitor);
}
}
private static void visitRule(GdlRule rule, GdlVisitor visitor) {
visitor.visitRule(rule);
visitAll(rule.getHead(), visitor);
visitAll(rule.getBody(), visitor);
}
private static void visitLiteral(GdlLiteral literal, GdlVisitor visitor) {
visitor.visitLiteral(literal);
if (literal instanceof GdlSentence) {
visitSentence((GdlSentence) literal, visitor);
} else if (literal instanceof GdlNot) {
visitNot((GdlNot) literal, visitor);
} else if (literal instanceof GdlOr) {
visitOr((GdlOr) literal, visitor);
} else if (literal instanceof GdlDistinct) {
visitDistinct((GdlDistinct) literal, visitor);
} else {
throw new RuntimeException("Unexpected GdlLiteral type " + literal.getClass());
}
}
private static void visitDistinct(GdlDistinct distinct, GdlVisitor visitor) {
visitor.visitDistinct(distinct);
visitAll(distinct.getArg1(), visitor);
visitAll(distinct.getArg2(), visitor);
}
private static void visitOr(GdlOr or, GdlVisitor visitor) {
visitor.visitOr(or);
for (int i = 0; i < or.arity(); i++) {
visitAll(or.get(i), visitor);
}
}
private static void visitNot(GdlNot not, GdlVisitor visitor) {
visitor.visitNot(not);
visitAll(not.getBody(), visitor);
}
private static void visitSentence(GdlSentence sentence, GdlVisitor visitor) {
visitor.visitSentence(sentence);
if (sentence instanceof GdlProposition) {
visitProposition((GdlProposition) sentence, visitor);
} else if (sentence instanceof GdlRelation) {
visitRelation((GdlRelation) sentence, visitor);
} else {
throw new RuntimeException("Unexpected GdlSentence type " + sentence.getClass());
}
}
private static void visitRelation(GdlRelation relation, GdlVisitor visitor) {
visitor.visitRelation(relation);
visitAll(relation.getName(), visitor);
visitAll(relation.getBody(), visitor);
}
private static void visitProposition(GdlProposition proposition,
GdlVisitor visitor) {
visitor.visitProposition(proposition);
visitAll(proposition.getName(), visitor);
}
private static void visitTerm(GdlTerm term, GdlVisitor visitor) {
visitor.visitTerm(term);
if (term instanceof GdlConstant) {
visitor.visitConstant((GdlConstant) term);
} else if (term instanceof GdlVariable) {
visitor.visitVariable((GdlVariable) term);
} else if (term instanceof GdlFunction) {
visitFunction((GdlFunction) term, visitor);
} else {
throw new RuntimeException("Unexpected GdlTerm type " + term.getClass());
}
}
private static void visitFunction(GdlFunction function, GdlVisitor visitor) {
visitor.visitFunction(function);
visitAll(function.getName(), visitor);
visitAll(function.getBody(), visitor);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy