Exuberant Ctags#

Program ctags#

Obsługa języków#

W programie ctags obsługa języków jest realizowana poprzez jedno z dwóch poniższych rozwiązań:

Dodawanie nowych języków poprzez wyrażenia regularne jest najłatwiejsze w implementacji, ale rozwiązanie to jest z automatu ograniczane możliwościami samych wyrażeń regularnych. Kompleksowe indeksowanie kodu najczęściej wiąże się z utworzeniem osobnego parsera dla danego języka, gdzie jedynymi ograniczeniami są w zasadzie umiejętności ich autorów oraz sposób obsługi parserów przez program ctags.

Tabela z informacjami o językach#

W poniższej tabeli (41 pozycji) zamieszczam najważniejsze informacje dla wszystkich języków obsługiwanych przez wewnętrzne parsery w ostatniej oficjalnej wersji programu ctags (źródło). Są to m.in.: nazwa języka, identyfikator języka (używany w niektórych argumentach - wielkość znaków nie ma znaczenia), domyślne rozszerzenia pliku dla języka i jego parser (w postaci linku do pliku).

JęzykIdentyfikatorRozszerzeniaParser
AntAnt.build.xmlant.c
AssemblerAsm(*.A51) (*.29[kK]) (*.[68][68][kKsSxX]) (*.[xX][68][68]) .asm .ASM .s .Sasm.c
ASPAsp.asp .asaasp.c
AwkAwk.awk .gawk .mawkawk.c
BASICBasic.bas .bi .bb .pbbasic.c
BETABETA.betbeta.c
CC.cc.c
C++C++.c++ .cc .cp .cpp .cxx .h .h++ .hh .hp .hpp .hxxc.c
C#C#.csc.c
COBOLCobol.cbl .cob .CBL .COBcobol.c
DOS BatchDosBatch.bat .cmddosbatch.c
EiffelEiffel.eeiffel.c
ErlangErlang.erl .ERL .hrl .HRLerlang.c
FlexFlex.as .mxmlflex.c
FortranFortran.f .for .ftn .f77 .f90 .f95fortran.c
HTMLHTML.htm .htmlhtml.c
JavaJava.javac.c
JavaScriptJavaScript.jsjscript.c
LispLisp.cl .clisp .el .l .lisp .lsplisp.c
LuaLua.lualua.c
MakeMake([Mm]akefile) (GNUmakefile) .mak .mkmake.c
MATLABMatLab.mmatlab.c
Objective CamlOCaml.ml .mliocaml.c
PascalPascal.p .paspascal.c
PerlPerl.pl .pm .plx .perlperl.c
PHPPHP.php .php3 .phtmlphp.c
PL/SQLSQL.sqlsql.c
Python (Pyrex/Cython)Python.py .pyx .pxd .pxi .sconspython.c
REXXREXX.cmd .rexx .rxrexx.c
RubyRuby.rb .rubyruby.c
SchemeScheme.SCM .SM .sch .scheme .scm .smscheme.c
Shell scripts (Bourne/Korn/Z)Sh.sh .SH .bsh .bash .ksh .zshsh.c
S-LangSLang.slslang.c
SML (Standard ML)SML.sml .sigsml.c
TclTcl.tcl .tk .wish .itcltcl.c
TeXTeX.textex.c
VeraVera.vr .vri .vrhc.c
VerilogVerilog.vverilog.c
VHDLVHDL.vhdl .vhdvhdl.c
VimVim.vimvim.c
YACCYACC.yyacc.c

Parsery w osobnych plikach#

W programie ctags największe możliwości dla indeksowania kodu zapewniają dedykowane parsery. Jeśli domyślny zestaw parserów nie spełnia naszych oczekiwań to można pokusić się o napisanie własnego parsera (instrukcja). Tworzenie nowych parserów wymaga większego nakładu pracy w porównaniu z wyrażeniami regularnymi ustawianymi przez argumenty, gdzie po utworzeniu pliku z parserem należy go skompilować z obecnym źródłem projektu. Rozwiązanie to przewidziano dla bardziej zaawansowanych programistów obytych z tworzeniem tego typu narzędzi.

Aktualną listę domyślnych parserów oraz powiązane z nimi rozszerzenia można pobrać z informacji o wewnętrznym stanie programu zwracanych przez argumenty --verbose lub -V (użytych jako inicjujący argument).

Trzeba wyraźnie zaznaczyć, że wbudowane parsery również można rozszerzać dodatkowymi wyrażeniami regularnymi za pośrednictwem argumentu --regex-<lang>, ale rozwiązanie to jest ograniczane możliwościami samych wyrażeń regularnych.

Wyrażenia regularne w argumentach#

W programie ctags istnieje możliwość indeksowania dowolnego kodu przy użyciu własnych wyrażeń regularnych, ale tylko w sytuacji, kiedy dodano funkcję +regex w czasie kompilacji programu ctags, co można sprawdzić np. argumentem --version. W porównaniu z dedykowanymi parserami możliwości tego rozwiązania są bardzo ograniczone, ale z uwagi na prostotę i szybkość implementacji warto najpierw pokombinować w tym kierunku.

Własne wyrażenia regularne definiujemy argumentem --regex-<lang>, który działa dla wszystkich języków obsługiwanych przez program ctags (zarówno tych pochodzących z wbudowanych parserów, jak i tych utworzonych argumentem --langdef).

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Exuberant Ctags (H1) Program ctags (H2) Obsługa języków (H3) Tabela z informacjami o językach (H4) Parsery w osobnych plikach (H4) Wyrażenia regularne w argumentach (H4)