#include #include #include #include "muParserDLL.h" #define PARSER_CONST_PI 3.141592653589793238462643 #define PARSER_CONST_E 2.718281828459045235360287 #define PARSER_MAXVARS 10 //--------------------------------------------------------------------------- // Callbacks for postfix operators double Mega(double a_fVal) { return a_fVal * 1.0e6; } double Milli(double a_fVal) { return a_fVal / 1.0e3; } double ZeroArg() { printf("i'm a function without arguments.\n"); return 123; } //--------------------------------------------------------------------------- // Callbacks for infix operators double Not(double v) { return v==0; } //--------------------------------------------------------------------------- // Function callbacks double Rnd(double v) { return v * rand() / (double)(RAND_MAX+1.0); } double SampleQuery(const char *szMsg) { if (szMsg) printf("%s\n", szMsg); return 999; } double Sum(const double *a_afArg, int a_iArgc) { double fRes=0; int i=0; for (i=0; i=PARSER_MAXVARS-1) { printf("Variable buffer overflow."); return NULL; } return &afValBuf[iVal++]; } //--------------------------------------------------------------------------- void Intro(muParserHandle_t hParser) { printf(" __________ \n"); printf(" _____ __ __\\______ \\_____ _______ ______ ____ _______\n"); printf(" / \\ | | \\| ___/\\__ \\ \\_ __ \\/ ___/_/ __ \\\\_ __ \\ \n"); printf(" | Y Y \\| | /| | / __ \\_| | \\/\\___ \\ \\ ___/ | | \\/ \n"); printf(" |__|_| /|____/ |____| (____ /|__| /____ > \\___ >|__| \n"); printf(" \\/ \\/ \\/ \\/ \n"); printf(" Version %s (DLL)\n", mupGetVersion(hParser)); printf(" (C) 2010 Ingo Berg\n"); printf("---------------------------------------\n"); printf("Commands:\n"); printf(" list var - list parser variables\n"); printf(" list exprvar - list expression variables\n"); printf(" list const - list all numeric parser constants\n"); printf(" locale de - switch to german locale\n"); printf(" locale en - switch to english locale\n"); printf(" locale reset - reset locale\n"); printf(" quit - exits the parser\n\n"); printf("Constants:\n"); printf(" \"_e\" 2.718281828459045235360287\n"); printf(" \"_pi\" 3.141592653589793238462643\n"); printf("---------------------------------------\n"); printf("Please enter a formula:\n"); } //--------------------------------------------------------------------------- // Callback function for parser errors void OnError(muParserHandle_t hParser) { printf("\nError:\n"); printf("------\n"); printf("Message: \"%s\"\n", mupGetErrorMsg(hParser)); printf("Token: \"%s\"\n", mupGetErrorToken(hParser)); printf("Position: %d\n", mupGetErrorPos(hParser)); printf("Errc: %d\n", mupGetErrorCode(hParser)); } //--------------------------------------------------------------------------- void ListVar(muParserHandle_t a_hParser) { int iNumVar = mupGetVarNum(a_hParser); int i = 0; if (iNumVar==0) { printf("No variables defined\n"); return; } printf("\nExpression variables:\n"); printf("---------------------\n"); printf("Number: %d\n", iNumVar); for (i=0; i