Problem bei Definition von get_token();



  • Hallo!
    Ich lerne gerade C++ mithilfe des Buches "Einführung in die Programmierung mit C++" von Bjarne Stroustrup. Im Moment bin ich in Kapitel 6, genauer Seite 206. Dort wird versucht, mit einem neuen Typ Token einen Taschenrechner zu machen. Allerdings ist es so, dass get_token noch definiert werden muss, wovon in dem Buch allerdings nichts steht. Mein Code sieht im Moment so aus:

    #include<iostream>
    #include<fstream>
    #include<sstream>
    #include<cmath>
    #include<cstdlib>
    #include<string>
    #include<list>
    #include<vector>
    #include<algorithm>
    #include<stdexcept>
    using namespace std;
    
    class Token 
    {
    	public:
    	char kind;
    	double value;
    	Token(char ch)
    	:kind(ch), value(0){}
    	Token(char ch, double val)
    	:kind(ch), value(val){}
    };
    
    Token get_token();
    vector<Token> tok;
    
    int main()
    {
    	while (cin) {
    		Token t = get_token();
    		tok.push_back(t);
    	}
    }
    

    Für Hilfe wäre ich sehr dankbar.



  • Hallo,

    ich habe hier nur "Die C++ Programmiersprache" (und nicht das Einführungsbuch), aber hier wird auch in "6.1.2 Die Eingabefunktion" die get_token()-Funktion erklärt.
    Ich kann mir aber nicht vorstellen, daß diese nicht bei dir erklärt wird (evtl. ein paar Unterkapitel später).

    Ansonsten lautet sie:

    Token_value get_token()
    {
      char ch = 0;
      cin >> ch;
    
      switch(ch)
      {
        case 0:
          return curr_tok=END;
    
        case ';':
        // <- hier noch weitere Sonderzeichen: */+-()=
          return curr_tok=Token_value(ch);
    
        case '0':
        // alle weiteren Ziffern 1-9
        case '.':
          cin.putback(ch);
          cin >> number_value;
          return curr_tok=NUMBER;
        default:
          if (isalpha(ch))
          {
            cin.putback(ch);
            cin>>string_value;
            return curr_tok=NAME;
          }
          error("Falsches Token");
          return curr_tok=PRINT;
      }
    }
    

    (beachte meine Kommentare, dies sind weitere case-Anweisungen - bin zu faul zum tippen!)



  • Danke für die schnelle Antwort.

    Ich habe jetzt mal bis zum Kapitelende gelesen, aber es gibt keine weiteren
    Ausführungen dazu. Es wäre auch seltsam gewesen, da an dieser Stelle im
    Buch keine Verweise darauf sind.


Anmelden zum Antworten