Interpreter in C++



  • Da das mit dem Compiler eine recht komplizierte Idee war, will ich einen Interpreter schreiben. Wie fange ich an, welche Includes muss ich benutzen?
    Gruß,
    Christoph



  • #include <42>
    


  • [quote="Christoph-C++"]Wie fange ich an, welche Includes muss ich benutzen?/quote] Da musste ich eben lachen. 🙂 Ncihts für ungut, aber diese Frage lässt vermuten, dass deine C++ Kenntnisse nicht sehr ausgeprägt sind? Oder wie würdest du dich einschätzen?



  • Christoph-C++ schrieb:

    Da das mit dem Compiler eine recht komplizierte Idee war, will ich einen Interpreter schreiben. Wie fange ich an, welche Includes muss ich benutzen?
    Gruß,
    Christoph

    Deiner Frage nach solltest du von diesem Vorhaben erst mal großen Abstand nehmen. Das ist noch nichts für dich. Lern erst die Grundlagen und dann wirst du selber wissen, welche "Includes" du benötigst.

    Da man sich aber selten von seinen Ideen abbringen lässt, trotzdem ein Tipp: Du brauchst mindestens die Includes für die Ein- und Ausgabe, sowie für Strings und diverse andere STL-Container. Alles was dann noch nicht durch die STL abgedeckt ist, musst du selber implementieren oder eine andere fertige Implementierung finden.



  • Da hat sich aber einer was in Kopf gesetzt. 😃

    Na wie wäre es den erstmal, wenn du dich informierst was ein Interpreter ist. Such dir Informationen zusammen und schau dann mal ob du noch lust hast das zu programmieren.
    Sollte der Fall eintreten, dann überleg dir ob du genug C++ Kenntnisse hast oder du erstmal C++ lernen möchtest.



  • Fuchs aus dem Wald schrieb:

    Da hat sich aber einer was in Kopf gesetzt. 😃

    naja, andere Leute fangen mit nem JPEG-Algorithmus an *duckundweg*



  • daddy_felix schrieb:

    Fuchs aus dem Wald schrieb:

    Da hat sich aber einer was in Kopf gesetzt. 😃

    naja, andere Leute fangen mit nem JPEG-Algorithmus an *duckundweg*

    Ja aber frage ist hat er den gleichen Ehrgeiz? 😛
    Ich mein guck an das Ende von meinem Thread ... dat würd.



  • ...



  • Hallo,
    C++ Kenntnisse habe ich, da ich erst 12 bin, werde ich wohl kaum einen Compiler bauen, der dem neuesten Stand der Technik entspricht. Mit den Includes meine ich, ob ich string oder nur iostream oder cstring und so benutzen soll.
    Gruß,
    Christoph


  • Mod

    Wenn du nach includes fragst, dann fehlen dir die Kenntnisse für jedwedes komplexes Programm. Das möchte man dir sagen. Du übernimmst dich gerade völlig.

    Du wirst später feststellen, dass die Wahl der includes nicht der erste Schritt beim Schreiben eines Programms ist. Daher die belustigten Reaktionen auf deine Frage. Das ist als ob jemand im Bastlerforum sagt, dass er einen Schrank bauen möchte und als erstes fragt, welche Werkzeuge er aus dem Werkzeugkasten nehmen soll. So geht man einfach nicht vor. Wenn dir das noch nicht bekannt war, dann fehlt dir allgemein noch viel zu viel Erfahrung für dein Vorhaben. Lern zuerst die Grundlagen!



  • Kannste nicht mit was einfacherem Anfangen?
    Einem Egoshooter?

    Nein, ernsthaft. Lerne die Grundlagen von I/O. Fange klein an.
    Schreibe ein Programm, was eine Textdatei einliest, ausgibt und abspeichert.



  • Also ein Programm zu schreiben, was Dateien einliest, ist ja noch schwerer als sich ein Programm zu schreiben, was eine eingegebene Zeile in Einzelstrings unterteilt.



  • Christoph-C++ schrieb:

    Also ein Programm zu schreiben, was Dateien einliest, ist ja noch schwerer als sich ein Programm zu schreiben, was eine eingegebene Zeile in Einzelstrings unterteilt.

    Möchtest du Hilfe?? Dann ließ dir noch mal SeppJ's post genau durch und glaube den Leuten hier. Die Leute hier haben nämmlich sehr sehr viel mehr Ahnung von C++ als du und auch ich.
    Beachte ihre Tipps und stell konkrete fragen. Kauf dir ein Buch lern C++. Mach dich erstmal schlau.
    - C++ lernen
    - Informationen zum Interpreter suchen



  • Christoph-C++ schrieb:

    Also ein Programm zu schreiben, was Dateien einliest, ist ja noch schwerer als sich ein Programm zu schreiben, was eine eingegebene Zeile in Einzelstrings unterteilt.

    ok, wenn dir das "Daten einlesen" immer noch zu schwer ist, kannst auch noch einfacher anfangen und erstmal eine einzelne Zeile in Einzelstrings teilen. Oder in einzelne Zahlen. Oder wie auch immer du den String aufbauen willst.

    Wenn du denkst, das wäre schon ein "Interpreter", hast du dich aber gewaltig geschnitten. Die eigentliche Arbeit eines Interpreters ist das Verarbeiten ("interpretieren") der Daten. Das Einlesen ist da lediglich die Grundvorrausetzung.



  • Das bisher einzige große Programm ist ein RPG-Spiel.
    The Moon. Ich habe es mal programmiert:

    /* 
    
       Mein erstes C++ Role Playing Game
       Entwickelt von Christoph 
    
    */
    #include <iostream>
    
    int main()
    {
        int schlussel = 0;
        system("COLOR 0a");
    
        using namespace std;
    
        cout << "     The Moon " << endl; // Titel des Spiels
        cout << endl;
        cout << "Dein Name bitte" << endl; // Angabe des Namens
        char name[20];
        cin >> name;
        cout << "Willkommen im Adventure-Spiel THE MOON, " << name << endl;
        cout << "Welches Geschlecht" << endl;
        cout << "1> Junge " << endl;
        cout << "2> Mädchen" << endl;
        int geschlecht;
        cin >> geschlecht;
        cout << "Dann lass uns anfangen" << endl;
        cout << "Bist du bereit " << name << " ?? " << endl;
        system("PAUSE");
        // Beginn des eigentlichen Spiels
        spiel:
              veranda:
              system("CLS");
              cout << "Du bist auf einer Veranda eines Hauses" << endl;
              cout << "Neben dir ist eine Treppe" << endl;
              cout << "Was tust du?" << endl;
              cout << "1>Ins Haus gehen" << endl;
              cout << "2>Die Treppe runtergehen" << endl;
              int wahl;
              cin >> wahl;
              if(wahl == 1) { 
                      goto haus;
                      }
              if(wahl == 2) {
                      goto garten;
                      }
              haus:
                   system("CLS");
                   cout << "Du bist in das Haus herein gegangen" << endl;
                   cout << "Dort liegt ein Buch" << endl;
                   cout << "Links daneben ist eine Tuer" << endl;
                   cout << "Was willst du tun?" << endl;
                   cout << "1>Buch lesen" << endl;
                   cout << "2>Auf die Veranda zurück gehen" << endl;
                   int control;
                   cin >> control;
                   if( control == 1 ) {
                       goto buch;
                       }
                   if ( control == 2 ) {
                       goto veranda;
                       }
              garten:
                     system("CLS");
                     cout << "Du bist im Garten" << endl;
                     cout << "Vor dir ist eine alte Tür" << endl;
                     cout << "Links neben dir ist eine verschlossene Tür" << endl;
                     cout << "Was machts du?" << endl;
                     cout << "1>Die alte Tür öffnen" << endl;
                     cout << "2>Zur verschlossenen Tür gehen" << endl;
                     cout << "3>Auf die Veranda zurück" << endl;
                     int eingabe;
                     cin >> eingabe;
                     if ( eingabe == 1 ) {
                          goto altetur;
                          }
                     if ( eingabe == 2 ) { 
                          goto tur;
                          }
                     if ( eingabe == 3 ) {
                          goto veranda;
                          }
              buch:
                   system("CLS");
                   cout << "In dem Buch liegt ein Schlüssel" << endl;
                   cout << "Dort steht:" << endl;
                   cout << "WER DAS LICHT SUCHT FINDET DUNKELHEIT" << endl;
                   cout << "WER DIE DUNKELHEIT SUCHT FINDET DAS LICHT" << endl;
                   cout << "Du fragst dich, was das bedeuten soll" << endl;
                   cout << "Was machst du jetzt?" << endl;
                   cout << "1>Zurück auf die Veranda" << endl;
                   int gut;
                   schlussel = 1;
                   cin >> gut;
                   if ( gut == 1 ) {
                        goto veranda;
                        }
    
              altetur:
                      system("CLS");
                      cout << "Du stehst vor der alten Tür" << endl;
                      cout << "Dahinter ist ein großer Teich" << endl;
                      cout << "Neben der Tür ist eine verschlossene Tür" << endl;
                      cout << "Was Machst du?" << endl;
                      cout << "1>Durch die alte Tür gehen" << endl;
                      cout << "2>Zur verschlossenen Tür gehen" << endl;
                      cout << "3>Zurück in den Garten" << endl;
                      int ok;
                      cin >> ok;
                      if ( ok == 1 ) {
                           goto ungewisse;
                           }
                      if ( ok == 2 ) {
                           goto tur;
                           }
                      if ( ok == 3 ) {
                           goto garten;
                           }
              tur:
                  system("CLS");
                  cout << "Du stehst vor der verschlossenen Tür" << endl;
                  cout << "Mal sehen, ob du den Schlüssel hast" << endl;
                  cout << "Hm........ Hm....." << endl;
                  if ( schlussel == 0 ) {
                       cout << "Oh,Oh... Die Tür lässt sich nicht aufmachen" << endl;
                       cout << "Tja, suche den Schlüssel" << endl;
                       cout << "Was willst du machen" << endl;
                       cout << "1>Wieder zurück in den Garten" << endl;
                       int a;
                       cin >> a;
                       if ( a == 1 ) {
                            goto garten;
                            }
                       }
                  if ( schlussel == 1 ) {
                       cout << "Du hast die Tür aufgemacht" << endl;
                       cout << "Was wirst du tun?" << endl;
                       cout << "1>Durch die Tür gehen" << endl;
                       cout << "2>Wieder in den Garten" << endl;
                       int b;
                       cin >> b;
                       if ( b == 1 ) {
                            goto labor;
                            }
                       if ( b == 2 ) {
                            goto garten;
                            }
                       }
              ungewisse:
                        system("CLS");
                        cout << "Du bist vor dem Teich" << endl;
                        cout << "Auf dem Wasser schwimmt ein Plan" << endl;
                        cout << "Er liegt in einem Briefumschlag" << endl;
                        cout << "Was wirst du tun" << endl;
                        cout << "1>Den Briefumschlag herausholen und öffnen" << endl;
                        cout << "2>Zurück in den Garten" << endl;
                        int c;
                        cin >> c;
                        if ( c == 1 ) {
                             cout << "Du hast ihn herausgeholt und geöffnet" << endl;
                             cout << "Doch das Wasser hat ihn völlig aufgelöst" << endl;
                             cout << "In der Ecke steht ein Name:" << endl;
                             cout << "Dr. MOON" << endl;
                             cout << "Was willst du tun?" << endl;
                             cout << "1>Zurück in den Garten" << endl;
                             int aufgabe;
                             cin >> aufgabe;
                             if ( aufgabe == 1 ) {
                                  goto garten;
                                  }
                             } 
                       if ( c == 2 ) {
                            goto garten;
                            }   
             labor:
                   system("CLS");
                   cout << "Du bist durch die Tür gegangen" << endl;
                   cout << "In dem Schuppen stehen ein:" << endl;
                   cout << "Teleskop" << endl;
                   cout << "Oszillographen" << endl;
                   cout << "Computer" << endl;
                   cout << "Alles ist verstaubt" << endl;
                   cout << "In der Ecke ist eine Falltür" << endl;
                   cout << "Was wirst du tun?" << endl;
                   cout << "1>Die Falltür öffnen" << endl;
                   cout << "2>Durch das Teleskop gucken" << endl;
                   cout << "3>Den Computer starten" << endl;
                   int d;
                   cin >> d;
                   if ( d == 1 ) {
                        goto falltur;
                        }
                   if ( d == 2 ) {
                        goto teleskop;
                        }
                   if ( d == 3 ) {
                        goto computer;
                        }
             computer:
                      system("CLS");
                      cout << "Du hast den Computer eingeschaltet" << endl;
                      cout << "Seine Festplatte arbeitet nicht" << endl;
                      cout << "Er zeigt wieder diesen Namen an" << endl;
                      cout << "Dr.MOON........Dr.MOON" << endl;
                      cout << "Der Computer quitiert dann den Dienst" << endl;
                      cout << "Was willst du tun?" << endl;
                      cout << "1>Durch die Falltür gehen" << endl;
                      cout << "2>Durch das Teleskop gucken" << endl;
                      cout << "3>Zurück in den Garten" << endl;
                      int e;
                      cin >> e;
                      if ( e == 1 ) {
                           goto falltur;
                           }
                      if ( e == 2 ) {
                           goto teleskop;
                           }
                      if ( e == 3 ) {
                           goto garten;
                           }
             teleskop:
                      system("CLS");
                      cout << "Du guckst durch das Teleskop" << endl;
                      cout << "Durch das Teleskop siehst du den Mond" << endl;
                      cout << "Der Mond. Das Teleskop hat die Innenschrift:" << endl;
                      cout << "Dr.MOON" << endl;
                      cout << "Was willst du machen?" << endl;
                      cout << "1>Die Falltür betreten" << endl;
                      cout << "2>Den Computer starten" << endl;
                      cout << "3>Zurück in den Garten" << endl;
                      int f;
                      cin >> f;
                      if ( f == 1 ) {
                           goto falltur;
                           }
                      if ( f == 2 ) {
                           goto computer;
                           }
                      if ( f == 3 ) {
                           goto garten;
                           }
    
             falltur:
                     system("CLS");
                     cout << "Du bist durch die Falltür in einen Gang gekommen" << endl;
                     cout << "Der sehr alt ist. Du siehst am Ende des Ganges eine" << endl;
                     cout << "helle Lampe, du kannst aber die Tür nicht erreichen" << endl;
                     cout << "Sie ist zu weit entfernt" << endl;
                     cout << "Neben dir steht eine Lore" << endl;
                     cout << "die mit einem Motor ausgestattet ist" << endl;
                     cout << "Was wirst du tun?" << endl;
                     cout << "1>Die Lore anwerfen" << endl;
                     cout << "2>Die Leiter wieder hochklettern" << endl;
                     int g;
                     cin >> g;
                     if ( g == 1 ) {
                          goto gang;
                          }
                     if ( g == 2 ) {
                          goto labor;
                          }
             gang:
                  system("CLS");
                  cout << "Du bist am Ende des langen Ganges." << endl;
                  cout << "Dort hinten steht ein Tisch" << endl;
                  cout << "Mit einer Notiz:" << endl;
                  cout << "DR.MOON,DER EINZIGE,DER BESTE,DER KLÜGSTE" << endl;
                  cout << "Was ist damit gemeint" << endl;
                  cout << "Vor dir ist eine offene Tür." << endl;
                  cout << "Was willst du machen" << endl;
                  cout << "1>Durch die Tür gehen." << endl;
                  cout << "2>Zurückfahren" << endl;
                  int h;
                  cin >> h;
                  if ( h == 1 ) {
                       goto landstrasse;
                       }
                  if ( h == 2 ) {
                       goto falltur;
                       }
    
             landstrasse:
                        system("CLS");
                        cout << "Du bist bei einer verlassenen Straße angekommen" << endl;
                        cout << "Neben dieser Straße ist eine Garage" << endl;
                        cout << "Sonst gibt es nur Sand." << endl;
                        cout << "Dieser Gang musste wohl länger sein als du dachtest" << endl;
                        cout << "Was willst du tun?" << endl;
                        cout << "1>Zurück durch die Tür" << endl;
                        cout << "2>In den Schuppen" << endl;
                        int i;
                        cin >> i;
                        if ( i == 1 ) {
                             goto gang;
                             }
                        if ( i == 2 ) {
                             goto schuppen;
                             }
    
             schuppen:
                      system("CLS");
                      cout << "Du bist im Schuppen." << endl;
                      cout << "Dort steht ein Auto, eine Rakete und ein Buch" << endl;
                      cout << "Auf dem Buch steht:" << endl;
                      cout << "DIE REISE ZUM MOND" << endl;
                      cout << "Was willst du machen" << endl;
                      cout << "1>Mit dem Auto fahren" << endl;
                      cout << "2>In die Rakete steigen" << endl;
                      int j;
                      cin >> j;
                      if ( j == 1 ) {
                           cout << "Das Auto hat keinen Spritt." << endl;
                           cout << "Was willst du tun" << endl;
                           cout << "1>Zur Rakete gehen" << endl;
                           int k;
                           cin >> k;
                           if ( k == 1 ) {
                                goto rakete;
                                }
                           }
                      if ( j == 2 ) {
                           goto rakete;
                           }
             rakete:
                    cout << "Du steigst in die Rakete" << endl;
                    cout << "Dabei bist du versehendlich auf den Startfknopf " << endl;
                    cout << "gekommen. Die Rakete fliegt los und du wirst " << endl;
                    cout << "Völlig durchgeschüttelt" << endl;
                    cout << "Nun geht das Abenteuer erst richtig los!" << endl;
                    cout << "HA...HA....HAAAA...............!!!!!!!" << endl;
                    system("PAUSE");
                    goto mond;
    
             // Der Spannenste Teil der Geschichte 
    
             mond:
                  system("CLS");
                  cout << "Mit ein paar Prellungen und einer demolierten Maschine" << endl;
                  cout << "Kommst du auf dem Mond an" << endl;
                  cout << "Die Luft reicht nur noch für 10 Stunden" << endl;
                  cout << "Beeil dich mit deiner Erkundung" << endl;
                  cout << "Was willst du machen" << endl;
                  cout << "1>Den Raumanzug anziehen" << endl;
                  cout << "2>Die Messwerte auswerten" << endl;
                  int l;
                  cin >> l;
                  if ( l == 1 ) {
                       cout << "Der Raumanzug wurde angezogen." << endl;
                       cout << "Was nun?" << endl;
                       cout << "1>Auf den Mond gehen" << endl;
                       int m;
                       cin >> m;
                       if ( m == 1 ) {
                           goto spaziergang;
                            }
                       }
                  if ( l == 2 ) {
                       cout << "Die Messwerte sind:" << endl;
                       cout << "Nach der Oberfläche des Mondes:" << endl;
                       cout << "10% Gas " << endl;
                       cout << "20% Stickstoff" << endl;
                       cout << "50% Gestein" << endl;
                       cout << "30% Tritanium Legierung" << endl; // Die erschreckende Stelle
                       system("PAUSE");
                       system("CLS");
                       cout << "Was ..........." << endl;
                       cout << "Ein 2 Raumschiff ist hier:" << endl;
                       cout << "Größer Als Unseres" << endl;
                       cout << "Zieh dir den Raumanzug an und untersuche es" << endl;
                       system("PAUSE");
                       goto mond;
                       }
    
             spaziergang:
                         cout << "Du bist auf der Mondoberfläche und siehst:" << endl;
                         cout << "Viel Gestein " << endl;
                         cout << "Ein zweites Raumschiff" << endl;
                         cout << "Die Erde" << endl;
                         system("PAUSE");
                         cout << "Wenn du auf die Anzeigen geguckt hättest" << endl;
                         cout << "Dann würdest du wissen, dass hier ein zweites" << endl;
                         cout << "Raumschiff ist" << endl;
                         cout << "Was willst du machen" << endl;
                         cout << "1>Zum Raumschiff gehen" << endl;
                         cout << "2>Zur Rakete zurückkehren" << endl;
                         int n;
                         cin >> n;
                         if ( n == 1 ) {
                              goto raumschiff;
                              }
                         if ( n == 2 ) {
                              goto mond;
                              }
    
             raumschiff:
                        system("CLS");
                        cout << "Nun bist du im Raumschiff" << endl;
                        cout << "Du siehst einen Stuhl" << endl;
                        cout << "Daneben eine Anzeige" << endl;
                        cout << "Die Luft in dem Schiff ist aufgebraucht" << endl;
                        cout << "Was machst du?" << endl;
                        cout << "1>Zum Stuhl gehen und die Anzeigen anschauen" << endl;
                        cout << "2>Aus der Rakete rausgehen" << endl;
                        int o;
                        cin >> o;
                        if ( o == 1 ) {
                             goto cockpit;
                             }
                        if ( o == 2 ) {
                             goto spaziergang;
                             }
    
             cockpit:
                     system("CLS");
                     cout << "Du bist vor dem Stuhl" << endl;
                     cout << "Du drehst den Stuhl um und siehst eine Leiche mit dem Namen:" << endl;
                     system("PAUSE");
                     cout << name << endl;
                     cout << "Du erschreckst dich und fällst um" << endl;
                     cout << "........" << endl;
                     system("PAUSE");
                     system("CLS");
                     cout << "Nach 1 Stunde wachst du wieder Auf und guckst um dich herum" << endl;
                     cout << "Du liegst in deinem Bett auf der Veranda in dem geheimen Haus" << endl;
                     cout << ">>Was ist passiert<<,fragst du dich." << endl;
                     cout << "Aber das ist das Rätzel:" << endl;
                     cout << "WER DAS LICHT SUCHT FINDET DUNKELHEIT." << endl;
                     cout << "WER DIE DUNKELHEIT SUCHT FINDET DAS LICHT..............." << endl;
                     cout << endl;
                     cout << "Dieses Abenteuer hast du vielleicht bestanden." << endl;
                     cout << "Aber das nächste........." << endl;
                     cout << endl;
                     system("PAUSE");
    
             return 0;
    
    }
    

    Das wäre der Code des Spiels.



  • Meinst du das ist gut??



  • lies am besten erstmal ein gutes C++-Buch. In dienem Code ist noch *sehr* viel Verbesserungsbedarf:

    * std::string statt char[]
    * "geschlecht" als enum (oder ganz weglassen, wird eh nicht benötigt)
    * kein "goto"
    * Verwendung von Funktionen zur Strukturierung des Quellcodes
    * Fehlerbehandlung bei Benutzereingaben



  • ...



  • Mit goto.



  • Da hast du dein Interpretertutorial.


Anmelden zum Antworten