Wątpię znaleźć narzędzia takie jak to off-the-shelf. Potrzebne jest więc niestandardowe narzędzie. Nie próbuj tego zrobić przy użyciu metody hackowania ciągów (np. Perl), ponieważ szczegółowe informacje o analizie C i C++ są znacznie wykraczające poza to, co możesz niezawodnie wykonać w ten sposób. Jeśli nie masz nic przeciwko temu, że hakowanie stringów może czasem uszkodzić twoje pliki, może uda Ci się uciec.
Moja firma może DMS Software Reengineering Toolkit może być używana do tego niezawodnie modulo a caveat.
DMS to ogólny silnik do analizowania, analizowania i przekształcania kodu źródłowego przy użyciu technologii kompilującej, sparametryzowanej za pomocą jawnych definicji języka. DMS ma solidne definicje języka dla wielu języków, , w tym C i C++ w różnych dialektach. Korzystając z interfejsów DMS C lub C++, można przeanalizować źródłowy kod , zbudować struktury danych kompilatora o nazwie AST, przeprowadzić analizy kodu, przekształcić AST, , a następnie zregenerować kod kompilowany zawierający komentarze i wszystkie dyrektywy preprocesora.
Ograniczenia związane z przetwarzaniem kodu źródłowego zawierającego dyrektywy preprocesora: muszą być dobrze skonstruowane [np. #ifdef #endif musi zagnieżdżać się wokół innych instrukcji, tak samo jak zwykły , jeśli itp., w przeciwieństwie do bycia używanym przez granicę instrukcji. Zdarza się to w kodzie C; dużo mniej niż w C++. Nasze doświadczenie jest takie, że jeśli chcesz zmodyfikować swój kod C trochę, , możesz usunąć ten konkretny problem.
dla konkretnego zadania, zrobić dość dużo jako odpowiedź na Naukowego Toolworks opisane:
- Wybierz jednostkę kompilacji i analizować je za pomocą DMS. Musisz podać wszystkie te same informacje, podając kompilator, aby mógł zlokalizować pliki nagłówkowe itp.
- DMS tworzy AST zarówno dla twojej jednostki kompilacji, jak i dla wszystkich plików nagłówkowych.
- Chodzić AST, aby wyodrębnić kolejność deklaracji w nagłówkach i kompilacji.
- Restrukturyzacja drzewa urządzenia zestawienie według kolejności uzyskanych z 3)
- prettyprint w uzyskiwanej kompilacji AST
[Powodem tym celu z DMS zamiast Toolworks naukowych jest to, że DMS jest przeznaczony do przetwarzaj/transformuj/generuj kod, podczas gdy SciTool IMHO jest przeznaczony tylko do analizy i analizowania. DMS zapewnia dostęp do drobnych detali wymaganych do transformacji, których nie ma SciTools, przynajmniej nie ostatni raz, kiedy patrzyłem].
Komplikacje będą następować z powodu warunków, makr, przestrzeni nazw, ... ale musisz zdecydować o polityce dla rozwiązania. Na przykład, jeśli plik nagłówka ma #if ... #else .... #endif, a deklaracje w klauzuli then mają inną kolejność niż w klauzuli else, jaka jest pożądana kolejność? Co się stanie, jeśli definicja funkcji zostanie utworzona przez makro w nagłówku? Ale to wszystko sprawia, że buduje prawdziwe narzędzie, er, zabawę.
Moja osobista opinia jest taka, że wydaje się dużo pracy za efekt, który otrzymujesz. Jeśli zrobisz to wszystko, o ile lepszy będzie twój proces inżynierii oprogramowania? Zwykle używamy DMS-a w celu sprawdzenia błędów kodowania lub zmiany kodu w sposób, w jaki ludzie nie mogą (np. Tymczasowo wstawiać oprzyrządowania wykonawczego ), gdzie jasne jest, że mechaniczny silnik wypłaci.
Co to narzędzie powinno zrobić z elementami w pliku '.c', które nie mają odpowiedniego elementu w pliku' .h'? Na przykład funkcje statyczne mogą być związane z funkcjami globalnymi i znajdować się przed nimi lub po nich. – jilles
Tego nie ma na liście wymagań. Jeśli istnieje narzędzie spełniające powyższe wymagania, jestem pewien, że byłby w stanie obsłużyć tę sprawę. – Joe