Die Formula-Library ist ein Versuch von mir, einen objektorientierten schnellen Bottom-Up-Formelparser mit Shift-Reduce Arbeitsweise in C++ zu implementieren, ohne Yacc oder Lex zu verwenden. Um die Leistungsfähigkeit zu demonstrieren, habe ich dazu ein kleines Plotter-Programm geschrieben (der Source-Code des Plotters und der Formula-Library steht unter GPL):

Fertig kompiliert: plotter2.exe
Die zugrundeliegende Library mit kompletten Source und Visual C++ Projekt: formula.zip
Das Plotterprogramm mit kompletten Source und Visual C++ Projekt: plotter.zip
Die Grammatik ist nahe an C angelehnt. Hier der Versuch einer BNF-Grammatik:
expression = and-expression [or-operator and-expression]
  and-expression = equal-expression [and-operator equal-expression]
  equal-expression = relational-expression [equal-operator relational-expression]
  relational-expression = sum [relational-operator sum]
  sum = [sign] term {additive-operator term}
  term = factor {multiplicative-operator factor}
  factor = power {power-operator power}
  power = power_operand {power-operator power_operand}
  power_operand = unsigned-real | variable | (expression) | function-call
  or-operator = |
  and-operator = &
  equal-operator = == | !=
  relational-operator = < | > | <= | >=
  additive-operator = + | -
  multiplicative-operator = * | / | %
  power-operator = ^
  not-operator = !
  variable = [a-z, A-Z, _]+ [a-z, A-Z, 0-9, _]*
  unsigned-real = [0-9]* [.] [0-9]* [real-exponent]
  real-exponent = [e|E] [+|-] [0-9]+
Folgende Funktionen werden folgende unterstüzt:
 acos
  asin
  atan
  atan2
  cos
  cosh
  exp
  fabs
  fmod
  log
  log10
  pow
  sin
  sinh
  tan
  tanh
  sqrt
  ceil
  floor
  max
  min
  time
Außerdem bietet die Library die Möglichkeit, Variablen zu setzen 
  und beliebige eigene Funktionen einfach einzuklinken.