code: public String evaluate(Map symbolTable)
  	throws RslEvaluationException {
  	String var = null;
  
  	if (symbolTable != null) {
  	    var = (String)symbolTable.get(value);
  	}
  
  	if (var == null && defValue != null) {
  	    var = defValue.evaluate(symbolTable);
  	}
  
  	if (var == null) {
  	    /* NOTE: according to the rsl specs the variables
  	     * should be replaces with empty string.
  	     * however, in real code an error is returned.
  	     */
  	    throw new RslEvaluationException("Variable '" + value + "' not defined.");
  	}
  
  	if (concatValue == null) {
  	    return var;
  	} else {
  	    return var + concatValue.evaluate(symbolTable);
  	}
      }
docs: Evaluates the variable reference with the specified
  symbol table.
  The value of the reference is first looked up in the
  symbol table. If not found, then the default value
  is used. If the default value is not specified,
  the reference is evaluated to an empty string.
  
  @param symbolTable the symbol table to evaluate
  the variabled reference against.
  @return an evaluated string.
  @exception RslEvaluationException If an error occured during
  rsl evaluation.