46127
6225d6b17d2e
Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
diff
changeset
|
1 -*- indented-text -*-
|
6225d6b17d2e
Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
diff
changeset
|
2
|
45946
|
3 This file contains two sections:
|
|
4
|
57104
27d26db0f6b1
Correct EBNF explanation (Backus-Naur Form rather than Backus Normal Form).
Kim F. Storm <storm@cua.dk>
diff
changeset
|
5 1) An EBNF (Extended Backus-Naur Form) description of the format of
|
47053
|
6 the tags file created by etags.c and interpreted by etags.el;
|
|
7 2) A discussion of tag names and implicit tag names.
|
45946
|
8
|
47053
|
9 ====================== 1) EBNF tag file description =====================
|
45799
|
10
|
47054
|
11 Productions created from current behaviour to aid extensions
|
43850
|
12 Francesco Potorti` <pot@gnu.org> 2002
|
45946
|
13 ----------------
|
43850
|
14
|
45799
|
15 FF ::= #x0c /* tag section starter */
|
43850
|
16
|
45799
|
17 LF ::= #x0a /* line terminator */
|
43850
|
18
|
43857
|
19 DEL ::= #x7f /* pattern terminator */
|
43850
|
20
|
43857
|
21 SOH ::= #x01 /* name terminator */
|
43850
|
22
|
43858
|
23 regchar ::= [^#x0a#x0c#x7f] /* regular character */
|
43850
|
24
|
|
25 regstring ::= { regchar } /* regular string */
|
|
26
|
|
27 unsint ::= [0-9] { [0-9] } /* non-negative integer */
|
|
28
|
|
29
|
|
30
|
|
31 tagfile ::= { tagsection } /* a tags file */
|
|
32
|
|
33 tagsection ::= FF LF ( includesec | regularsec ) LF
|
|
34
|
|
35 includesec ::= filename ",include" [ LF fileprop ]
|
|
36
|
|
37 regularsec ::= filename "," [ unsint ] [ LF fileprop ] { LF tag }
|
|
38
|
|
39 filename ::= regchar regstring /* a file name */
|
|
40
|
45799
|
41 fileprop ::= "(" regstring ")" /* an elisp alist */
|
43850
|
42
|
|
43 tag ::= directtag | patterntag
|
|
44
|
45799
|
45 directtag ::= DEL realposition /* no pattern */
|
43850
|
46
|
43857
|
47 patterntag ::= pattern DEL [ tagname SOH ] position
|
43850
|
48
|
|
49 pattern ::= regstring /* a tag pattern */
|
|
50
|
|
51 tagname ::= regchar regstring /* a tag name */
|
|
52
|
45799
|
53 position ::= realposition | "," /* charpos,linepos */
|
43850
|
54
|
|
55 realposition ::= "," unsint | unsint "," | unsint "," unsint
|
45946
|
56
|
|
57 ==================== end of EBNF tag file description ====================
|
|
58
|
|
59
|
|
60
|
47053
|
61 ======================= 2) discussion of tag names =======================
|
45946
|
62
|
47053
|
63 - WHAT ARE TAG NAMES
|
45946
|
64 Tag lines in a tags file are usually made from the above defined pattern
|
|
65 and by an optional tag name. The pattern is a string that is searched
|
|
66 in the source file to find the tagged line.
|
|
67
|
47053
|
68 - WHY TAG NAMES ARE GOOD
|
45946
|
69 When a user looks for a tag, Emacs first compares the tag with the tag
|
|
70 names contained in the tags file. If no match is found, Emacs compares
|
|
71 the tag with the patterns. The tag name is then the preferred way to
|
|
72 look for tags in the tags file, because when the tag name is present
|
|
73 Emacs can find a tag faster and more accurately. These tag names are
|
|
74 part of tag lines in the tags file, so we call them "explicit".
|
|
75
|
47053
|
76 - WHY IMPLICIT TAG NAMES ARE EVEN BETTER
|
46127
6225d6b17d2e
Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
diff
changeset
|
77 When a tag line has no name, but a name can be deduced from the pattern,
|
47053
|
78 we say that the tag line has an implicit tag name. Often tag names are
|
|
79 redundant; this happens when the name of a tag is an easily guessable
|
|
80 substring of the tag pattern. We define a set of rules to decide
|
|
81 whether it is possible to deduce the tag name from the pattern, and make
|
|
82 an unnamed tag in those cases. The name deduced from the pattern of an
|
47054
|
83 unnamed tag is the implicit name of that tag.
|
57103
|
84 When the user looks for a tag, and Emacs finds no explicit tag names
|
47054
|
85 that match it, Emacs then looks for an tag whose implicit tag name
|
|
86 matches the request. etags.c uses implicit tag names when possible, in
|
|
87 order to reduce the size of the tags file.
|
47053
|
88 An implicit tag name is deduced from the pattern by discarding the
|
|
89 last character if it is one of ` \f\t\n\r()=,;', then taking all the
|
|
90 rightmost consecutive characters in the pattern which are not one of
|
|
91 those.
|
45946
|
92
|
47053
|
93 ===================== end of discussion of tag names =====================
|