2008-11-17 14 views
6

Szukam biblioteki opartej na systemie Windows, której można użyć do analizy pęczków plików C w celu wyświetlenia globalnych i lokalnych zmiennych. Globalne i lokalne zmienne mogą być zadeklarowane za pomocą typedef. Dane wyjściowe (tj. Lista zmiennych globalnych i lokalnych) mogą być następnie wykorzystane do przetwarzania końcowego (na przykład zastąpienie nazw zmiennych nową nazwą).Parsowanie plików C

Czy taka biblioteka jest dostępna?

Odpowiedz

11
+0

Zobacz też: http://code.google.com/p/pycparser/ –

+0

Dzięki, dodam to do listy. – luke

0

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ć.

3

analizowaniem C jest dużo trudniejsze niż to wygląda, jeśli wziąć pod uwagę różne dialekty, dyrektyw preprocesora, potrzeba informacji o typie podczas analizowania, itp. Osoby, które mówią, że "po prostu używam lex i yacc", mają najwyraźniej nie wykonały parsera produkcyjnego C.

Narzędzie, które mogą to zrobić nasz C front end

To rozwiązuje wszystkie powyższe problemy.

Po zakończeniu posiada pełną, nawigacyjną tablicę symboli ze wszystkimi identyfikatorami i odpowiednimi informacjami o typie. Wyświetlanie globalnych i lokalnych zmiennych byłoby w tym przypadku banalne.

Jestem architektem odpowiedzialnym za Semantic Designs.