Codingrules mit Python umsetzen..

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
zdoktorov
User
Beiträge: 3
Registriert: Freitag 4. Dezember 2009, 13:15

Hallo.

Habe mir vorgenommen bestimmte Coding Rules für C++ zu prüfen.
Für diesen Zweck will paar Scripte in Phython schreiben, aber weil ich ziemlich neu in diesem GEbiet bin bitte um eure Hilfe und Ratschläge.

Also sag ma das folgende Beispiel:

Will ein kleines Script schreiben, der prüfen soll:

Alle VAriablen in einer Klasse müssen in dem Constriktor dekklariert sein.

Wie soll ich vorgehen.

Für Ratschläge oder vielleicht Beispielscode werde mich sehr freuen.

Danke im voraus.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hast du denn schon einen funktionierenden Parser für C++?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
zdoktorov
User
Beiträge: 3
Registriert: Freitag 4. Dezember 2009, 13:15

Ne noch nicht.
Aber ich habe mir gedacht, dass ich hier paar Ideen bekomme.
Ich denke dass es mit 2 bis drei schleifen sich erledigen lässt.
was meinst du?
wie soll ich bei der erstellung eines Phython Programm für diese Aufgabe vorgehen. GEdankenmässig?

Danke im voraus.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Hi,

hast Du schonmal Python-Scripte/Programme geschrieben, mit denen Du auf Dateien und deren Inhalt zugegriffen hast?

Bzw. ... hast du überhaupt schon mal etwas in Python entwickelt?

>>Masaru<<
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Als erstes musst du ja aus einer gegeben C++-Datei (*.cpp) alle Klassen filtern können -> Funktion ``filter_cpp_classes`` schreiben, die einen Dateinamen als Parameter nimmt und alle gefundenen Klassen als Generator zurückgibt (itertools.ifilter).

Wenn du mit Variablen Instanzvariablen meinst, musst du anschießend innerhalb dieser Klasse über alle Methoden (außer den Konstruktor!) iterieren und alle Variablennamen, denen ein ``this->`` vorangestellt ist, in einer Liste speichern. Danach prüfst du, ob alle (built-in Funktion ``all(iterable)``) in der Liste gespeicherten Variablen auch im Konstruktor deklariert wurden.

So würde ich zumindest vorgehen.
BlackJack

Nur mal so als Anmerkung: Man kann im Konstruktor bei C++ nichts deklarieren, also ausser lokalen Variablen natürlich, aber die sind ja *lokal*. Ich nehme mal an, hier ist *initialisieren* gemeint!? Dann braucht man sich die ganzen Methoden aber nicht anzuschauen, sondern "bloss" die Felder in der Klasse, und den Code im Konstruktor.

Zum Parsen würde ich mir erst einmal das XML ansehen, welches der `gccxml` ausspuckt, bzw. erst einmal schauen, ob man sich das nicht sowieso schon als Warnung vom `g++` ausgeben lassen kann. Bevor man das Rad womöglich neu erfindet…
Antworten