Jeżeli jest to zwykły C, lex
i yacc
są twoi przyjaciele, ale trzeba wziąć na konto C preprocesor - pliki źródłowe z niespienionych makr są zazwyczaj nie są zgodne ze składnią C więc parser, napisany z K & R gramatyki w umysł, najprawdopodobniej zawiedzie.
Jeśli zdecydujesz się na parsowanie wyjścia preprocesora, przygotuj się na to, że twój parser zakończy się niepowodzeniem z powodu "rozszerzeń" danego kompilatora, ponieważ bardzo prawdopodobne jest, że używają standardowych nagłówków bibliotek. Przynajmniej tak jest w przypadku GCC.
Miałem to z GCC i ostatecznie zdecydowałem się osiągnąć mój cel, stosując inne podejście. Jeśli potrzebujesz tylko zmienić nazwy zmiennych, wyrażeń regularnych będzie dobrze, i nie ma potrzeby budowania pełnego analizatora składni, IMHO. Jeśli Twoim celem jest tylko zbieranie danych, ostatecznym źródłem danych są informacje diagnostyczne. Istnieją sposoby na odzyskanie danych debugowania z plików binarnych - dla plików wykonywalnych ELF z DWARF istnieje libdwarf, dla Windows-land (COFF?) Również powinno być coś. Prawdopodobnie możesz użyć niektórych istniejących narzędzi, aby uzyskać informacje na temat debugowania binarnego - znowu, nic nie wiem o systemie Windows, musisz to zbadać.
Zobacz też: http://code.google.com/p/pycparser/ –
Dzięki, dodam to do listy. – luke