// Code derived from Stroustrup's PPP2 book
// § Expressions: first try
//  -and beginning on p 197


  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 implementation of the function declarations:
        get_token(),  term()
    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.


class Token {
  Token(char ch) : kind{ch} {}

  Token(char ch, double val) : kind{ch}, value{val} {}

  char   kind  = '0';
  double value = 0.0;

Token  get_token();  // read a token from cin - (TBD!)
double term();       // read and evaluate a Term - (TBD!)

double expression()
  double left = expression();  // read and evaluate an Expression
                               //  -what could possibly go wrong here?

  Token t = get_token();  // get the next token

  switch (t.kind) {                  // see which kind of token it is
    case '+': return left + term();  // read and evaluate a Term, then do an add
    case '-':
      return left - term();  // read and evaluate a Term, then do a subtraction
    default: return left;    // return the value of the Expression

int main() { expression(); }

build & run:

g++ -std=c++20 -O2 -Wall -pedantic ./ch_06/main_p197.cpp && ./a.out


Pub: 17 Mar 2023 11:13 UTC
Edit: 02 May 2023 20:56 UTC
Views: 488