001package org.clafer.ast;
002
003/**
004 * An expression in the AST language. Expressions are immutable.
005 *
006 * @author jimmy
007 */
008public interface AstExpr {
009
010    /**
011     * Dynamic dispatch on the visitor.
012     *
013     * @param <A> the parameter type
014     * @param <B> the return type
015     * @param visitor the visitor
016     * @param a the parameter
017     * @return the return value
018     */
019    public <A, B> B accept(AstExprVisitor<A, B> visitor, A a);
020}