In Lisp code, any function defined with defun , any variable defined with defvar or defconst , and in general the first argument of any expression that starts with `(def' in column zero, is a tag.
In Scheme code, tags include anything defined with def or with a construct whose name starts with `def'. They also include variables set with set! at top level in the file.
In C code, any C function or typedef is a tag, and so are definitions of struct, union and enum. Any #define is also a tag, unless `--no-defines' is specified when the tags table is constructed, which sometimes makes the tags file much smaller. In C++ code, member functions are also recognized.
In Yacc or Bison input files, each rule defines as a tag the nonterminal it constructs. The portions of the file that contain C code are parsed as C code.
In Fortran code, functions and subroutines are tags.
In Pascal code, the tags are the functions and procedures defined in the file.
In Prolog code, a tag name appears at the left margin.
In assembler code, labels appearing at the beginning of a line, followed by a colon, are tags.
In LaTeX text, the argument of any of the commands \chapter , \section , \subsection , \subsubsection , \eqno , \label , \ref , \cite , \bibitem and \typeout is a tag.
You can also generate tags based on regexp matching (see Create Tags Table) for any text file.