Compiler
-
joar die war auch anfangs eingebaut aber die hat nicht die class akzeptiert:
class tSprache{ public: string Binärcode; string Name; };
-
Tufelix schrieb:
joar die war auch anfangs eingebaut aber die hat nicht die class akzeptiert
Was?
-
ok ich bau dann der vector wieder ein
-
Tufelix schrieb:
ok ich bau dann der vector wieder ein
Aber bitte nicht als Globale!
-
ok dann bau ich sie in der main-anweisungsblock ein und benutz ein zeiger um die sprache an die CodiereSprache funktion zu übergeben.
-
Tufelix schrieb:
[...] und benutz ein zeiger um die sprache an die CodiereSprache funktion zu übergeben.
Bitte, bitte nimm eine Referenz!
-
jop das meine ich ja
-
mmh die codiereSprache funktion tun noch nicht richtig...
-
Tufelix schrieb:
mmh die codiereSprache funktion tun noch nicht richtig...
Mit der "Fehlerbeschreibung" kann keiner was anfangen. Leuchtet ein, oder? Wie wär's mit Fehlerbeschreibung, eventuell Fehlercode, fehlerhafter Code...?
-
wie kann ich jetzt was in den vector hinein tun? ich muss ja einer der 2 Variabelen in der klasse auswählen, muss ich da ne igene funktion schreiben oder gibts da auch ne andere möglichkeit?
-
Vielleicht willst du einen Konstruktor.
#include <vector> #include <string> #include <iostream> struct foo_t { std::string a; std::string b; foo_t( const std::string ¶m_a, const std::string ¶m_b ) : a( param_a ), b( param_b ) { } }; int main() { std::vector< foo_t > bar; bar.push_back( foo_t( "Hugo", "Sepp" ) ); bar.push_back( foo_t( "Xaver", "Max" ) ); for( std::vector< foo_t >::iterator i = bar.begin(); i != bar.end(); ++i ) { std::cout << i->a << ", " << i->b << '\n'; } }
-
ok danke, jetzt tut der übersetzt einwandfrei.
-
Nun als ich eine kompexe sprache dem übersetzter einlesen habe kam es zu einem Fehler(string subscript out of range) wärend die "CodiereSprache"funktion die 12. zeile des "Sprach text" bearbeitet.Komischerweise ist das bei jeder Sprache die ich einlese so.Hat wer ne idee an was das liegen könnte?
CodiereSprache:
void CodiereSprache(string Satz ,vector<tSprache> &Sprache) { int SpalteBinär=0; while(isalnum(Satz[SpalteBinär])!=0 && isalnum(Satz[SpalteBinär+1])!=1) { SpalteBinär++; } int Ende=SpalteBinär; SpalteBinär++; int Spalte=SpalteBinär; while(isalnum(Satz[SpalteBinär])!=0 && isalnum(Satz[SpalteBinär+1])!=1) { SpalteBinär++; } Sprache.push_back(tSprache(Satz.substr(0,Ende),Satz.substr(Spalte,SpalteBinär))); cout <<Spalte<<" " << SpalteBinär<<endl;
-
Das Problem tritt wahrscheinlich eher bei der Zeile davor auf (Zeile 10). Mach dort mal einen Haltepunkt und überprüfe, ob
Satz[SpalteBinär+1]
auch wirklich im gültigen Bereich ist. Wahrscheinlich istSpalteBinär+1
größer alsSatz.size()
(oder kleiner als 0).
-
ich meinte die zeile 12 im text der der übersetzer übersetzt -.-
-
Tufelix schrieb:
ich meinte die zeile 12 im text der der übersetzer übersetzt -.-
Und in welcher Zeile in deinem Code passiert der Fehler?
-
DU machst dir unnötig Arbeit.
Bau dein Programm wie ein Compiler auf :
- Lexikalische Analyse
- Syntaktische Analyse
- Semantische Analysedas ist das beste was du machen kannst.
So kannst du die Fehler schneller finden die im Quellcode sind.Hier noch ein paar links:
http://de.wikipedia.org/wiki/Compiler
http://www.informatik.uni-rostock.de/tpp/lehre/slides/cobau.pdf
http://magazin.c-plusplus.net/artikel/AVL-Baum
http://magazin.c-plusplus.net/artikel/Compilerbau
-
AVL-Baum?
-
Er will den AVL-Baum bestimmt für den Syntaxbaum verwenden.
@ThreadErstellerSchau dir mal das Drachenbuch an. Umfangreicher, ausführlicher aber auch schwieriger Stoff: http://www.weltbild.de/3/14168864-1/buch/compilerbau.html?wea=8002019
-
Nun ich hab die "codiereSprache" jetzt zum laufen bekommen jetzt aber hängt die "vergleicheWort" funktion
string vergleicheWort(vector<string> &Woerter ,vector<tSprache> &Sprache) { string Binärcode; unsigned int c=0; signed int bearbeiteteWoerter=Woerter.size()-1; int Error=0; int HEX=0; while(bearbeiteteWoerter+1==0==false && Error==0 ) { if("HEX"==Woerter[bearbeiteteWoerter].substr(0,3)){ Binärcode=Binärcode+HEXA(Woerter[bearbeiteteWoerter].substr(3,Woerter[bearbeiteteWoerter].size()-3)); bearbeiteteWoerter--; } while(Sprache[c].Name!=Woerter[bearbeiteteWoerter] && bearbeiteteWoerter<0==false && c<Sprache.size() && Error==0){ c++; } if(c>=Sprache.size()){ Error=1; SetColor(13); cout << "Fehler Befehl konnte nicht gefunden werden:"<<endl; SetColor(15); cout<<"Befehl:"; SetColor(12); cout<<Woerter[bearbeiteteWoerter]<<endl; SetColor(15); cout<<"Zeile:"; SetColor(12); cout<<Zeilenanz<<endl; SetColor(15); } if(Error==0){ if(Sprache[c].Name==Woerter[bearbeiteteWoerter] && bearbeiteteWoerter<0==false && c<Sprache.size() ){ bearbeiteteWoerter--; Binärcode=Binärcode+Sprache[c].Binärcode; c=0; } } } return Binärcode; }
Das problem ist das diese Schleife nicht anhalten will obwohl die bedingungen nicht erfüllt werden:
while(bearbeiteteWoerter+1==0==false && Error==0 ) {
hat wer ne idee an was das liegen könnte(eventuell debuggeneinstellungen ändern)