From 89eeeff54f0b3ce30be5b046fc3899fdeb5ebb40 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Sat, 17 Feb 2007 16:31:55 +0000 Subject: Tweaked the stream classes, added an example, and the begining of a formula parser. --- src/formula.h | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/formula.h (limited to 'src/formula.h') diff --git a/src/formula.h b/src/formula.h new file mode 100644 index 0000000..1eccd36 --- /dev/null +++ b/src/formula.h @@ -0,0 +1,62 @@ +#ifndef FORMULA_H +#define FORMULA_H + +#include + +#include +#include "sbuffer.h" + +#include "exceptionbase.h" + +subExceptionDecl( ParseException ); + +/** + * + */ +class Formula +{ +public: + Formula(); + virtual ~Formula(); + + double run( const char *sFormula ); + +private: + enum + { + symEOS, + symAdd, + symSubtract, + symMultiply, + symDivide, + symOpenParen, + symCloseParen, + symNumber, + symVariable + }; + + typedef struct Token + { + Token() {} + Token( uint8_t nSym ) : nSym( nSym ) { } + Token( uint8_t nSym, double dNum ) : nSym( nSym ) { val.num = dNum; } + uint8_t nSym; + union + { + double num; + } val; + } Token; + + std::stack sToken; + Token tLook; + int nState; + SBuffer sBuf; + +private: + void push(); + void state(); + Token nextToken(); + void printToken( Token &tok ); +}; + +#endif -- cgit v1.2.3