001package org.clafer.ast;
002
003/**
004 * Dynamic dispatch for AST expressions.
005 *
006 * @param <A> the parameter type
007 * @param <B> the return type
008 * @author jimmy
009 */
010public interface AstExprVisitor<A, B> {
011
012    public B visit(AstThis ast, A a);
013
014    public B visit(AstGlobal ast, A a);
015
016    public B visit(AstConstant ast, A a);
017
018    public B visit(AstJoin ast, A a);
019
020    public B visit(AstJoinParent ast, A a);
021
022    public B visit(AstJoinRef ast, A a);
023
024    public B visit(AstNot ast, A a);
025
026    public B visit(AstMinus ast, A a);
027
028    public B visit(AstCard ast, A a);
029
030    public B visit(AstSetTest ast, A a);
031
032    public B visit(AstCompare ast, A a);
033
034    public B visit(AstArithm ast, A a);
035
036    public B visit(AstSum ast, A a);
037
038    public B visit(AstBoolArithm ast, A a);
039
040    public B visit(AstDifference ast, A a);
041
042    public B visit(AstIntersection ast, A a);
043
044    public B visit(AstUnion ast, A a);
045
046    public B visit(AstMembership ast, A a);
047
048    public B visit(AstTernary ast, A a);
049
050    public B visit(AstIfThenElse ast, A a);
051
052    public B visit(AstDowncast ast, A a);
053
054    public B visit(AstUpcast ast, A a);
055
056    public B visit(AstLocal ast, A a);
057
058    public B visit(AstQuantify ast, A a);
059}