https://rentry.org/PPP2_p185

// Code derived from Stroustrup's PPP2 book
// § 6.3.4 Using tokens
//  -and beginning on p 185

/*------------------------------------------------------------------------------

  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 declaration:
        get_token()
    is 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 <vector>

using std::cin;
using std::cout;
using std::vector;

// a simple user-defined type
class Token {
 public:
  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!)

vector<Token> toks;  // we'll put the tokens here

int main()
{
  while (cin) {
    Token t = get_token();
    toks.push_back(t);
  }

  // ...

  // Now we could find the multiply operation by a simple loop:

  for (unsigned i = 0; i < toks.size(); ++i) {
    if (toks[i].kind == '*') {  // we found a multiply!
      double d = toks[i - 1].value * toks[i + 1].value;
      cout << d << '\n';

      // now what?
    }
  }
}

build & run:

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

PrevUpNext

Edit
Pub: 14 Mar 2023 02:14 UTC
Edit: 30 Apr 2023 11:09 UTC
Views: 391