And fpc/Lazarus has also "symbolic", but I never have used it so far.

Symbolic is an expression parser with a parsing - calculation separation, so you can evaluate repeatedly faster (e.g. for a graph or iterative algorithm).

It supports user defined constants and variables (the difference is that constants are inserted into the "bytecode", while variabeles are assumed to change every evaluation), and

allows to get a stringlist back with all unknown symbols in an expression. This allows to look up unknown variables in expressions that users typed in in your own structures.

No user defined functions yet (*), but basic one or two argument functions are easily added.

I don't know how it compares to fpexprpars, since that is a fairly recent addition, and frankly I don't know why this redundant unit was added.