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) |