ADF.java

package progen.kernel.functions;

import java.util.List;
import java.util.Map;

import progen.context.ProGenContext;
import progen.kernel.tree.Node;
import progen.kernel.tree.Tree;
import progen.userprogram.UserProgram;

/**
 * @author jirsis
 * 
 */
public class ADF extends NonTerminal {

  private static final long serialVersionUID = -1338537410471402589L;
  
  /**
   * Árbol que define el ADF concreto de esta instancia.
   */
  private Tree adf;

  /**
   * @param symbol
   * @throws NumberFormatException
   */
  public ADF(String symbol) {
    super(ProGenContext.getMandatoryProperty("progen." + symbol + ".interface"), symbol);
  }

  @Override
  public Object evaluate(List<Node> arguments, UserProgram userProgram, Map<String, Object> returnAddr) {
    for (int i = 0; i < arguments.size(); i++) {
      returnAddr.put(super.getSymbol() + "-" + "ARG" + i, arguments.get(i));
    }

    return adf.evaluate(userProgram, returnAddr);
  }

  /**
   * Establece que árbolo concreto será almacenado en un ADF.
   * 
   * @param tree
   */
  public void setADFTree(Tree tree) {
    this.adf = tree;
  }

}