anchor.diff:      // By default, the grammar tries to parse both (see top-level Formula parser).
       do ExpressionDeclImpl :=
           fun (R: P<Range>) ->
  -            (
  -                ((attempt_opt (UnaryOpExpr R))
  -                <||> (attempt_opt (BinOpExpr R))
  -                <||> (ExpressionSimple R))
  -            )
  +            (attempt_opt (OpExpr R))
  +            <||> (ExpressionSimple R)
               <!> "Expression"
   
       // Formulas
  
positive.code:     do ArgumentListImpl := fun (R: P<Range>) -> sepBy ((ExpressionDecl R) <!> "VarArgs Argument") Comma <!> "ArgumentList"
  
      // Unary operators
      let UnaryOpChar = (spaces >>. satisfy (fun c -> c = '+' || c = '-') .>> spaces) <!> "UnaryOp"
  
      // reserved words
      let ReservedWordsReference: P<Reference> =
  
negative.code:         opp.AddOperator(InfixOperator("*", spaces, 4, Associativity.Left, (fun lhs rhs -> AST.BinOpExpr("*", lhs, rhs))))
          opp.AddOperator(InfixOperator("/", spaces, 4, Associativity.Left, (fun lhs rhs -> AST.BinOpExpr("/", lhs, rhs))))
          opp.AddOperator(InfixOperator("^", spaces, 5, Associativity.Left, (fun lhs rhs -> AST.BinOpExpr("^", lhs, rhs))))
          opp.AddOperator(PrefixOperator("-", spaces, 6, false, (fun rhs -> AST.UnaryOpExpr('-', rhs))))
          opp.AddOperator(PrefixOperator("+", spaces, 6, false, (fun rhs -> AST.UnaryOpExpr('+', rhs))))
          opp
      
      let OpExpr(R: P<Range>): P<Expression> = (BinOpForRangeParser R).ExpressionParser <!> "OpExpr"
  
      // Parsing Excel argument lists is ambiguous without knowing
      // the arity of the function that you are parsing.  Thus parsers in this grammar
  