annotate etc/ETAGS.EBNF @ 47037:d6ea7c29ce97

*** empty log message ***
author Kim F. Storm <storm@cua.dk>
date Mon, 26 Aug 2002 10:10:42 +0000
parents eeab5bdaffa2
children b87525d8fbd7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46127
6225d6b17d2e Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
parents: 46126
diff changeset
1 -*- indented-text -*-
6225d6b17d2e Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
parents: 46126
diff changeset
2
45946
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
3 This file contains two sections:
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
4
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
5 1) An EBNF (Extended Backus Normal Form) description of the format of
46127
6225d6b17d2e Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
parents: 46126
diff changeset
6 the tags file created by etags.c and interpreted by etags.el
45946
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
7 2) A discussion of tag names and implicit tag names
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
8
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
9 ======================= EBNF tag file description =======================
45799
147a637372eb Comments added.
Francesco Potortì <pot@gnu.org>
parents: 43858
diff changeset
10
46989
eeab5bdaffa2 Fix typos.
Richard M. Stallman <rms@gnu.org>
parents: 46127
diff changeset
11 Productions created from current behavior to aid extensions
43850
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
12 Francesco Potorti` <pot@gnu.org> 2002
45946
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
13 ----------------
43850
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
14
45799
147a637372eb Comments added.
Francesco Potortì <pot@gnu.org>
parents: 43858
diff changeset
15 FF ::= #x0c /* tag section starter */
43850
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
16
45799
147a637372eb Comments added.
Francesco Potortì <pot@gnu.org>
parents: 43858
diff changeset
17 LF ::= #x0a /* line terminator */
43850
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
18
43857
1e419a707ae1 *** empty log message ***
Francesco Potortì <pot@gnu.org>
parents: 43850
diff changeset
19 DEL ::= #x7f /* pattern terminator */
43850
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
20
43857
1e419a707ae1 *** empty log message ***
Francesco Potortì <pot@gnu.org>
parents: 43850
diff changeset
21 SOH ::= #x01 /* name terminator */
43850
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
22
43858
8d0430162d52 *** empty log message ***
Francesco Potortì <pot@gnu.org>
parents: 43857
diff changeset
23 regchar ::= [^#x0a#x0c#x7f] /* regular character */
43850
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
24
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
25 regstring ::= { regchar } /* regular string */
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
26
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
27 unsint ::= [0-9] { [0-9] } /* non-negative integer */
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
28
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
29
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
30
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
31 tagfile ::= { tagsection } /* a tags file */
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
32
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
33 tagsection ::= FF LF ( includesec | regularsec ) LF
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
34
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
35 includesec ::= filename ",include" [ LF fileprop ]
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
36
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
37 regularsec ::= filename "," [ unsint ] [ LF fileprop ] { LF tag }
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
38
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
39 filename ::= regchar regstring /* a file name */
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
40
45799
147a637372eb Comments added.
Francesco Potortì <pot@gnu.org>
parents: 43858
diff changeset
41 fileprop ::= "(" regstring ")" /* an elisp alist */
43850
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
42
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
43 tag ::= directtag | patterntag
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
44
45799
147a637372eb Comments added.
Francesco Potortì <pot@gnu.org>
parents: 43858
diff changeset
45 directtag ::= DEL realposition /* no pattern */
43850
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
46
43857
1e419a707ae1 *** empty log message ***
Francesco Potortì <pot@gnu.org>
parents: 43850
diff changeset
47 patterntag ::= pattern DEL [ tagname SOH ] position
43850
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
48
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
49 pattern ::= regstring /* a tag pattern */
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
50
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
51 tagname ::= regchar regstring /* a tag name */
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
52
45799
147a637372eb Comments added.
Francesco Potortì <pot@gnu.org>
parents: 43858
diff changeset
53 position ::= realposition | "," /* charpos,linepos */
43850
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
54
4c55c058ad72 Description of the tags file format.
Francesco Potortì <pot@gnu.org>
parents:
diff changeset
55 realposition ::= "," unsint | unsint "," | unsint "," unsint
45946
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
56
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
57 ==================== end of EBNF tag file description ====================
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
58
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
59
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
60
46127
6225d6b17d2e Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
parents: 46126
diff changeset
61 ======================== discussion of tag names =========================
45946
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
62
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
63 - What are tag names
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
64 Tag lines in a tags file are usually made from the above defined pattern
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
65 and by an optional tag name. The pattern is a string that is searched
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
66 in the source file to find the tagged line.
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
67
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
68 - Why tag names are good
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
69 When a user looks for a tag, Emacs first compares the tag with the tag
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
70 names contained in the tags file. If no match is found, Emacs compares
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
71 the tag with the patterns. The tag name is then the preferred way to
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
72 look for tags in the tags file, because when the tag name is present
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
73 Emacs can find a tag faster and more accurately. These tag names are
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
74 part of tag lines in the tags file, so we call them "explicit".
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
75
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
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>
parents: 46126
diff changeset
77 When a tag line has no name, but a name can be deduced from the pattern,
6225d6b17d2e Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
parents: 46126
diff changeset
78 we say that the tag line has an implicit tag name. etags.c uses
6225d6b17d2e Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
parents: 46126
diff changeset
79 implicit tag names when possible, in order to reduce the number of
6225d6b17d2e Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
parents: 46126
diff changeset
80 explicit tag names in a tags file, thus reducing the size of the tags
6225d6b17d2e Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
parents: 46126
diff changeset
81 file. When the user looks for a tag, and Emacs founds no explicit tag
6225d6b17d2e Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
parents: 46126
diff changeset
82 names that match it, Emacs then tries to match the tag with an implicit
6225d6b17d2e Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
parents: 46126
diff changeset
83 tag name. Such a match occurs when the tag matches a pattern, subject
6225d6b17d2e Back to the old explanation, which was more concise, with just the first
Francesco Potortì <pot@gnu.org>
parents: 46126
diff changeset
84 to the satisfaction of all the following four rules:
45946
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
85
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
86 NONAM=" \f\t\n\r()=,;";
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
87 1. the tag does not contain any of the characters in NONAM;
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
88 2. the pattern contains the tag as either a rightmost, or rightmost
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
89 but one character, substring;
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
90 3. the character, if any, immediately before the tag in the pattern
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
91 must be a character in NONAM;
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
92 4. the character, if any, immediately after the tag in the pattern
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
93 must also be a character in NONAM.
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
94
c5474d1cf831 Added discussion on tag names.
Francesco Potortì <pot@gnu.org>
parents: 45799
diff changeset
95 ===================== end of discussion on tag names =====================