anchor.diff:        }
   
         if(currentToken.type == TokenType.PLUS) {
  -        Expression rightOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression leftOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression currentExpression = leftOperand + rightOperand;
  +        Expression rightOperand = expressionStack.removeLast();
  +        Expression leftOperand = expressionStack.removeLast();
  +        currentExpression = leftOperand + rightOperand;
           expressionStack.add(currentExpression);
           continue;
         }
   
         if(currentToken.type == TokenType.MINUS) {
  -        Expression rightOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression leftOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression currentExpression = leftOperand - rightOperand;
  +        Expression rightOperand = expressionStack.removeLast();
  +        Expression leftOperand = expressionStack.removeLast();
  +        currentExpression = leftOperand - rightOperand;
           expressionStack.add(currentExpression);
           continue;
         }
   
         if(currentToken.type == TokenType.TIMES) {
  -        Expression rightOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression leftOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression currentExpression = leftOperand * rightOperand;
  +        Expression rightOperand = expressionStack.removeLast();
  +        Expression leftOperand = expressionStack.removeLast();
  +        currentExpression = leftOperand * rightOperand;
           expressionStack.add(currentExpression);
           continue;
         }
   
         if(currentToken.type == TokenType.DIV) {
  -        Expression rightOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression leftOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression currentExpression = leftOperand / rightOperand;
  +        Expression rightOperand = expressionStack.removeLast();
  +        Expression leftOperand = expressionStack.removeLast();
  +        currentExpression = leftOperand / rightOperand;
           expressionStack.add(currentExpression);
           continue;
         }
   
         if(currentToken.type == TokenType.POW) {
  -        Expression rightOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression leftOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression currentExpression = leftOperand ^ rightOperand;
  +        Expression rightOperand = expressionStack.removeLast();
  +        Expression leftOperand = expressionStack.removeLast();
  +        currentExpression = leftOperand ^ rightOperand;
           expressionStack.add(currentExpression);
           continue;
         }
   
         if(currentToken.type == TokenType.UNMINUS) {
  -        Expression operand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression currentExpression = - operand;
  +        Expression operand = expressionStack.removeLast();
  +        currentExpression = - operand;
           expressionStack.add(currentExpression);
           continue;
         }
   
         if(currentToken.type == TokenType.LOG) {
  -        Expression rightOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression leftOperand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression currentExpression = new Log(leftOperand, rightOperand);
  +        Expression rightOperand = expressionStack.removeLast();
  +        Expression leftOperand = expressionStack.removeLast();
  +        currentExpression = new Log(leftOperand, rightOperand);
           expressionStack.add(currentExpression);
           continue;
         }
   
         if(currentToken.type == TokenType.LN) {
  -        Expression operand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression currentExpression = new Ln(operand);
  +        Expression operand = expressionStack.removeLast();
  +        currentExpression = new Ln(operand);
           expressionStack.add(currentExpression);
           continue;
         }
   
         if(currentToken.type == TokenType.SQRT) {
  -        Expression operand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression currentExpression = new Sqrt(operand);
  +        Expression operand = expressionStack.removeLast();
  +        currentExpression = new Sqrt(operand);
           expressionStack.add(currentExpression);
           continue;
         }
         
         if(currentToken.type == TokenType.COS) {
  -        Expression operand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression currentExpression = new Cos(operand);
  +        Expression operand = expressionStack.removeLast();
  +        currentExpression = new Cos(operand);
           expressionStack.add(currentExpression);
           continue;
         }
         
         if(currentToken.type == TokenType.SIN) {
  -        Expression operand = expressionStack.last;
  -        expressionStack.removeLast();
  -        Expression currentExpression = new Sin(operand);
  +        Expression operand = expressionStack.removeLast();
  +        currentExpression = new Sin(operand);
  +        expressionStack.add(currentExpression);
  +        continue;
  +      }
  +      
  +      if(currentToken.type == TokenType.EFUNC) {
  +        Expression operand = expressionStack.removeLast();
  +        currentExpression = new Exponential(operand);
           expressionStack.add(currentExpression);
           continue;
         }
  
positive.code:     keywords["*"] = TokenType.TIMES;
      keywords["/"] = TokenType.DIV;
      keywords["^"] = TokenType.POW;
      keywords["sqrt"] = TokenType.SQRT;
      keywords["log"] = TokenType.LOG;
      keywords["cos"] = TokenType.COS;
      keywords["sin"] = TokenType.SIN;
      keywords["ln"] = TokenType.LN;
      keywords["e"] = TokenType.EFUNC;
      keywords["("] = TokenType.LBRACE;
      keywords[")"] = TokenType.RBRACE;
      keywords["{"] = TokenType.LBRACE;
  
negative.code:  * 
   * For example, to access the token type PLUS:
   *     plusType = TokenType.PLUS;
   * 
   * Also defines the priority (precedence) of the token.
   *     (+,-) < (*,/) < (^) < functions
   * 
   */
  class TokenType {
    // Variables and values
    static final TokenType VAR = const TokenType._internal("VAR",10);
    static final TokenType VAL = const TokenType._internal("VAL",10);
  
  