Mercurial > hg > xemacs-beta
comparison etc/ETAGS.EBNF @ 2225:4968c73cb252
[xemacs-hg @ 2004-08-20 04:40:08 by james]
Update to etags.c version 16.56.
author | james |
---|---|
date | Fri, 20 Aug 2004 04:40:11 +0000 |
parents | |
children | 9d8bfee6e672 |
comparison
equal
deleted
inserted
replaced
2224:6e8a6fd7d08b | 2225:4968c73cb252 |
---|---|
1 -*- indented-text -*- | |
2 | |
3 This file contains two sections: | |
4 | |
5 1) An EBNF (Extended Backus Normal Form) description of the format of | |
6 the tags file created by etags.c and interpreted by etags.el; | |
7 2) A discussion of tag names and implicit tag names. | |
8 | |
9 ====================== 1) EBNF tag file description ===================== | |
10 | |
11 Productions created from current behaviour to aid extensions | |
12 Francesco Potorti` <pot@gnu.org> 2002 | |
13 ---------------- | |
14 | |
15 FF ::= #x0c /* tag section starter */ | |
16 | |
17 LF ::= #x0a /* line terminator */ | |
18 | |
19 DEL ::= #x7f /* pattern terminator */ | |
20 | |
21 SOH ::= #x01 /* name terminator */ | |
22 | |
23 regchar ::= [^#x0a#x0c#x7f] /* regular character */ | |
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 | |
41 fileprop ::= "(" regstring ")" /* an elisp alist */ | |
42 | |
43 tag ::= directtag | patterntag | |
44 | |
45 directtag ::= DEL realposition /* no pattern */ | |
46 | |
47 patterntag ::= pattern DEL [ tagname SOH ] position | |
48 | |
49 pattern ::= regstring /* a tag pattern */ | |
50 | |
51 tagname ::= regchar regstring /* a tag name */ | |
52 | |
53 position ::= realposition | "," /* charpos,linepos */ | |
54 | |
55 realposition ::= "," unsint | unsint "," | unsint "," unsint | |
56 | |
57 ==================== end of EBNF tag file description ==================== | |
58 | |
59 | |
60 | |
61 ======================= 2) discussion of tag names ======================= | |
62 | |
63 - WHAT ARE TAG NAMES | |
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 | |
68 - WHY TAG NAMES ARE GOOD | |
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 | |
76 - WHY IMPLICIT TAG NAMES ARE EVEN BETTER | |
77 When a tag line has no name, but a name can be deduced from the pattern, | |
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 | |
83 unnamed tag is the implicit name of that tag. | |
84 When the user looks for a tag, and Emacs founds no explicit tag names | |
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. | |
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. | |
92 | |
93 ===================== end of discussion of tag names ===================== |