2010-09-24 10 views
7

Moja wersja emacs to 23.2.1 Mimo że użyłem poniższych elementów, aby zmienić backend, aby używać GTAGS. (wymagają 'semantic/db-global) (semanticdb-enable-gnu-globalne-bazy danych' c-mode) (semanticdb-enable-gnu-globalne-bazy danych 'tryb C++) Próbowałem wygenerować plik GTAGS do wykorzystania jako zaplecze semantyczne. Jednak za każdym razem, gdy otwieram plik C, Semantic nadal parsuje pliki bez użycia pliku GTAGS.Jak zrobić emacs Semantyczne użycie pliku TAG wygenerowanego przez GTAGS

  1. Czy można użyć pliku GTAGS zamiast wbudowanego parsera semantycznego? Zauważyłem, że wbudowany analizator składni nie jest bardzo dokładny.

  2. Czy można użyć pliku GTAGS bez określenia zakresu projektu? W moim przypadku próbowałem umieścić plik GTAGS w/usr/include, który powinien być standardową ścieżką emacsa. Ale Semantics go nie używa.

Odpowiedz

7

Semantic nie używa pliku GTAGS do generowania tagów, które będzie używane bezpośrednio do takich funkcji, jak skakanie lub inteligentne uzupełnianie. Globalny backend GNU dla semantic db użyje GTAGS zamiast gigantycznej tabeli nazw. Tak więc, jeśli potrzebujesz znaleźć symbol po nazwie, GTAGS powie semantyczną, gdzie jest, a Semantic będzie następnie parsować te pliki bardziej bezpośrednio, aby uzyskać szczegóły.

Powodem, dla którego GTAGS nie jest używany bezpośrednio jako parser zastępczy, jest fakt, że informacje w GTAGS są niewystarczające dla rodzajów operacji. Potrzeby semantyczne, ponieważ nie zawierają informacji o typie danych, analizie argumentów i lokalnym analizowaniu kontekstów.

Korzystanie z tagów gtags w/usr/include jest interesującym pomysłem, ale prawdopodobnie nie przyzwyczai się zbytnio. Semantic będzie wyszukiwał tylko pliki nagłówkowe faktycznie używane w twoim kodzie zamiast przeszukiwać wszystkie pliki dołączane. Globalny backend GNU jest przeznaczony do skanowania całego projektu pod kątem symbolu lub odniesienia do symbolu. Jeśli chciałbyś przeszukać wszystkie swoje symbole, to byłby przydatny, ale w semantyce nie ma takiej cechy.

Możliwe jest używanie ebrowse do robienia tego, co chcesz, ale odkryłem, że w C++ parser był niewystarczający w subtelny sposób i powodował pewne problemy.

Jeśli uważasz, że parser semantyczny jest niedokładny, powinieneś opublikować go jako błąd na liście mailingowej cedet-devel.