Parse

I developed this small ANSI C program at the university. It is a simple formula parser, useful for many situations, like an intelligent input in dialog boxes.

The gag in this parser is the possibility to compile formulas into p-code to get a major performance improvement while calculating. This is useful for formula plotters, etc., that uses the same formula only with different values.

In Parse.h some configurations can be done:

  • ‘‘Dbl’’ is a typedef for the type of the calculation of the parser. Normally it should be ‘‘float’’ or ‘‘double’’. ‘‘TERM_COMPILER’’ activates the p-code compiler. If you use the formula only once, than you should disable it, otherwise enable it.
  • buildTerm is called to compile an ASCII expression into p-code. If the ‘‘TERM_COMPILER’’ is not active, this routine does nothing.
  • ‘‘calcTerm’’, ‘‘calcTerm1’’, ‘‘calcTerm2’’, ‘‘calcTerm3’’ calculates the current expression with no, 1, 2 or 3 parameters. The parameters are put into the variables ‘‘X’’, ‘‘Y’’ and ‘‘Z’’. Undefined variables have the value ‘‘HUGE_VAL’’.

Besides the trivial operations (‘’+‘’, ‘’-‘’, ‘’*‘’, ‘’/‘’, ‘’^‘’, with brackets) the parser also know the following functions:

Name Description
‘‘PI’’ the value PI (3.1415926…)
‘‘E’’ the value e (2.7182818)
‘‘X’’, ‘‘Y’’, ‘‘Z’’ the values X, Y, Z
‘‘acos’’, ‘‘arccos’’ the function cos–1(a)
‘‘asin’’, ‘‘arcsin’’ the function sin–1(a)
‘‘atan’’, ‘‘arctan’’ the function tan–1(a)
‘‘atan2’’, ‘‘arctan2’’ the function tan–1(a,b)
‘‘ceil’’ the function ceil(a)
‘‘cos’’ the function cos(a)
‘‘cosh’’ the function cosh(a)
‘‘exp’’ the function exp(a)
‘‘floor’’ the function floor(a)
‘‘fmod’’ the function fmod(a)
‘‘log’’ the function log(a)
‘‘log10’’ the function log10(a)
‘‘pow’’ the function pow(a,b)
‘‘sin’’ the function sin(a)
‘‘sinh’’ the function sinh(a)
‘‘sqrt’’ the function sqrt(a)
‘‘tan’’ the function tan(a)
‘‘tanh’’ the function tanh(a)

Sourcecode for the Parser