anchor.diff:   * 
    * 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);
   
  
positive.code:       }
  
        if(currentToken.type == TokenType.PLUS) {
          Expression rightOperand = expressionStack.last;
          expressionStack.removeLast();
          Expression leftOperand = expressionStack.last;
          expressionStack.removeLast();
          Expression 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;
          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;
          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;
          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;
          expressionStack.add(currentExpression);
          continue;
        }
  
        if(currentToken.type == TokenType.UNMINUS) {
          Expression operand = expressionStack.last;
          expressionStack.removeLast();
          Expression 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);
          expressionStack.add(currentExpression);
          continue;
        }
  
        if(currentToken.type == TokenType.LN) {
          Expression operand = expressionStack.last;
          expressionStack.removeLast();
          Expression currentExpression = new Ln(operand);
          expressionStack.add(currentExpression);
          continue;
        }
  
        if(currentToken.type == TokenType.SQRT) {
          Expression operand = expressionStack.last;
          expressionStack.removeLast();
          Expression currentExpression = new Sqrt(operand);
          expressionStack.add(currentExpression);
          continue;
        }
        
        if(currentToken.type == TokenType.COS) {
          Expression operand = expressionStack.last;
          expressionStack.removeLast();
          Expression currentExpression = new Cos(operand);
          expressionStack.add(currentExpression);
          continue;
        }
        
        if(currentToken.type == TokenType.SIN) {
          Expression operand = expressionStack.last;
          expressionStack.removeLast();
          Expression currentExpression = new Sin(operand);
          expressionStack.add(currentExpression);
          continue;
        }
  
negative.code:  * A Token consists of text and has a [TokenType].
   */
  class Token {
    /// The text of this token.
    String text;
    
    /// The type of this token.
  