Here is how tag syntax is defined for the most popular languages:
struct, union and enum. #define macro
definitions and enum constants are also tags, unless you specify
`--no-defines' when making the tags table. Similarly, global
variables are tags, unless you specify `--no-globals'. Use of
`--no-globals' and `--no-defines' can make the tags table file
much smaller.
--members' option. Tags for variables and functions in
classes are named `class::variable' and
`class::function'.
extends and implements constructs. Tags for variables
and functions in classes are named `class.variable' and
`class.function'.
\chapter,
\section, \subsection, \subsubsection,
\eqno, \label, \ref, \cite, \bibitem,
\part, \appendix, \entry, or \index, is a
tag.
Other commands can make tags as well, if you specify them in the
environment variable TEXTAGS before invoking etags. The
value of this environment variable should be a colon-separated list of
command names. For example,
TEXTAGS="def:newcommand:newenvironment" export TEXTAGS
specifies (using Bourne shell syntax) that the commands `\def',
`\newcommand' and `\newenvironment' also define tags.
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.
def or with a
construct whose name starts with `def'. They also include variables
set with set! at top level in the file.
Several other languages are also supported:
sub
keyword.
You can also generate tags based on regexp matching (see Create Tags Table) to handle other formats and languages.