// Code derived from Stroustrup's PPP2 book// § 6.5.3 Terms// -and beginning on p 202/*------------------------------------------------------------------------------ Note: One of the goals behind the textbook's teaching for this section is to use an incremental approach for the student's understanding of all the various problems to be solved when creating a working calculator program. -As such, some of the examples from Ch 6 are non-working if left as-is. -This example is one of those. -The actual definitions of the function declarations: get_token(), primary() are being left till later on in the examples (so the build's linker step will fail therefore). For now, these are just placeholders for the ideas. A working example is already created for the classroom so you can look ahead.------------------------------------------------------------------------------*/#include<iostream>#include<stdexcept>#include<string>usingnamespacestd;voiderror(constchar*s){throwruntime_error(s);}classToken{public:Token(charch):kind{ch}{}Token(charch,doubleval):kind{ch},value{val}{}charkind='0';doublevalue=0.0;};Tokenget_token();// read a token from cin - (TBD!)doubleprimary();// read and evaluate a Primary - (TBD!)doubleterm(){doubleleft=primary();Tokent=get_token();while(true){switch(t.kind){case'*':left*=primary();break;case'/':{doubled=primary();if(d==0)error("divide by zero");left/=d;break;}default:returnleft;}t=get_token();}}doubleexpression(){doubleleft=term();Tokent=get_token();while(true){switch(t.kind){case'+':left+=term();break;case'-':left-=term();break;default:returnleft;// finally: no more + or -: return the answer}t=get_token();}}intmain()try{expression();}catch(exception&e){cerr<<e.what()<<'\n';return1;}catch(...){cerr<<"exception \n";return2;}