package edu.stanford.nlp.ling.tokensregex.types;
import edu.stanford.nlp.ling.tokensregex.Env;
/**
* This interface represents an expression that can be evaluated to obtain a value.
*
* @author Angel Chang
*/
public interface Expression {
/**
* Returns tags associated with this expression.
*
* @return Tags associated with this expression
*/
Tags getTags();
/**
* Set the tags associated with this expression.
*
* @param tags Tags to associate with this expression
*/
void setTags(Tags tags);
/**
* Returns a string indicating the type of this expression.
*
* @return type of this expressions
*/
String getType();
/**
* Simplifies the expression using the specified environment.
*
* @param env Environment to simplify with respect to
* @return Simplified expressions
*/
Expression simplify(Env env);
/**
* Evaluates the expression using the specified environment and
* arguments. Arguments are additional context not provided
* by the environment.
*
* @param env Environment
* @param args Arguments
* @return Evaluated value
*/
Value evaluate(Env env, Object... args);
/**
* Returns whether the expression has already been evaluated to
* a Value
*
* @return true if the expression is already evaluated
*/
boolean hasValue();
}