-*- indented-text -*-See the end of this file for copyright information.This file contains two sections:1) An EBNF (Extended Backus-Naur 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 extensionsFrancesco 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 ) LFincludesec ::= filename ",include" [ LF fileprop ]regularsec ::= filename "," [ unsint ] [ LF fileprop ] { LF tag }filename ::= regchar regstring /* a file name */fileprop ::= "(" regstring ")" /* an elisp alist */tag ::= directtag | patterntagdirecttag ::= DEL realposition /* no pattern */patterntag ::= pattern DEL [ tagname SOH ] positionpattern ::= 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 NAMESTag lines in a tags file are usually made from the above defined patternand by an optional tag name. The pattern is a string that is searchedin the source file to find the tagged line.- WHY TAG NAMES ARE GOODWhen a user looks for a tag, Emacs first compares the tag with the tagnames contained in the tags file. If no match is found, Emacs comparesthe tag with the patterns. The tag name is then the preferred way tolook for tags in the tags file, because when the tag name is presentEmacs can find a tag faster and more accurately. These tag names arepart of tag lines in the tags file, so we call them "explicit".- WHY IMPLICIT TAG NAMES ARE EVEN BETTERWhen 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 areredundant; this happens when the name of a tag is an easily guessablesubstring of the tag pattern. We define a set of rules to decidewhether it is possible to deduce the tag name from the pattern, and makean unnamed tag in those cases. The name deduced from the pattern of anunnamed tag is the implicit name of that tag. When the user looks for a tag, and Emacs finds no explicit tag namesthat match it, Emacs then looks for an tag whose implicit tag namematches the request. etags.c uses implicit tag names when possible, inorder to reduce the size of the tags file. An implicit tag name is deduced from the pattern by discarding thelast character if it is one of ` \f\t\n\r()=,;', then taking all therightmost consecutive characters in the pattern which are not one ofthose.===================== end of discussion of tag names =====================Copyright (c) 2002, 2004, 2006Free software Foundation, Inc.COPYING PERMISSIONS: This document is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA