int main(int argc, char* argv[]){ StackLi<char> tokenStack; StackLi<int> lineStack; char input; int lineCount = 1; lineStack.push(1); ifstream inputFile; inputFile.open(argv[1]); while(!inputFile.eof()){ inputFile.get(input); //EOF if(inputFile.peek() == EOF){ if(!tokenStack.isEmpty()){ cout << "Unmatched " << tokenStack.topAndPop() << " on line #" << lineStack.topAndPop() << endl; return 0; } if(tokenStack.isEmpty()){ cout << "OK" << endl; } } //end of line else if(input == '\n'){ lineCount++; //cout << input; } //reading char else{ // //match and ignore /* */ if(input == '/'){ inputFile.get(input); // now in /* if(input == '*'){ tokenStack.push('*'); lineStack.push(lineCount); bool asterisk = 0; bool closed = false; do{ inputFile.get(input); if(input == '*'){ asterisk = true; } else if (input != '/') { asterisk = false; } if(asterisk == true && input == '/'){ //cout << asterisk << input << endl; closed = true; tokenStack.topAndPop(); lineStack.topAndPop(); } }while(closed != true && !inputFile.eof()); if(inputFile.eof()){ cout << "Unmatched /* on line #" << lineStack.topAndPop() << endl; return 0; } } } //end matching /* */ // find */ if(input == '*'){ inputFile.get(input); if(input == '/'){ cout << "Unmatched */ on line #" << lineCount << endl; return 0; } } // if(input == '(' || input == '{' || input == '['){ tokenStack.push(input); lineStack.push(lineCount); } if(input == ')'){ if(tokenStack.topAndPop() != '('){ cout << "Unmatched " << input << " on line #" << lineStack.topAndPop() << endl; return 0; } } if(input == '}'){ if(tokenStack.topAndPop() != '{'){ cout << "Unmatched " << input << " on line #" << lineStack.topAndPop() << endl; return 0; } } if(input == ']'){ if(tokenStack.topAndPop() != '['){ cout << "Unmatched " << input << " on line #" << lineStack.topAndPop() << endl; return 0; } } } } return 0; }