#include "mathparser.h" //** PARSER CONSTRUCTORS **// MathParser::MathParser() : Parser() {} MathParser::MathParser(const string& userInput) : Parser(userInput) { StripWhite(myInput); } MathParser::MathParser(const int& index) : Parser(index) { //NOTE: must be careful here because if //user creates a parser class and then //modifies the myInput, StripWhite must be run on it //at some point in time to prevent program crashes //during runtime } MathParser::MathParser(const string& userInput, const int& index) : Parser(userInput, index) { StripWhite(myInput); } void MathParser::makeVariable() { while (isalpha(myInput[myIndex]) && myInput[myIndex] != '=') { token += myInput[myIndex]; myIndex++; } } void MathParser::makeNum () { while (isdigit(myInput[myIndex])) { token += myInput[myIndex]; myIndex++; } } bool MathParser::isParen() { return (myInput[myIndex]=='(' || myInput[myIndex]==')'); } bool MathParser::isAssign() { return (myInput[myIndex]=='='); } bool MathParser::isOp() { return (myInput[myIndex]=='-' || myInput[myIndex]=='+' || myInput[myIndex]=='*' || myInput[myIndex]=='/' || myInput[myIndex]=='%'); } void MathParser::nextToken () { token = ""; //absolute value if(LowerString(myInput.substr(myIndex,3))=="sab") { token += LowerString(myInput.substr(myIndex,3)); myIndex+=3; return; } //square root else if(LowerString(myInput.substr(myIndex,4))=="sqrt") { token += LowerString(myInput.substr(myIndex,4)); myIndex+=4; return; } //sum else if(LowerString(myInput.substr(myIndex,3))=="sum") { token += LowerString(myInput.substr(myIndex,3)); myIndex+=3; return; } //average else if(LowerString(myInput.substr(myIndex,7))=="average") { token += LowerString(myInput.substr(myIndex,7)); myIndex+=7; return; } //mean else if(LowerString(myInput.substr(myIndex,4))=="mean") { token += LowerString(myInput.substr(myIndex,4)); myIndex+=4; return; } //makes a variable if(isalpha(myInput[myIndex])) { makeVariable(); return; } //makes a number out of digit chars else if(isdigit(myInput[myIndex])) { makeNum(); return; } else if(isAssign()) { token += myInput[myIndex]; myIndex++; } else if(isParen()) { token += myInput[myIndex]; myIndex++; } else if(isOp()) { token += myInput[myIndex]; myIndex++; } }