Problem bei Programmierung eines eigenes Interpretes in C++



  • Hallo an alle. Ich habe ein Problem. Momentan möchte ich gern so ne eigene kleine Scriptsprache machen, was lernzwecken keine Sorge. Ich habe schon mal ein in nomal C gemacht. Dort ist es um einiges einfacher mit den Zeichenkette. Ich hab hier ein Code, der eine Datei einliest und in einer Dynamischen Datenstrucktur einspeichert. Dort steht dann aber Segementation fault. Seht euch den Code bitte an. Es ist eig. kein fehler drin. Momentan kann man den noch gut nachvollziehen. Ich benutze ein Mac mit XCode 3.24 falls das wichtig ist der benutzt glaub ich gcc
    Danke fürs lesen

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    //bool getBefehl(char *const);
    
    typedef struct _Var{
    	string zeichenkette;
    	string varname;
    	int integer;
    	float kommazahl;
    	char buchstabe;
    	_Var *next;
    	_Var *first;
    }Var;
    typedef struct{
    	string befehl;
    	Var* variable;
        int zeil_cnt;
    	int stelle;
    }Befehl;
    typedef struct _zeile{
    	Befehl *befehl;
    	string name;
    	_zeile *next;
    	_zeile *first;
    }zeile;
    typedef struct{
    	zeile *diese;
    	zeile *next;
    	string name;
    	zeile *first;
    }source;
    
    Var* variablen;
    int var_cnt = 0;
    string befehle;
    char zeichen;
    zeile *zeilen = new zeile();
    void sprechen(){
    	zeilen->first;
       while (true) {
    	   if (zeilen->next == NULL) {
    	   cout << zeilen->name << endl;
    		 zeilen = zeilen->next;  
    	   }else
    	   {
    		   break;
    	   }
    
       }
    }
    
    int main (int argc, char *  argv[]) {
        if (argc < 2) {
    		cout << "Bitte eine Datei angeben" << endl;
    
    	}else{
    		fstream programm(argv[1]);
    		string zeil = "";
    		zeilen = new zeile();
    		zeilen->first = zeilen;
    		while (!programm.eof()) {
    			zeichen = programm.get();
    			if (zeichen !=  ' ') {
    
    			 zeilen->befehl = new Befehl();
    			 zeilen->befehl->befehl = zeil;
    			 zeilen->first = zeilen;
    			 zeilen->befehl->zeil_cnt = zeilen->befehl->zeil_cnt + 1;
    
    			 zeilen->next = new zeile();
    			 zeilen = zeilen->next;
    
    			 befehle = ""; 	
    			}
    			befehle = befehle + "" + zeichen;
    			//cout << befehle << endl;
    
    		}
    
    	}
    	sprechen();
    
        return 0;
    	}
    


  • Kein wunde dass das abstürzt, nimm doch eine std::liststd::sring für deine Zeilen.



  • jens.boesche@hotmail.de schrieb:

    Ich habe schon mal ein in nomal C gemacht. Dort ist es um einiges einfacher mit den Zeichenkette.

    Das ist jetzt aber nicht dein Ernst, oder?

    Dort steht dann aber Segementation fault. [...] Es ist eig. kein fehler drin.

    Wenn das Programm abstürzt, ist ein Fehler drin.

    Ich hab ehrlich gesagt keine Lust, auf die vielen Fehler in deinem Quellcode einzugehen, wenn du dir beim Schreiben der Frage offensichtlich so wenig Mühe gegeben hast.



  • 314159265358979 schrieb:

    Kein wunde dass das abstürzt, nimm doch eine std::liststd::sring für deine Zeilen.

    Wie meinst du das was ist da falsch ?



  • Es bedeutet: Nimm doch die Sprachmittel, die dir C++ zur Verfuegung stellt. Wenn sie dir unbekannt sind, waere es vielleicht angebracht, sich vorher intensiver mit C++ zu beschaeftigen.


Anmelden zum Antworten