std::string getOperator(std::string &exp) { if (exp.size() == 0) return ""; if (exp.size() >= 2) { if (exp[0] == '&' && exp[1] == '&') { exp.erase(0, 2); return "&&"; } if (exp[0] == '|' && exp[1] == '|') { exp.erase(0, 2); return "||"; } } if (exp.size() == 1 && isOpSym(exp[0])) { std::string s; s += exp[0]; exp.erase(0, 1); return s; } if (exp[1] == '=' && isOpSym(exp[0])) { std::string s; s += exp[0]; s += "="; exp.erase(0, 2); return s; } if (isOpSym(exp[0])) { std::string s; s += exp[0]; exp.erase(0, 1); return s; } return ""; }
int main(){ LINKED_STACK myStack1 = linked_stack_init(); char myChar[] = "[((a+(b+c)))]"; int myVar; bool isWellformed = true; for (myVar = 0; myVar < sizeof(myChar); myVar++) { if(isOpSym(myChar[myVar])== true){ DATA myData = malloc(sizeof(DATA_t)); myData->mybalancingsymbol = myChar[myVar]; linked_stack_push(myStack1, myData); }else if(isCloseSym(myChar[myVar])== true){ if (myStack1->head!=NULL) { DATA mytmpData = linked_stack_pop(myStack1); char myTmpChar = mytmpData->mybalancingsymbol; if(isMatches(myTmpChar, myChar[myVar]) == false){ printf("Something wrong with %c, at index %d\n",myChar[myVar], myVar); isWellformed = false; }else{ //printf("index %d Good\n",myVar); } } } } if(isWellformed && myStack1->head==NULL){ printf("Well Balanced"); }else{ printf("Not well balanced"); } linked_stack_free(myStack1); return 1; }
TokenType nextTokenType(std::string exp) { if (exp.size() == 0) return TT_UNDEFINED; if (exp[0] == '&') return TT_OPERATOR; if (exp[0] == '|') return TT_OPERATOR; if (iswhiteSp(exp[0])) return TT_WHITESPACE; if (isChar(exp[0]) || exp[0] == '_') return TT_IDENTIFIER; if (isNum(exp[0])) return TT_NUMBER; if (exp[0] == '\"') return TT_STRING; if (exp.size() == 1) { if (isLangSym(exp[0])) return TT_LANGSYM; if (isOpSym(exp[0])) return TT_OPERATOR; } else { if (exp[0] == '.' && isNum(exp[1])) return TT_NUMBER; else if (isLangSym(exp[0])) return TT_LANGSYM; else if (isOpSym(exp[0])) return TT_OPERATOR; } return TT_UNDEFINED; }