Mercurial > hg > xemacs-beta
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/ETAGS.EBNF Fri Aug 20 04:40:11 2004 +0000 @@ -0,0 +1,93 @@ +-*- indented-text -*- + +This file contains two sections: + +1) An EBNF (Extended Backus Normal Form) description of the format of + the tags file created by etags.c and interpreted by etags.el; +2) A discussion of tag names and implicit tag names. + +====================== 1) EBNF tag file description ===================== + +Productions created from current behaviour to aid extensions +Francesco Potorti` <pot@gnu.org> 2002 +---------------- + +FF ::= #x0c /* tag section starter */ + +LF ::= #x0a /* line terminator */ + +DEL ::= #x7f /* pattern terminator */ + +SOH ::= #x01 /* name terminator */ + +regchar ::= [^#x0a#x0c#x7f] /* regular character */ + +regstring ::= { regchar } /* regular string */ + +unsint ::= [0-9] { [0-9] } /* non-negative integer */ + + + +tagfile ::= { tagsection } /* a tags file */ + +tagsection ::= FF LF ( includesec | regularsec ) LF + +includesec ::= filename ",include" [ LF fileprop ] + +regularsec ::= filename "," [ unsint ] [ LF fileprop ] { LF tag } + +filename ::= regchar regstring /* a file name */ + +fileprop ::= "(" regstring ")" /* an elisp alist */ + +tag ::= directtag | patterntag + +directtag ::= DEL realposition /* no pattern */ + +patterntag ::= pattern DEL [ tagname SOH ] position + +pattern ::= regstring /* a tag pattern */ + +tagname ::= regchar regstring /* a tag name */ + +position ::= realposition | "," /* charpos,linepos */ + +realposition ::= "," unsint | unsint "," | unsint "," unsint + +==================== end of EBNF tag file description ==================== + + + +======================= 2) discussion of tag names ======================= + +- WHAT ARE TAG NAMES +Tag lines in a tags file are usually made from the above defined pattern +and by an optional tag name. The pattern is a string that is searched +in the source file to find the tagged line. + +- WHY TAG NAMES ARE GOOD +When a user looks for a tag, Emacs first compares the tag with the tag +names contained in the tags file. If no match is found, Emacs compares +the tag with the patterns. The tag name is then the preferred way to +look for tags in the tags file, because when the tag name is present +Emacs can find a tag faster and more accurately. These tag names are +part of tag lines in the tags file, so we call them "explicit". + +- WHY IMPLICIT TAG NAMES ARE EVEN BETTER +When a tag line has no name, but a name can be deduced from the pattern, +we say that the tag line has an implicit tag name. Often tag names are +redundant; this happens when the name of a tag is an easily guessable +substring of the tag pattern. We define a set of rules to decide +whether it is possible to deduce the tag name from the pattern, and make +an unnamed tag in those cases. The name deduced from the pattern of an +unnamed tag is the implicit name of that tag. + When the user looks for a tag, and Emacs founds no explicit tag names +that match it, Emacs then looks for an tag whose implicit tag name +matches the request. etags.c uses implicit tag names when possible, in +order to reduce the size of the tags file. + An implicit tag name is deduced from the pattern by discarding the +last character if it is one of ` \f\t\n\r()=,;', then taking all the +rightmost consecutive characters in the pattern which are not one of +those. + +===================== end of discussion of tag names =====================