anchor.diff:      keywords["*"] = TokenType.TIMES;
       keywords["/"] = TokenType.DIV;
       keywords["^"] = TokenType.POW;
  +    keywords["rt"] = TokenType.ROOT;
       keywords["sqrt"] = TokenType.SQRT;
       keywords["log"] = TokenType.LOG;
       keywords["cos"] = TokenType.COS;
       keywords["sin"] = TokenType.SIN;
  +    keywords["tan"] = TokenType.TAN;
       keywords["ln"] = TokenType.LN;
  -    keywords["e"] = TokenType.EFUNC;
  +    keywords["exp"] = TokenType.EFUNC;
       keywords["("] = TokenType.LBRACE;
       keywords[")"] = TokenType.RBRACE;
       keywords["{"] = TokenType.LBRACE;
  
positive.code:  * A Token consists of text and has a [TokenType].
   */
  class Token {
    /// The test of this token.
    String text;
    
    /// The type of this token.
  
negative.code:       }
  
        if(currentToken.type == TokenType.PLUS) {
          Expression rightOperand = expressionStack.removeLast();
          Expression leftOperand = expressionStack.removeLast();
          currentExpression = leftOperand + rightOperand;
          expressionStack.add(currentExpression);
          continue;
        }
  
        if(currentToken.type == TokenType.MINUS) {
          Expression rightOperand = expressionStack.removeLast();
          Expression leftOperand = expressionStack.removeLast();
          currentExpression = leftOperand - rightOperand;
          expressionStack.add(currentExpression);
          continue;
        }
  
        if(currentToken.type == TokenType.TIMES) {
          Expression rightOperand = expressionStack.removeLast();
          Expression leftOperand = expressionStack.removeLast();
          currentExpression = leftOperand * rightOperand;
          expressionStack.add(currentExpression);
          continue;
        }
  
        if(currentToken.type == TokenType.DIV) {
          Expression rightOperand = expressionStack.removeLast();
          Expression leftOperand = expressionStack.removeLast();
          currentExpression = leftOperand / rightOperand;
          expressionStack.add(currentExpression);
          continue;
        }
  
        if(currentToken.type == TokenType.POW) {
          Expression rightOperand = expressionStack.removeLast();
          Expression leftOperand = expressionStack.removeLast();
          currentExpression = leftOperand ^ rightOperand;
          expressionStack.add(currentExpression);
          continue;
        }
  
        if(currentToken.type == TokenType.UNMINUS) {
          Expression operand = expressionStack.removeLast();
          currentExpression = - operand;
          expressionStack.add(currentExpression);
          continue;
        }
  
        if(currentToken.type == TokenType.LOG) {
          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.removeLast();
          currentExpression = new Ln(operand);
          expressionStack.add(currentExpression);
          continue;
        }
  
        if(currentToken.type == TokenType.SQRT) {
          Expression operand = expressionStack.removeLast();
          currentExpression = new Sqrt(operand);
          expressionStack.add(currentExpression);
          continue;
        }
        
        if(currentToken.type == TokenType.COS) {
          Expression operand = expressionStack.removeLast();
          currentExpression = new Cos(operand);
          expressionStack.add(currentExpression);
          continue;
        }
        
        if(currentToken.type == TokenType.SIN) {
          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;
        }
  