<?xml version="1.0" encoding="UTF-8"?>
<!--========================================================================
    DTD (Document Type Definition) for grammar definition originally created 
    by James Clark.  The idea is to define an abstract grammar in XML than 
    may then be used by documentation, directly by parser generators, 
    or via an XSLT stylesheet or other transformation, may generate 
    a parser compiler specification such as for YACC or JavaCC.

$Log$
Revision 1.1.2.1  2002/08/14 18:47:41  pauldick
Xalan3 specific additions.

Revision 1.1  2002/07/14 05:47:11  sboag
new grammar definition set for XPath2.

Revision 1.10  2002/03/17 21:31:08  sboag
Made new grammar element, <next/> for use in primary or prefix expressions,
to control when the next element is going to be called.  Somewhat experemental.

Changed javacc stylesheet and bnf stylesheets to handle g:next.

Fixed bugs with child::text(), by adding text, comment, etc., tokens to after forward
or reverse axis.  (note: have to do the same to names after @).  This is yet
another bad hack.

Fixed bug with @type, by adding At token to lexical stateswitch into QNAME state
for XQuery.

Revision 1.9  2002/03/06 13:41:44  sboag
Add some attributes for control of prefix productions.

Revision 1.8  2001/12/20 21:01:14  sboag
Added Jerome's Core changes, and fixed stuff to make core.jar and a core applet.

Revision 1.7  2001/12/09 22:07:16  sboag
Fixed problem with comments from previous checkin.

Revision 1.6  2001/12/09 21:39:37  sboag
[batch checkin] Added {- - comment - -} type comments.  
Added ";" list query processing.  Added some stuff for ^char handling in reg 
expressions, in order to support CharData better, but backed out of this (but 
left some of the support in.  Removed old type def and group stuff (can look to 
previous versions if we want to add this back in).  Changed to case sensitivity 
in grammar, and updated fragment.xml.  Added optional (AT schemaLocation)? to 
SchemaImport.  Other minor changes in support of WG decisions.

Revision 1.5  2001/12/07 09:09:27  sboag
Add a "show" attribute for RequiredSkip that allows control of whether or not
to show the whitespace in the EBNF productions.  Only show it in those cases
where it is required to disambiguate a token.

Revision 1.4  2001/11/16 21:53:34  sboag
I thought I already did this once, but changed action attribute to use CDATA
instead of just popState|pushState, to enable pushState(STATE).

Revision 1.3  2001/11/15 06:18:40  sboag
Change type for action attribute to CDATA, in order to support
action="pushState(STATETOKEN)".

=========================================================================-->
<!-- The root element of the definition -->
<!ELEMENT grammar (language | start | token | skip | exprProduction | lexical-state-transitions | production)+>
<!ATTLIST grammar
  xmlns CDATA #FIXED "http://www.w3.org/2001/03/XPath/grammar"
>

<!-- Declare a language subset or superset, if they are used in the 
     if attributes.
     Attributes:
         id -> the id of the language. 'if' attributes should map to these ids.
         display-name -> The name to use for the descriptive name of the language.
-->
<!ELEMENT language EMPTY>
<!ATTLIST language
  id ID #REQUIRED
  display-name CDATA #REQUIRED
>

<!-- The grammar must say where the start point is.
     Attributes:
         name -> the name of the starting production. 
         state -> the start state for lexical matching.
         if -> space separated list of tokens for conditional processing.
-->
<!ELEMENT start EMPTY>
<!ATTLIST start
  name IDREF #REQUIRED
  state CDATA #IMPLIED
  if IDREFS #IMPLIED
>

<!-- ============= Lexical Specifications (terminals) ==============-->
<!-- Define a token.
     Attributes:
         name -> the name of the token. 
         if -> space separated list of tokens for conditional processing.
         inline -> tell if the BNF description should expand this token inline.
         override -> (not sure what this does yet. -sb)
         recognize -> The state where this token will be recognized.
         is-macro -> "yes" if this token can be used just as a macro, 
                     and not as a true token.
         value-type -> If just a grammatical token, use "none", 
                       or use "string" for a string value
                       or use "number" for a number value
                       or use "id" if it is a token value with meaning.
-->
<!ELEMENT token (string | zeroOrMore | charClass | requiredSkip | optional | ref | choice | optionalSkip | oneOrMore)+>
<!ATTLIST token
  name ID #REQUIRED
  if IDREFS #IMPLIED
  inline CDATA #IMPLIED
  override CDATA #IMPLIED
  recognize CDATA #IMPLIED
  is-macro (yes | no) #IMPLIED
  special (no | yes) #IMPLIED
  value-type (none | string | number | id) #IMPLIED
  show (yes | no) #IMPLIED
>

<!-- Specification of a single character token. -->
<!ELEMENT char (#PCDATA)>
<!ATTLIST char
  if IDREFS #IMPLIED
  complement (no | yes) #IMPLIED
>

<!-- SGML mode in emacs doesn't like this, so I'm avoiding it for now. -->
<!-- ATTLIST char
	xml:space CDATA #IMPLIED
-->

<!ELEMENT charClass (charCode | char | charCodeRange | charRange)+>
<!ELEMENT charCode EMPTY>
<!ATTLIST charCode
  value CDATA #REQUIRED
  if IDREFS #IMPLIED
>

<!ELEMENT charCodeRange EMPTY>
<!ATTLIST charCodeRange
  minValue CDATA #REQUIRED
  maxValue CDATA #REQUIRED
  if IDREFS #IMPLIED
>

<!ELEMENT charRange EMPTY>
<!ATTLIST charRange
  minChar (0 | A | a) #REQUIRED
  maxChar (9 | F | f) #REQUIRED
  if IDREFS #IMPLIED
>

<!-- Defines a character that must be complemented by another character of 
     the same value, such as a quote. -->
<!ELEMENT complement (charClass)>
<!ATTLIST complement
  if IDREFS #IMPLIED
>

<!-- Defines a string token. -->
<!ELEMENT string (#PCDATA)>
<!ATTLIST string
  ignoreCase CDATA #IMPLIED
  if IDREFS #IMPLIED
>

<!ELEMENT skip (choice | ref)>
<!ATTLIST skip
  recognize CDATA #IMPLIED
  if IDREFS #IMPLIED
>

<!ELEMENT requiredSkip EMPTY>
<!ATTLIST requiredSkip
  recognize CDATA #IMPLIED
  if IDREFS #IMPLIED
  show (yes | no) #IMPLIED
>

<!--=================== Lexical State Transitions =================== -->
<!-- Define a transition table for lexical states.  Using this is more 
     convenient and cleaner than defining transitions for each token. 
     Attributes:
         if -> space separated list of tokens for conditional processing.
               (Not currently used by the stylesheet!)
-->
<!ELEMENT lexical-state-transitions (transition-default?, transition+)>
<!ATTLIST lexical-state-transitions
  if IDREFS #REQUIRED
>

<!-- Define the default transition for all tokens not defined by the 
     transition element.
     Attributes:
         if -> space separated list of tokens for conditional processing.
               (Not currently used by the stylesheet!)
         recognize -> The state where the tokens will be recognized.
         nextState -> The next state to transition to. Invalid if popState us 
                      used for the action.
         action -> State stack action.
-->
<!ELEMENT transition-default EMPTY>
<!ATTLIST transition-default
  if IDREFS #IMPLIED
  recognize CDATA #IMPLIED
  nextState CDATA #IMPLIED
  action CDATA #IMPLIED
>

<!-- Define a transition for a token or set of tokens.
     Attributes:
         refs -> IDREFS list of the tokens for which this transition applies. 
         if -> space separated list of tokens for conditional processing.
               (Not currently used by the stylesheet!)
         recognize -> The state where the tokens will be recognized.
         nextState -> The next state to transition to. Invalid if popState us 
                      used for the action.
         action -> State stack action.
-->
<!ELEMENT transition EMPTY>
<!ATTLIST transition
  refs IDREFS #REQUIRED
  if IDREFS #IMPLIED
  recognize CDATA #IMPLIED
  nextState CDATA #IMPLIED
  action CDATA #IMPLIED
>

<!--=================== Parser Production Specifications ===============-->
<!-- A production that defines a "cascade" of productions that define 
     operator precedence.
         name -> the ID of the production. 
         if -> space separated list of tokens for conditional processing.
-->
<!ELEMENT exprProduction (level+)>
<!ATTLIST exprProduction
  name ID #REQUIRED
  if IDREFS #IMPLIED
>

<!ELEMENT level (postfix | binary | prefix | primary)+>
<!ATTLIST level
  if IDREFS #IMPLIED
>

<!-- Basic non-terminal production.  
         name -> the ID of the production. 
         if -> space separated list of tokens for conditional processing.
         show -> Don't show in the BNF if this value is "no".
-->
<!ELEMENT production (optional | ref | choice | sequence | zeroOrMore | oneOrMore)+>
<!ATTLIST production
  name ID #REQUIRED
  if IDREFS #IMPLIED
  show (yes | no) #IMPLIED
>

<!-- Defines a binary operator.  
         name -> the ID of the production. 
         if -> space separated list of tokens for conditional processing.
       Example:
       		<binary name="EqualityExpr">
				<choice>
					<ref name="Equals"/>
					<ref name="NotEquals"/>
				</choice>
			</binary>
-->
<!ELEMENT binary (ref | choice)>
<!ATTLIST binary
  name ID #REQUIRED
  if IDREFS #IMPLIED
>

<!ELEMENT optionalSkip EMPTY>
<!ATTLIST optionalSkip
  if IDREFS #IMPLIED
>

<!ELEMENT postfix (ref | optional)+>
<!ATTLIST postfix
  name ID #REQUIRED
  if IDREFS #IMPLIED
>

<!ELEMENT prefix (optional | ref | choice | zeroOrMore | oneOrMore | sequence | next)+>
<!ATTLIST prefix
  name ID #REQUIRED
  if IDREFS #IMPLIED
  prefix-seq-type CDATA "*"
>

<!-- This element is used in exprProduction to control where the next production 
     will be called from.  If it is not used, the next production will automatically be 
     called.
-->
<!ELEMENT next EMPTY>
<!ATTLIST next
  if IDREFS #IMPLIED
>

<!ELEMENT primary (optional | ref | choice | zeroOrMore | oneOrMore)+>
<!ATTLIST primary
  name ID #REQUIRED
  if IDREFS #IMPLIED
>

<!ELEMENT ref EMPTY>
<!ATTLIST ref
  name IDREF #REQUIRED
  if IDREFS #IMPLIED
>

<!--================ General Constructs =================-->
<!ELEMENT zeroOrMore (string | charClass | optional | ref | 
          choice | optional | zeroOrMore | oneOrMore | sequence | complement)+>
<!ATTLIST zeroOrMore
  name ID #IMPLIED
  if IDREFS #IMPLIED
>

<!ELEMENT oneOrMore (string | charClass | optional | ref | 
          choice | optional | zeroOrMore | oneOrMore | sequence | complement)+>
<!ATTLIST oneOrMore
  name ID #IMPLIED
  if IDREFS #IMPLIED
>

<!ELEMENT optional (string | charClass | optional | ref | 
          choice | optional | zeroOrMore | oneOrMore | sequence | complement)+>
<!ATTLIST optional
  name ID #IMPLIED
  if IDREFS #IMPLIED
>

<!ELEMENT choice (ref | string | sequence)+>
<!ATTLIST choice
  name ID #IMPLIED
  break CDATA #IMPLIED
  if IDREFS #IMPLIED
>

<!ELEMENT sequence (string | ref | optional | zeroOrMore | choice |  next)+>
<!ATTLIST sequence
  name ID #IMPLIED
  if IDREFS #IMPLIED
>
