uCalc API Version: 2.1.3-preview.2 Released: 6/16/2026

Warning

uCalc API Preview Release Notice:The documentation describes the intended behavior of the API. The current preview build contains incomplete features, unoptimized performance, and is subject to breaking changes.

Symbol = [string]

Property

Product: 

Fast Math Parser

Class: 

ErrorInfo

Returns the specific symbol or token that triggered a parsing-stage error.

Remarks

The Symbol property is a crucial tool for diagnosing and recovering from errors within a custom error handler. When an error occurs during the parsing stage, this function returns the specific text of the symbol (e.g., an undefined variable name, a misplaced operator) that caused the failure.

This function is most effective when used inside a callback registered with uCalc.AddErrorHandler.

Parsing vs. Evaluation Errors

The behavior of ErrorSymbol depends on when the error occurs:

  • 📝 Parsing-Stage Errors: For errors like Undefined_Identifier or Syntax_Error, ErrorSymbol returns the problematic token. This allows for powerful recovery logic. For example, if a user types an undefined variable, you can capture its name with ErrorSymbol and define it on the fly.
  • ⚙️ Evaluation-Stage Errors: For errors that occur during calculation, such as FloatDivisionByZero, there is no single "symbol" at fault. In these cases, ErrorSymbol will return an empty string. You can check for an empty result to determine if the error was contextual or computational.

Common ErrorSymbol Results

Error Type (ErrorCode)Example ExpressionErrorSymbol() Result
Undefined_Identifierx * 10 (where x is not defined)"x"
Syntax_Error5 +++ 3 (if +++ is not a valid operator)"+++"
FloatDivisionByZero1 / 0"" (empty string)
Invalid_Argument_CountSin(1, 2)"Sin"

💡 Comparative Analysis

Compared to traditional try-catch blocks in C# or C++, uCalc's error handling provides far more granular context. A standard exception might tell you "An object reference was not found," but ErrorSymbol tells you the exact name of the object that was missing.

This level of detail transforms error handling from a simple reporting mechanism into a powerful recovery system. The ability to get the problematic symbol allows you to build self-healing expressions that can, for example, auto-define variables or suggest corrections to the user, a feat that is difficult to achieve with generic exception handling alone.

Examples

Adding an error handler callback
				
					using uCalcSoftware;

var uc = new uCalc();

static void MyErrorHandler(Handle_uCalc h) {
   var uc = new uCalc(h);
   Console.WriteLine("An error has occurred!");
   Console.WriteLine($"Error #: {(int)uc.Error.Code}");
   Console.WriteLine($"Error Message: {uc.Error.Message}");
   Console.WriteLine($"Error Symbol: {uc.Error.Symbol}");
   Console.WriteLine($"Error Location: {uc.Error.Location}");
   Console.WriteLine($"Error Expression: {uc.Error.Expression}");
}


uc.Error.AddHandler(MyErrorHandler);
Console.WriteLine(uc.EvalStr("123+"));
Console.WriteLine("");

uc.Error.TrapOnDivideByZero = true;
Console.WriteLine(uc.EvalStr("5/0"));
				
			
An error has occurred!
Error #: 257
Error Message: Syntax error
Error Symbol: +
Error Location: 3
Error Expression: 123+
Syntax error

An error has occurred!
Error #: 8
Error Message: Division by 0
Error Symbol: 
Error Location: 0
Error Expression: 
Division by 0
				
					#include <iostream>
#include "uCalc.h"

using namespace std;
using namespace uCalcSoftware;

void ucalc_call MyErrorHandler(Handle_uCalc h) {
   auto uc = uCalc(h);
   cout << "An error has occurred!" << endl;
   cout << "Error #: " << (int)uc.Error().Code() << endl;
   cout << "Error Message: " << uc.Error().Message() << endl;
   cout << "Error Symbol: " << uc.Error().Symbol() << endl;
   cout << "Error Location: " << uc.Error().Location() << endl;
   cout << "Error Expression: " << uc.Error().Expression() << endl;
}

int main() {
   uCalc uc;
   uc.Error().AddHandler(MyErrorHandler);
   cout << uc.EvalStr("123+") << endl;
   cout << "" << endl;

   uc.Error().TrapOnDivideByZero(true);
   cout << uc.EvalStr("5/0") << endl;
}
				
			
An error has occurred!
Error #: 257
Error Message: Syntax error
Error Symbol: +
Error Location: 3
Error Expression: 123+
Syntax error

An error has occurred!
Error #: 8
Error Message: Division by 0
Error Symbol: 
Error Location: 0
Error Expression: 
Division by 0
				
					Imports System
Imports uCalcSoftware
Public Module Program
   
   Public Sub MyErrorHandler(ByVal h As Handle_uCalc)
      Dim uc As New uCalc(h)
      Console.WriteLine("An error has occurred!")
      Console.WriteLine($"Error #: {CInt(uc.Error.Code)}")
      Console.WriteLine($"Error Message: {uc.Error.Message}")
      Console.WriteLine($"Error Symbol: {uc.Error.Symbol}")
      Console.WriteLine($"Error Location: {uc.Error.Location}")
      Console.WriteLine($"Error Expression: {uc.Error.Expression}")
   End Sub
   
   Public Sub Main()
      Dim uc As New uCalc()
      uc.Error.AddHandler(AddressOf MyErrorHandler)
      Console.WriteLine(uc.EvalStr("123+"))
      Console.WriteLine("")
      
      uc.Error.TrapOnDivideByZero = true
      Console.WriteLine(uc.EvalStr("5/0"))
   End Sub
End Module
				
			
An error has occurred!
Error #: 257
Error Message: Syntax error
Error Symbol: +
Error Location: 3
Error Expression: 123+
Syntax error

An error has occurred!
Error #: 8
Error Message: Division by 0
Error Symbol: 
Error Location: 0
Error Expression: 
Division by 0