Funktionen aus Datei auflisten
-
danke für deinen ansatz. soweit habe ich das auch schon. das problem ist das parsen. ich weiß nicht wie ich es parsen soll?!
-
Eine Funktionsdefinition sieht etwa so aus:
Typ Name(T1 Param1,T2,T3 Param3 = Default,T4 = Default)(diese hat 4 Parameter, davon 2 mit Defaultwerten - der zweite und vierte Parameter haben keinen Namen)
Dahinter kann jetzt entweder ein Semikolon kommen oder der Funktionsrumpf, der mit { beginnt. Du mußt jetzt nur unterscheiden, ob du dich gerade im Inneren einer anderen Funktion befindest (da sind keine Funktionsdefinitionen zulässig) oder nicht.
(und du solltest bedenken, daß Funktionsdeklarationen auch über mehrere Zeilen gehen können)
PS: Wenn du es geschafft hast, normale Funktionen zu zählen, kannst du mit Klassenmethoden weitermachen

-
danke...sehr hilfreiche antwort
was würde sich denn ambesten dafür anbieten es zu machen?...also weil du ja angesprochen hattest, dass die deklarationen auch über mehrere zeilen gehen können.
sollte ich die gesamte funktion erstmal in eine zeile packen und dann durchlaufen oder gibt es einen sinnvolleren/einfacheren weg dafür?
-
Was darfst du denn verwenden? Ich würde im Bestfall eine (vereinfachte) C++ Grammatik in Boost::Spirit schreiben und damit durch die Dateien durchgehen.
-
den file stream bist zum ersten ";" oder "{" lesen!
Wenn eine "{" kommst kanst rekursiv vorgehen und parsen bis wieder eine "}" kommt!
-
danke euch. habe es jetzt hinbekommen...
und es scheint zu funktionieren.aber ich habe noch eine andere frage und wollte nicht extra ein neues thema aufmachen.
und zwar geht es um folgendes:
gibt es beim stl::string eine methode um an eine bestimmte position etwas dranzuhängen?
also z.b.:
string foo; foo = "hallo!"; foo.FunktionZumDranhängen(" welt" /* string der drangehangen werden soll */, 5 /* position */); cout << foo << endl;ausgabe: hallo welt!
ist sowas in der stl vorhanden oder muss ich da durchiterieren?
-
append (?)
-
string s("HalloWelt"); s.insert(5, 1, ' ');
-
danke. insert wäre da schon die richtige funktion...bloß kann ich die leider doch nicht für meinen fall verwenden. gibe es eine suchen-ersetzen funktion?
also um mal zu erläutern was ich machen muss. ich habe es jetzt geschaffe die funktionen einer datei und deren quellcode herauszufinden. jetzt muss ich bei jedem if und jedem else ein leerzeichen dranhängen...also aus
if(1==1){ } else{ }sollte dann folgendes werden
if (1==1){ } else { }hatte mir erst gedacht zeichen für zeichen durchzugehen und abzufragen ob an der pos x ein i steht, an der position x+1 ein f, an der position x+2 ein ( und dann dazwischen mit insert ein leerzeichen reinzuschreiben...das klappt aber so leider nicht...

-
vector<string> replace; replace.push_back("if"); replace.push_back("else"); string code("if(1==1){\n\n}\nelse{\n\n}"); size_t pos = string::npos; for(size_t i = 0; i < replace.size(); ++i) { pos = code.find(replace[i]); if(pos != string::npos) code.insert(pos+replace[i].length(), 1, ' '); }
-
dankeeeee