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 =====================