A working yacc/lex parser for HTML

Daniel W. Connolly (connolly@hal.com)
Thu, 19 Jan 1995 21:23:45 +0100


There was some mild interest in the yacc grammar I posted a few days
ago. I suppose lots of folks were turned off by the fact that you
couldn't actually do anything with it.

It's still just a sort of study-aid, but I've done the grunt-work
of building a corresponding lexical analyzer and main program.
As alway, hands-on experience exposed some design problems with
the original grammar.

This stuff is also available at:
http://www.hal.com/~connolly/html-test/yacc/

So this code can actually be used to parse HTML files. The Makefile
is set up to build a debuggin lexer and parser. You get output like:

Starting parse
Entering state 0
Reading a token: --scanner backing up
--(end of buffer or a NUL)
--scanner backing up
--accepting rule at line 40 ("<TITLE")
Next token is 389 (START_title)
Reducing via rule 3 (line 150), -> start_html
[...]
Reading a token: --scanner backing up
--accepting rule at line 78 ("HREF=")
Next token is 266 (ANAME_href)
Shifting token 266 (ANAME_href), Entering state 241
Reading a token: --accepting rule at line 112 (""")
--scanner backing up
--accepting rule at line 123 ("#announcements")
--accepting rule at line 114 (""")
Next token is 263 (LITERAL)
Shifting token 263 (LITERAL), Entering state 823
Reducing via rule 4133 (line 4965), LITERAL -> attrval_cdata
state stack now 0 2 6 13 16 40 148 241
Entering state 839
Reducing via rule 132 (line 329), ANAME_href attrval_cdata -> attr_a_href
state stack now 0 2 6 13 16 40 148
Entering state 248
Reducing via rule 125 (line 320), attrs_a attr_a_href -> attrs_a
state stack now 0 2 6 13 16 40
Entering state 148
Reading a token: --accepting rule at line 102 (">")
[...]

First, some caveats:

* The Makefile makes explicit reference to the local installations of
flex and bison here at HaL. It specifies gcc too. If you want to use
the lex, yacc, and/or C compiler provided by your system vendor, good
luck!

* Using gcc -Wall, Lots of warnings are issued during compilation
regarding the code that flex/bison generates. Ignore them.

* The lexical analyzer is completely missing support for markup
declarations. It will read <!DOCTYPE, <![ and <!USEMAP as data,
failing to recognize it as markup.

* There is no code that, for example, passes the value of an attribute
value literal from the lexical analyzer to the parser. In fact, there
are no actions anywhere in the lexer or the parser. This code doesn't
do _anything_ but parse HTML.

* There is a little bit of error recovery in the lexer, but none in
the parser. This parser abort()s, for example, when tags are used
out of context.

* The business of ignoring RE characters as per section 7.6.1 of the
SGML standard is left as an excercise for the reader :-}

Finally, some observations/conclusions:

** There is no HTML-specific code in the lexer. It could be used for
any Basic SGML document. Marked section support would be nice. And
this version doesn't have very general support for entities. It
assumes they have no markup in them. Flex does support multiple input
buffers, so sophisticated entity management is possible. But if you
were that serious about this, you wouldn't be using lex/yacc!

But this lexer makes a reasonable inventory of the lexical constructs
you'll find in a Basic SGML document. (Oh! processing instructions are
missing, just like markup declarations. But they'd be trivial to add.)

Um.. there's no support for short references either, and adding it
would probably be awkward.

** I thought about ways to take the HTML specific knowledge out of the
parser, but HTML uses tag minimization on the HTML, HEAD, BODY, P, and
LI, elements; for example, in order to correctly recognize the end of
a P element, the parser has to know what elements might be found inside
P and what elements might not.

We would hope to be able to enhance existing HTML parsers to handle
arbitrary SGML document types. Some folks have proposed that internet
SGML tools might be kept simple by eliminating support for SHORTTAG
and OMITTAG. Unfortunately, that makes them unable to support HTML.

Deployment of SGML technology on the net is currently held up by a
lack of working knowledge among the development community. You could
blame that on the high cost of access to the SGML standard and related
tools and services... But this lack of working knowledge is slowly
changing. sgmls has been out for a while, and folks are finally
learning how to use it. SP and YASP are hitting the streets. We're
seeing perlSGML, CoST, and other SGML processing toolkits.

I wonder how long it will be before we see a ubiquitous libSGML just
like there's a libTIFF. And I wonder what features of the standard it
will support, and which ones it will leave for the commercial vendors
(and which ones even those guys won't touch with a 10 foot pole!)

Enough philosophizing... here's the code:

#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of shell archive."
# Contents: Makefile dtd2yacc.pl html.dtd html.y main.c sgml.l
# tokens.c
# Wrapped by connolly@ulua on Mon Jan 16 15:01:42 1995
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f Makefile -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"Makefile\"
else
echo shar: Extracting \"Makefile\" \(620 characters\)
sed "s/^X//" >Makefile <<'END_OF_Makefile'
X# $Id: Makefile,v 1.1 1995/01/16 20:53:37 connolly Exp $
X
XYACC = bison
XLEX = /usr/tools/flex/2.4.7/bin/flex
XFLEXLIB = -L/usr/tools/flex/2.4.7/lib -lfl
XCC = gcc
X
XCFLAGS = -ansi -pedantic-errors -Wall -DYYDEBUG -g
X#@@ build debugging lexer
XLFLAGS = -d
X
XOBJS = main.o lex.yy.o html.tab.o
XLIBS = $(FLEXLIB)
X
Xdriver: $(OBJS)
X $(CC) -o $@ $(OBJS) $(LIBS)
X
Xhtml.tab.c html.tab.h: html.y
X $(YACC) -d -v html.y
X
Xlex.yy.c: sgml.l
X $(LEX) $(LFLAGS) sgml.l
X
Xlex.yy.o: html.tab.h sgml.l
X
Xhtml.y tokens.c: html.dtd dtd2yacc.pl
X perl dtd2yacc.pl -array tokens.c <html.dtd >html.y
X
Xclean:
X rm -f *.o *.tab.[ch]
X
XClean: clean
X rm html.y
END_OF_Makefile
if test 620 -ne `wc -c <Makefile`; then
echo shar: \"Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f dtd2yacc.pl -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"dtd2yacc.pl\"
else
echo shar: Extracting \"dtd2yacc.pl\" \(7380 characters\)
sed "s/^X//" >dtd2yacc.pl <<'END_OF_dtd2yacc.pl'
X#!/usr/tools/bin/perl
X# $Id: dtd2yacc.pl,v 1.1 1995/01/16 20:53:41 connolly Exp $
X
Xunshift(@INC, '/u/connolly/contrib/perlSGML/lib'); #@@
X
Xrequire 'dtd.pl';
X
X&DTDread_dtd(STDIN);
X
X&parseArgs;
X
X
Xprint <<EOF;
X%token TAGC /* > */
X%token DATA /* characters */
X
X /* attribute values, ala TEI guidelines */
X%token NUMBER /* [0-9]+ */
X%token NAME /* [a-z][a-z0-9.-]* */
X%token NMTOKEN /* [a-z0-9.-]+ */
X%token LITERAL /* anything, in quotes */
X
XEOF
X
Xlocal(%start, %end, %attr, %val, %all);
Xforeach $elt (&DTDget_elements()){
X do tokensForElement($elt);
X}
Xif($Array){
X local($s, $e, $a, $v);
X grep($all{$_} = 1, (keys %start,keys %end, keys %attr, keys %val));
X foreach (sort(keys %all)){
X $s = $start{$_} || -1;
X $e = $end{$_} || -1;
X $a = $attr{$_} || -1;
X $v = $val{$_} || -1;
X print ARRAY "\t{ \"$_\",\t$s,\t$e,\t$a,\t$v },\n";
X }
X}
X
Xprint <<EOF;
X
X%%
X
XEOF
X
X
Xforeach $root (&DTDget_top_elements()){
X print STDERR "@#root: $root\n";
X do productionsForElement($root);
X}
X
X
Xprint <<EOF;
Xdata : DATA
X | data DATA
X ;
X
Xattrval_cdata : LITERAL | NMTOKEN | NAME | NUMBER ;
Xattrval_number : NUMBER
X | LITERAL /* @# check quoted stuff for NUMBER syntax */
X ;
Xattrval_numbers : NUMBER
X | LITERAL /* @# check quoted stuff for NUMBERS syntax */
X ;
Xattrval_name : NAME
X | LITERAL /* @# check quoted stuff for NAME syntax */
X ;
Xattrval_id : NAME
X | LITERAL /* @# check quoted stuff for NAME syntax; check uniqueness */
X ;
Xattrval_names : NAME
X | LITERAL /* @# check quoted stuff for NAMES syntax */
X ;
X
XEOF
X
X
X##############################
X
X
Xsub tokensForElement{
X local($elt) = @_;
X
X print "%token START_$elt\n";
X $start{$elt} = "START_$elt";
X
X if((&DTDget_base_children($elt))[0] ne 'EMPTY'){
X print "%token END_$elt\n";
X $end{$elt} = "END_$elt";
X }
X
X %attrs = &DTDget_elem_attr($elt);
X
X # filter out #FIXED attributes
X
X foreach $attr (sort keys %attrs){
X local($def, @vals) = split(/$;/, $attrs{$attr});
X
X next if $def eq '#FIXED';
X
X $attr =~ s/-/__/g; #@ yacc can't handle - in identifiers
X if(!$Token{"ANAME_$attr"}++){
X print "%token ANAME_$attr\n";
X $attr{$attr} = "ANAME_$attr";
X }
X
X foreach $val (@vals){
X $val =~ tr/A-Z/a-z/; #@ why is perlSGML inconsistent?
X
X next if $val eq 'cdata'
X || $val eq 'number'
X || $val eq 'numbers'
X || $val eq 'names'
X || $val eq 'id'
X || $val eq 'name';
X
X
X print "%token VNAME_$val\n" unless $Token{"VNAME_$val"}++;
X $val{$val} = "VNAME_$val";
X }
X }
X
X}
X
X
Xsub productionsForElement{
X local($elt) = @_;
X
X return if $Productions{$elt . $Context}++;
X
X print STDERR "@#... doing $elt $Context\n";
X
X local($anyattrs);
X local(@children) = &DTDget_base_children($elt);
X
X if($children[0] eq 'EMPTY'){
X print "elt_$elt$Context : start_$elt\n";
X $anyattrs = &attributes($elt);
X do startEnd($elt, 'EMPTY', $anyattrs);
X print "\n";
X
X }else{
X print "elt_$elt$Context : start_$elt content_$elt$Context end_$elt;\n";
X
X $anyattrs = &attributes($elt);
X do startEnd($elt, '', $anyattrs);
X
X local(@Exclusions) = @Exclusions;
X local(@Inclusions) = @Inclusions;
X local($Context) = $Context;
X
X local(@excl, @incl, $cont);
X @excl = &DTDget_exc_children($elt);
X @incl = &DTDget_inc_children($elt);
X $cont = $Context;
X
X# print STDERR "@# incl for $elt: @incl\n";
X# print STDERR "@# excl for $elt: @excl\n";
X
X @Exclusions = (@excl, @Exclusions) if $#excl >= 0;
X @Inclusions = (@incl, @Inclusions) if $#incl >= 0;
X
X if($#excl >= 0 || $#incl >= 0){
X $Context = "_$elt" . "_" . $Context unless $Context =~ /_$elt[_]/;
X }
X
X do content($elt, $cont);
X
X print "\n";
X
X foreach $child (@children, @Inclusions){
X# print STDERR "@#child: $child\n";
X next if $child =~ /^\#/;
X
X next if grep($_ eq $child, @Exclusions);
X
X #@ bug in perlSGML?
X next if $child eq 'cdata' || $child eq 'rcdata';
X
X do productionsForElement($child);
X }
X }
X}
X
X
Xsub attributes{
X local($elt) = @_;
X local(%attrs, @names);
X
X return if $StartEnd{$elt};
X
X %attrs = &DTDget_elem_attr($elt);
X
X # filter out #FIXED attributes
X
X foreach $attr (sort keys %attrs){
X local(@vals) = split(/$;/, $attrs{$attr});
X
X next if $vals[0] eq '#FIXED';
X
X# print STDERR "@#attr vals ($elt,$attr) = @vals\n";
X push(@names, $attr);
X }
X
X if(@names){
X print "attrs_$elt :\n";
X
X foreach $attr (@names){
X local(@vals) = split(/$;/, $attrs{$attr});
X
X $attr =~ s/-/__/g; #@ yacc can't handle - in identifiers
X
X #@@ attributes aren't really repeatable like this...
X print "\t| attrs_$elt attr_$elt" . "_$attr";
X
X if($vals[0] eq '#REQUIRED'){
X print " /* REQUIRED */\n";
X }else{
X print "\n";
X }
X }
X
X print "\t;\n\n";
X
X foreach $attr (@names){
X do attribute($elt, $attr, split(/$;/, $attrs{$attr}));
X }
X
X }
X
X return @names;
X}
X
Xsub attribute{
X local($elt, $attr, $def, @values) = @_;
X
X $attr =~ s/-/__/g; #@ yacc can't handle - in identifiers
X
X local($lhs);
X $lhs = "attr_$elt" . "_$attr";
X
X if($values[0] eq 'CDATA'){
X print "$lhs : ANAME_$attr attrval_cdata;\n";
X }
X elsif($values[0] eq 'NUMBER'){
X print "$lhs : ANAME_$attr attrval_number;\n";
X }
X elsif($values[0] eq 'NAME'){
X print "$lhs : ANAME_$attr attrval_name;\n";
X }
X elsif($values[0] eq 'NAMES'){
X print "$lhs : ANAME_$attr attrval_names;\n";
X }
X elsif($values[0] eq 'ID'){
X print "$lhs : ANAME_$attr attrval_id;\n";
X }
X else{
X local($val);
X
X print "$lhs : ANAME_$attr LITERAL /*@# check: @values*/\n";
X foreach $val (@values){
X
X $val =~ tr/A-Z/a-z/; #@ why is perlSGML inconsistent?
X
X print "\t| ANAME_$attr VNAME_$val\n";
X print "\t| VNAME_$val\n";
X }
X print "\t;\n";
X
X }
X}
X
X
Xsub startEnd{
X local($elt, $empty, $anyattrs) = @_;
X
X return if $StartEnd{$elt}++;
X
X local($s, $e);
X
X ($s, $e) = $dtd'ElemTag{$elt} =~ /(\S)\s+(\S)/; #'
X
X# print STDERR "@# attrs for $elt: ", &DTDget_elem_attr($elt), "\n";
X
X if($anyattrs){
X print "start_$elt : START_$elt attrs_$elt TAGC\n";
X }else{
X print "start_$elt : START_$elt TAGC\n";
X }
X
X #@@ NET tags
X #@@ empty start tags
X
X if ($s eq 'O'){
X print "\t| /* omitted start tag */\n";
X }
X print "\t;\n";
X
X if($empty ne 'EMPTY'){
X print "end_$elt : END_$elt\n";
X
X #@@ empty end tags
X
X if ($e eq 'O'){
X print "\t| /* omitted end tag */\n";
X }
X print "\t;\n";
X }
X
X print "\n";
X}
X
X
Xsub content{
X local($elt, $context) = @_;
X
X #@@ IGNORING CONNECTIVES!!!
X
X local(@children) = &DTDget_base_children($elt);
X local($D) = 1;
X
X print "content_$elt$context : /* empty */\n";
X print "\t| content_$elt$context cont_$elt$context; /*@@assume repeated-or*/\n";
X print "cont_$elt$context : ";
X
X #@@ ANY, RCDATA
X if($children[0] eq 'cdata'){
X print "\t data\n";
X }else{
X local($sep);
X foreach $child (@children, @Inclusions){
X next if grep($_ eq $child, @Exclusions);
X
X if($child eq '#pcdata'){
X print "\t$sep data\n";
X $D = 0;
X }else{
X print "\t$sep elt_$child$Context\n";
X }
X $sep = '|';
X }
X if ($D){
X print "\t$sep DATA /* skip DATA in eltement content */\n";
X }
X }
X
X print "\t;\n";
X}
X
X
Xsub parseArgs{
X while(($opt = $ARGV[0]) =~ /^-/){
X shift(@ARGV);
X if($opt eq '-array'){
X $Array = shift(@ARGV);
X }
X else{
X warn "$0: option $opt not recognized\n";
X }
X }
X
X if($Array){
X open(ARRAY, ">$Array") || die "$0: $Array: $!\n";
X }
X}
END_OF_dtd2yacc.pl
if test 7380 -ne `wc -c <dtd2yacc.pl`; then
echo shar: \"dtd2yacc.pl\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f html.dtd -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"html.dtd\"
else
echo shar: Extracting \"html.dtd\" \(17222 characters\)
sed "s/^X//" >html.dtd <<'END_OF_html.dtd'
X<!-- html.dtd
X
X Document Type Definition for the HyperText Markup Language (HTML DTD)
X
X $Id: html.dtd,v 1.22 1994/11/30 23:45:40 connolly Exp $
X
X Author: Daniel W. Connolly <connolly@hal.com>
X See Also: html.decl, html-0.dtd, html-1.dtd
X http://www.hal.com/%7Econnolly/html-spec/index.html
X http://info.cern.ch/hypertext/WWW/MarkUp2/MarkUp.html
X-->
X
X<!ENTITY % HTML.Version
X "-//IETF//DTD HTML 2.0//EN"
X
X -- Typical usage:
X
X <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
X <html>
X ...
X </html>
X --
X >
X
X
X<!--================== Feature Test Entities ==============================-->
X
X<!ENTITY % HTML.Recommended "IGNORE"
X -- Certain features of the language are necessary for compatibility
X with widespread usage, but they may compromise the structural
X integrity of a document. This feature test entity enables
X a more prescriptive document type definition that eliminates
X those features.
X -->
X
X<![ %HTML.Recommended [
X <!ENTITY % HTML.Deprecated "IGNORE">
X]]>
X
X<!ENTITY % HTML.Deprecated "INCLUDE"
X -- Certain features of the language are necessary for compatibility
X with earlier versions of the specification, but they tend
X to be used an implemented inconsistently, and their use is
X deprecated. This feature test entity enables a document type
X definition that eliminates these features.
X -->
X
X<!ENTITY % HTML.Highlighting "INCLUDE"
X -- Use this feature test entity to validate that a document
X uses no highlighting tags, which may be ignored on minimal
X implementations.
X -->
X
X<!ENTITY % HTML.Forms "INCLUDE"
X -- Use this feature test entity to validate that a document
X contains no forms, which may not be supported in minimal
X implementations
X -->
X
X<!--================== Imported Names =====================================-->
X
X<!ENTITY % Content-Type "CDATA"
X -- meaning an internet media type
X (aka MIME content type, as per RFC1521)
X -->
X
X<!ENTITY % HTTP-Method "GET | POST"
X -- as per HTTP specification, in progress
X -->
X
X<!ENTITY % URI "CDATA"
X -- The term URI means a CDATA attribute
X whose value is a Uniform Resource Identifier,
X as defined by
X "Universal Resource Identifiers" by Tim Berners-Lee
X aka http://info.cern.ch/hypertext/WWW/Addressing/URL/URI_Overview.html
X aka RFC 1630
X
X Note that CDATA attributes are limited by the LITLEN
X capacity (1024 in the current version of html.decl),
X so that URIs in HTML have a bounded length.
X
X -->
X
X
X<!--================== DTD "Macros" =======================================-->
X
X<!ENTITY % heading "H1|H2|H3|H4|H5|H6">
X
X<!ENTITY % list " UL | OL | DIR | MENU " >
X
X
X<!--================ Character mnemonic entities ==========================-->
X
X<!ENTITY % ISOlat1 PUBLIC
X "ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML">
X%ISOlat1;
X
X<!ENTITY amp CDATA "&#38;" -- ampersand -->
X<!ENTITY gt CDATA "&#62;" -- greater than -->
X<!ENTITY lt CDATA "&#60;" -- less than -->
X<!ENTITY quot CDATA "&#34;" -- double quote -->
X
X
X<!--=================== SGML Document Access (SDA) Parameter Entities =====-->
X
X<!-- HTML 2.0 contains SGML Document Access (SDA) fixed attributes in
Xsupport of easy transformation to the International Committee for
XAccessible Document Design (ICADD) DTD "-//EC-USA-CDA/ICADD//DTD
XICADD22//EN". ICADD applications are designed to support usable access
Xto structured information by print-impaired individuals through Braille,
Xlarge print and voice synthesis. For more information on SDA & ICADD:
X - ISO 12083:1993, Annex A.8, Facilities for Braille, large print
X and computer voice
X - ICADD ListServ <ICADD%ASUACAD.BITNET@ARIZVM1.ccit.arizona.edu>
X - Usenet news group bit.listserv.easi
X - Recording for the Blind, +1 800 221 4792
X-->
X
X<!ENTITY % SDAFORM "SDAFORM CDATA #FIXED" -- one to one mapping -->
X<!ENTITY % SDARULE "SDARULE CDATA #FIXED" -- context-sensitive mapping -->
X<!ENTITY % SDAPREF "SDAPREF CDATA #FIXED" -- generated text prefix -->
X<!ENTITY % SDASUFF "SDASUFF CDATA #FIXED" -- generated text suffix -->
X<!ENTITY % SDASUSP "SDASUSP NAME #FIXED" -- suspend transform process -->
X
X
X<!--=================== Text Markup =======================================-->
X
X<![ %HTML.Highlighting [
X
X<!ENTITY % font " TT | B | I ">
X
X<!ENTITY % phrase "EM | STRONG | CODE | SAMP | KBD | VAR | CITE ">
X
X<!ENTITY % text "#PCDATA | A | IMG | BR | %phrase | %font">
X
X<!ELEMENT (%font;|%phrase) - - (%text)*>
X<!ATTLIST ( TT | CODE | SAMP | KBD | VAR )
X %SDAFORM; "Lit"
X >
X<!ATTLIST ( B | STRONG )
X %SDAFORM; "B"
X >
X<!ATTLIST ( I | EM | CITE )
X %SDAFORM; "It"
X >
X
X<!-- <TT> Typewriter text -->
X<!-- <B> Bold text -->
X<!-- <I> Italic text -->
X
X<!-- <EM> Emphasized phrase -->
X<!-- <STRONG> Strong emphais -->
X<!-- <CODE> Source code phrase -->
X<!-- <SAMP> Sample text or characters -->
X<!-- <KBD> Keyboard phrase, e.g. user input -->
X<!-- <VAR> Variable phrase or substituable -->
X<!-- <CITE> Name or title of cited work -->
X
X<!ENTITY % pre.content "#PCDATA | A | HR | BR | %font | %phrase">
X
X]]>
X
X<!ENTITY % text "#PCDATA | A | IMG | BR">
X
X<!ELEMENT BR - O EMPTY>
X<!ATTLIST BR
X %SDAPREF; "&#RE;"
X >
X
X<!-- <BR> Line break -->
X
X
X<!--================== Link Markup ========================================-->
X
X<![ %HTML.Recommended [
X <!ENTITY % linkName "ID">
X]]>
X
X<!ENTITY % linkName "CDATA">
X
X<!ENTITY % linkType "NAME"
X -- a list of these will be specified at a later date -->
X
X<!ENTITY % linkExtraAttributes
X "REL %linkType #IMPLIED
X REV %linkType #IMPLIED
X URN CDATA #IMPLIED
X TITLE CDATA #IMPLIED
X METHODS NAMES #IMPLIED
X ">
X
X<![ %HTML.Recommended [
X <!ENTITY % A.content "(%text)*"
X -- <H1><a name="xxx">Heading</a></H1>
X is preferred to
X <a name="xxx"><H1>Heading</H1></a>
X -->
X]]>
X
X<!ENTITY % A.content "(%heading|%text)*">
X
X<!ELEMENT A - - %A.content -(A)>
X<!ATTLIST A
X HREF %URI #IMPLIED
X NAME %linkName #IMPLIED
X %linkExtraAttributes;
X %SDAPREF; "<?SDATrans A: #AttList>"
X >
X<!-- <A> Anchor; source and/or destination of a link -->
X<!-- <A NAME="..."> Name of this anchor -->
X<!-- <A HREF="..."> Address of link destination -->
X<!-- <A URN="..."> Permanent address of destination -->
X<!-- <A REL=...> Relationship of this anchor to destination -->
X<!-- <A REV=...> Relationship of destination to this anchor -->
X<!-- <A TITLE="..."> Title of destination (advisory) -->
X<!-- <A METHODS="..."> Operations allowed on destination (advisory) -->
X
X
X<!--=================== Images ============================================-->
X
X<!ELEMENT IMG - O EMPTY>
X<!ATTLIST IMG
X SRC %URI; #REQUIRED
X ALT CDATA #IMPLIED
X ALIGN (top|middle|bottom) #IMPLIED
X ISMAP (ISMAP) #IMPLIED
X %SDAPREF; "<Fig><?SDATrans Img: #AttList>#AttVal(Alt)</Fig>"
X >
X
X<!-- <IMG> Image; icon, glyph or illustration -->
X<!-- <IMG SRC="..."> Address of image object -->
X<!-- <IMG ALT="..."> Textual alternative -->
X<!-- <IMG ALIGN=...> Position relative to text -->
X<!-- <IMG ISMAP> Each pixel can be a link -->
X
X<!--=================== Paragraphs=========================================-->
X
X<!ELEMENT P - O (%text)*>
X<!ATTLIST P
X %SDAFORM; "Para"
X >
X
X<!-- <P> Paragraph -->
X
X
X<!--=================== Headings, Titles, Sections ========================-->
X
X<!ELEMENT HR - O EMPTY>
X<!ATTLIST HR
X %SDAPREF; "<Para><?SDATrans HR: #AttList></Para>"
X >
X
X<!-- <HR> Horizontal rule -->
X
X<!ELEMENT ( %heading ) - - (%text;)*>
X<!ATTLIST H1
X %SDAFORM; "H1"
X >
X<!ATTLIST H2
X %SDAFORM; "H2"
X >
X<!ATTLIST H3
X %SDAFORM; "H3"
X >
X<!ATTLIST H4
X %SDAFORM; "H4"
X >
X<!ATTLIST H5
X %SDAFORM; "H5"
X >
X<!ATTLIST H6
X %SDAFORM; "H6"
X >
X
X<!-- <H1> Heading, level 1 -->
X<!-- <H2> Heading, level 2 -->
X<!-- <H3> Heading, level 3 -->
X<!-- <H4> Heading, level 4 -->
X<!-- <H5> Heading, level 5 -->
X<!-- <H6> Heading, level 6 -->
X
X
X<!--=================== Text Flows ========================================-->
X
X<![ %HTML.Forms [
X <!ENTITY % block.forms "BLOCKQUOTE | FORM | ISINDEX">
X]]>
X
X<!ENTITY % block.forms "BLOCKQUOTE">
X
X<![ %HTML.Deprecated [
X <!ENTITY % preformatted "PRE | XMP | LISTING">
X]]>
X
X<!ENTITY % preformatted "PRE">
X
X<!ENTITY % block "P | %list | DL
X | %preformatted
X | %block.forms">
X
X<!ENTITY % flow "(%text|%block)*">
X
X<!ENTITY % pre.content "#PCDATA | A | HR | BR">
X<!ELEMENT PRE - - (%pre.content)*>
X<!ATTLIST PRE
X WIDTH NUMBER #implied
X %SDAFORM; "Lit"
X %SDAPREF; "<?SDATrans Pre: #AttList>"
X >
X
X<!-- <PRE> Preformatted text -->
X<!-- <PRE WIDTH=...> Maximum characters per line -->
X
X<![ %HTML.Deprecated [
X
X<!ENTITY % literal "CDATA"
X -- historical, non-conforming parsing mode where
X the only markup signal is the end tag
X in full
X -->
X
X<!ELEMENT (XMP|LISTING) - - %literal>
X<!ATTLIST XMP
X %SDAFORM; "Lit"
X %SDAPREF; "Example:&#RE;"
X >
X<!ATTLIST LISTING
X %SDAFORM; "Lit"
X %SDAPREF; "Listing:&#RE;"
X >
X
X<!-- <XMP> Example section -->
X<!-- <LISTING> Computer listing -->
X
X<!ELEMENT PLAINTEXT - O %literal>
X<!-- <PLAINTEXT> Plain text passage -->
X
X<!ATTLIST PLAINTEXT
X %SDAFORM; "Lit"
X >
X]]>
X
X
X<!--=================== Lists =============================================-->
X
X<!ELEMENT DL - - (DT | DD)+>
X<!ATTLIST DL
X COMPACT (COMPACT) #IMPLIED
X %SDAFORM; "List"
X %SDAPREF; "<?SDATrans DL: #AttList>"
X >
X
X<!ELEMENT DT - O (%text)*>
X<!ATTLIST DT
X %SDAFORM; "Term"
X >
X
X<!ELEMENT DD - O %flow>
X<!ATTLIST DD
X %SDAFORM; "LItem"
X >
X
X<!-- <DL> Definition list, or glossary -->
X<!-- <DL COMPACT> Compact style list -->
X<!-- <DT> Term in definition list -->
X<!-- <DD> Definition of term -->
X
X<!ELEMENT (OL|UL) - - (LI)+>
X<!ATTLIST OL
X COMPACT (COMPACT) #IMPLIED
X %SDAFORM; "List"
X %SDAPREF; "<?SDATrans OL: #AttList>"
X >
X<!ATTLIST UL
X COMPACT (COMPACT) #IMPLIED
X %SDAFORM; "List"
X %SDAPREF; "<?SDATrans UL: #AttList>"
X >
X<!-- <UL> Unordered list -->
X<!-- <UL COMPACT> Compact list style -->
X<!-- <OL> Ordered, or numbered list -->
X<!-- <OL COMPACT> Compact list style -->
X
X
X<!ELEMENT (DIR|MENU) - - (LI)+ -(%block)>
X<!ATTLIST DIR
X COMPACT (COMPACT) #IMPLIED
X %SDAFORM; "List"
X %SDAPREF; "<?SDATrans Dir: #AttList><LHead>Directory</LHead>"
X >
X<!ATTLIST MENU
X COMPACT (COMPACT) #IMPLIED
X %SDAFORM; "List"
X %SDAPREF; "<?SDATrans Menu: #AttList><LHead>Menu</LHead>"
X >
X
X<!-- <DIR> Directory list -->
X<!-- <DIR COMPACT> Compact list style -->
X<!-- <MENU> Menu list -->
X<!-- <MENU COMPACT> Compact list style -->
X
X<!ELEMENT LI - O %flow>
X<!ATTLIST LI
X %SDAFORM; "LItem"
X >
X
X<!-- <LI> List item -->
X
X<!--=================== Document Body =====================================-->
X
X<![ %HTML.Recommended [
X <!ENTITY % body.content "(%heading|%block|HR|ADDRESS|IMG)*"
X -- <h1>Heading</h1>
X <p>Text ...
X is preferred to
X <h1>Heading</h1>
X Text ...
X -->
X]]>
X
X<!ENTITY % body.content "(%heading | %text | %block | HR | ADDRESS | IMG)*">
X
X<!ELEMENT BODY O O %body.content>
X<!ATTLIST BODY
X %SDAPREF; "<?SDATrans Body: #AttList>"
X >
X
X<!-- <BODY> Document body -->
X
X<!ELEMENT BLOCKQUOTE - - %body.content>
X<!ATTLIST BLOCKQUOTE
X %SDAFORM; "BQ"
X >
X
X<!-- <BLOCKQUOTE> Quoted passage -->
X
X<!ELEMENT ADDRESS - - (%text|P)*>
X<!ATTLIST ADDRESS
X %SDAFORM; "Lit"
X %SDAPREF; "Address:&#RE;"
X >
X
X<!-- <ADDRESS> Address, signature, or byline for document or passage -->
X
X
X<!--================ Forms ===============================================-->
X
X<![ %HTML.Forms [
X
X<!ELEMENT FORM - - %body.content -(FORM) +(INPUT|SELECT|TEXTAREA)>
X<!ATTLIST FORM
X ACTION %URI #IMPLIED
X METHOD (%HTTP-Method) GET
X ENCTYPE %Content-Type; "application/x-www-form-urlencoded"
X %SDAPREF; "<Para><?SDATrans Form: #AttList>Form:</Para>"
X %SDASUFF; "<Para><?SDATrans Form: #End>Form End.</Para>"
X >
X
X<!-- <FORM> Fill-out or data-entry form -->
X<!-- <FORM ACTION="..."> Address for completed form -->
X<!-- <FORM METHOD=...> Method of submitting form -->
X<!-- <FORM ENCTYPE="..."> Representation of form data -->
X
X<!ENTITY % InputType "(TEXT | PASSWORD | CHECKBOX |
X RADIO | SUBMIT | RESET |
X IMAGE | HIDDEN )">
X<!ELEMENT INPUT - O EMPTY>
X<!ATTLIST INPUT
X TYPE %InputType TEXT
X NAME CDATA #IMPLIED
X VALUE CDATA #IMPLIED
X SRC %URI #IMPLIED
X CHECKED (CHECKED) #IMPLIED
X SIZE CDATA #IMPLIED
X MAXLENGTH NUMBER #IMPLIED
X ALIGN (top|middle|bottom) #IMPLIED
X %SDAPREF; "<?SDATrans Input: #AttList>"
X >
X
X<!-- <INPUT> Form input datum -->
X<!-- <INPUT TYPE=...> Type of input interaction -->
X<!-- <INPUT NAME=...> Name of form datum -->
X<!-- <INPUT VALUE="..."> Default/initial/selected value -->
X<!-- <INPUT SRC="..."> Address of image -->
X<!-- <INPUT CHECKED> Initial state is "on" -->
X<!-- <INPUT SIZE=...> Field size hint -->
X<!-- <INPUT MAXLENGTH=...> Data length maximum -->
X<!-- <INPUT ALIGN=...> Image alignment -->
X
X<!ELEMENT SELECT - - (OPTION+) -(INPUT|SELECT|TEXTAREA)>
X<!ATTLIST SELECT
X NAME CDATA #REQUIRED
X SIZE NUMBER #IMPLIED
X MULTIPLE (MULTIPLE) #IMPLIED
X %SDAFORM; "List"
X %SDAPREF;
X "<?SDATrans Select: #AttList><LHead>Select #AttVal(Multiple)</LHead>"
X >
X
X<!-- <SELECT> Selection of option(s) -->
X<!-- <SELECT NAME=...> Name of form datum -->
X<!-- <SELECT SIZE=...> Number of options displayed at a time -->
X<!-- <SELECT MULTIPLE> Multiple selections allowed -->
X
X<!ELEMENT OPTION - O (#PCDATA)*>
X<!ATTLIST OPTION
X SELECTED (SELECTED) #IMPLIED
X VALUE CDATA #IMPLIED
X %SDAFORM; "LItem"
X %SDAPREF;
X "<?SDATrans Option: #AttList>#AttVal(Value) #AttVal(Selected)"
X >
X
X<!-- <OPTION> A selection option -->
X<!-- <OPTION SELECTED> Initial state -->
X<!-- <OPTION VALUE="..."> Form datum value for this option -->
X
X<!ELEMENT TEXTAREA - - (#PCDATA)* -(INPUT|SELECT|TEXTAREA)>
X<!ATTLIST TEXTAREA
X NAME CDATA #REQUIRED
X ROWS NUMBER #REQUIRED
X COLS NUMBER #REQUIRED
X %SDAFORM; "Para"
X %SDAPREF; "<?SDATrans TextArea: #AttList>#AttVal(Name): "
X >
X
X<!-- <TEXTAREA> An area for text input -->
X<!-- <TEXTAREA NAME=...> Name of form datum -->
X<!-- <TEXTAREA ROWS=...> Height of area -->
X<!-- <TEXTAREA COLS=...> Width of area -->
X
X]]>
X
X
X<!--================ Document Head ========================================-->
X
X<![ %HTML.Recommended [
X <!ENTITY % head.extra "META* & LINK*">
X]]>
X
X<!ENTITY % head.extra "NEXTID? & META* & LINK*">
X
X<!ENTITY % head.content "TITLE & ISINDEX? & BASE? &
X %head.extra">
X
X<!ELEMENT HEAD O O (%head.content)>
X<!ATTLIST HEAD
X %SDAPREF; "<?SDATrans Head: #AttList>"
X >
X
X<!-- <HEAD> Document head -->
X
X<!ELEMENT TITLE - - (#PCDATA)*>
X<!ATTLIST TITLE
X %SDAFORM; "Ti"
X >
X
X<!-- <TITLE> Title of document -->
X
X<!ELEMENT LINK - O EMPTY>
X<!ATTLIST LINK
X HREF %URI #REQUIRED
X %linkExtraAttributes;
X %SDAPREF; "<?SDATrans Link: #AttList>"
X >
X
X<!-- <LINK> Link from this document -->
X<!-- <LINK HREF="..."> Address of link destination -->
X<!-- <LINK URN="..."> Lasting name of destination -->
X<!-- <LINK REL=...> Relationship of this document to destination -->
X<!-- <LINK REV=...> Relationship of destination to this document -->
X<!-- <LINK TITLE="..."> Title of destination (advisory) -->
X<!-- <LINK METHODS="..."> Operations allowed on destination (advisory) -->
X
X<!ELEMENT ISINDEX - O EMPTY>
X<!ATTLIST ISINDEX
X %SDAPREF;
X "<Para><?SDATrans IsIndex: #AttList>[Document indexed/searchable.]</Para>">
X
X<!-- <ISINDEX> Document is a searchable index -->
X
X<!ELEMENT BASE - O EMPTY>
X<!ATTLIST BASE
X HREF %URI; #REQUIRED
X %SDAPREF; "<?SDATrans Base: #AttList>"
X >
X
X<!-- <BASE> Base context document -->
X<!-- <BASE HREF="..."> Address for this document -->
X
X<!ELEMENT NEXTID - O EMPTY>
X<!ATTLIST NEXTID
X N %linkName #REQUIRED
X %SDAPREF; "<?SDATrans NextID: #AttList>"
X >
X
X<!-- <NEXTID> Next ID to use for link name -->
X<!-- <NEXTID N=...> Next ID to use for link name -->
X
X<!ELEMENT META - O EMPTY>
X<!ATTLIST META
X HTTP-EQUIV NAME #IMPLIED
X NAME NAME #IMPLIED
X CONTENT CDATA #REQUIRED
X %SDAPREF; "<?SDATrans Meta: #AttList>"
X >
X
X<!-- <META> Generic Metainformation -->
X<!-- <META HTTP-EQUIV=...> HTTP response header name -->
X<!-- <META HTTP-EQUIV=...> Metainformation name -->
X<!-- <META CONTENT="..."> Associated information -->
X
X<!--================ Document Structure ===================================-->
X
X<![ %HTML.Deprecated [
X <!ENTITY % html.content "HEAD, BODY, PLAINTEXT?">
X]]>
X<!ENTITY % html.content "HEAD, BODY">
X
X<!ELEMENT HTML O O (%html.content)>
X<!ENTITY % version.attr "VERSION CDATA #FIXED '%HTML.Version;'">
X
X<!ATTLIST HTML
X %version.attr;
X %SDAFORM; "Book"
X %SDAPREF; "<?SDATrans HTML: #AttList>"
X >
X
X<!-- <HTML> HyperText Markup Language Document -->
END_OF_html.dtd
if test 17222 -ne `wc -c <html.dtd`; then
echo shar: \"html.dtd\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f html.y -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"html.y\"
else
echo shar: Extracting \"html.y\" \(111429 characters\)
sed "s/^X//" >html.y <<'END_OF_html.y'
X%token TAGC /* > */
X%token DATA /* characters */
X
X /* attribute values, ala TEI guidelines */
X%token NUMBER /* [0-9]+ */
X%token NAME /* [a-z][a-z0-9.-]* */
X%token NMTOKEN /* [a-z0-9.-]+ */
X%token LITERAL /* anything, in quotes */
X
X%token START_a
X%token END_a
X%token ANAME_href
X%token ANAME_methods
X%token ANAME_name
X%token ANAME_rel
X%token ANAME_rev
X%token ANAME_title
X%token ANAME_urn
X%token START_address
X%token END_address
X%token START_b
X%token END_b
X%token START_base
X%token START_blockquote
X%token END_blockquote
X%token START_body
X%token END_body
X%token START_br
X%token START_cite
X%token END_cite
X%token START_code
X%token END_code
X%token START_dd
X%token END_dd
X%token START_dir
X%token END_dir
X%token ANAME_compact
X%token VNAME_compact
X%token START_dl
X%token END_dl
X%token START_dt
X%token END_dt
X%token START_em
X%token END_em
X%token START_form
X%token END_form
X%token ANAME_action
X%token ANAME_enctype
X%token ANAME_method
X%token VNAME_get
X%token VNAME_post
X%token START_h1
X%token END_h1
X%token START_h2
X%token END_h2
X%token START_h3
X%token END_h3
X%token START_h4
X%token END_h4
X%token START_h5
X%token END_h5
X%token START_h6
X%token END_h6
X%token START_head
X%token END_head
X%token START_hr
X%token START_html
X%token END_html
X%token START_i
X%token END_i
X%token START_img
X%token ANAME_align
X%token VNAME_top
X%token VNAME_middle
X%token VNAME_bottom
X%token ANAME_alt
X%token ANAME_ismap
X%token VNAME_ismap
X%token ANAME_src
X%token START_input
X%token ANAME_checked
X%token VNAME_checked
X%token ANAME_maxlength
X%token ANAME_size
X%token ANAME_type
X%token VNAME_text
X%token VNAME_password
X%token VNAME_checkbox
X%token VNAME_radio
X%token VNAME_submit
X%token VNAME_reset
X%token VNAME_image
X%token VNAME_hidden
X%token ANAME_value
X%token START_isindex
X%token START_kbd
X%token END_kbd
X%token START_li
X%token END_li
X%token START_link
X%token START_listing
X%token END_listing
X%token START_menu
X%token END_menu
X%token START_meta
X%token ANAME_content
X%token ANAME_http__equiv
X%token START_nextid
X%token ANAME_n
X%token START_ol
X%token END_ol
X%token START_option
X%token END_option
X%token ANAME_selected
X%token VNAME_selected
X%token START_p
X%token END_p
X%token START_plaintext
X%token END_plaintext
X%token START_pre
X%token END_pre
X%token ANAME_width
X%token START_samp
X%token END_samp
X%token START_select
X%token END_select
X%token ANAME_multiple
X%token VNAME_multiple
X%token START_strong
X%token END_strong
X%token START_textarea
X%token END_textarea
X%token ANAME_cols
X%token ANAME_rows
X%token START_title
X%token END_title
X%token START_tt
X%token END_tt
X%token START_ul
X%token END_ul
X%token START_var
X%token END_var
X%token START_xmp
X%token END_xmp
X
X%%
X
Xelt_html : start_html content_html end_html;
Xstart_html : START_html TAGC
X | /* omitted start tag */
X ;
Xend_html : END_html
X | /* omitted end tag */
X ;
X
Xcontent_html : elt_head elt_body;
X
Xelt_head : start_head content_head end_head;
Xstart_head : START_head TAGC
X | /* omitted start tag */
X ;
Xend_head : END_head
X | /* omitted end tag */
X ;
X
Xcontent_head : /* empty */
X | content_head cont_head; /*@@assume repeated-or*/
Xcont_head : elt_title
X | elt_isindex
X | elt_base
X | elt_nextid
X | elt_meta
X | elt_link
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_title : start_title content_title end_title;
Xstart_title : START_title TAGC
X ;
Xend_title : END_title
X ;
X
Xcontent_title : /* empty */
X | content_title cont_title; /*@@assume repeated-or*/
Xcont_title : data
X ;
X
Xelt_isindex : start_isindex
Xstart_isindex : START_isindex TAGC
X ;
X
X
Xelt_base : start_base
Xattrs_base :
X | attrs_base attr_base_href /* REQUIRED */
X ;
X
Xattr_base_href : ANAME_href attrval_cdata;
Xstart_base : START_base attrs_base TAGC
X ;
X
X
Xelt_nextid : start_nextid
Xattrs_nextid :
X | attrs_nextid attr_nextid_n /* REQUIRED */
X ;
X
Xattr_nextid_n : ANAME_n attrval_cdata;
Xstart_nextid : START_nextid attrs_nextid TAGC
X ;
X
X
Xelt_meta : start_meta
Xattrs_meta :
X | attrs_meta attr_meta_content /* REQUIRED */
X | attrs_meta attr_meta_http__equiv
X | attrs_meta attr_meta_name
X ;
X
Xattr_meta_content : ANAME_content attrval_cdata;
Xattr_meta_http__equiv : ANAME_http__equiv LITERAL /*@# check: */
X ;
Xattr_meta_name : ANAME_name attrval_name;
Xstart_meta : START_meta attrs_meta TAGC
X ;
X
X
Xelt_link : start_link
Xattrs_link :
X | attrs_link attr_link_href /* REQUIRED */
X | attrs_link attr_link_methods
X | attrs_link attr_link_rel
X | attrs_link attr_link_rev
X | attrs_link attr_link_title
X | attrs_link attr_link_urn
X ;
X
Xattr_link_href : ANAME_href attrval_cdata;
Xattr_link_methods : ANAME_methods attrval_names;
Xattr_link_rel : ANAME_rel attrval_name;
Xattr_link_rev : ANAME_rev attrval_name;
Xattr_link_title : ANAME_title attrval_cdata;
Xattr_link_urn : ANAME_urn attrval_cdata;
Xstart_link : START_link attrs_link TAGC
X ;
X
X
Xelt_body : start_body content_body end_body;
Xstart_body : START_body TAGC
X | /* omitted start tag */
X ;
Xend_body : END_body
X | /* omitted end tag */
X ;
X
Xcontent_body : /* empty */
X | content_body cont_body; /*@@assume repeated-or*/
Xcont_body : elt_h1
X | elt_h2
X | elt_h3
X | elt_h4
X | elt_h5
X | elt_h6
X | data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X | elt_p
X | elt_ul
X | elt_ol
X | elt_dir
X | elt_menu
X | elt_dl
X | elt_pre
X | elt_xmp
X | elt_listing
X | elt_blockquote
X | elt_form
X | elt_isindex
X | elt_hr
X | elt_address
X ;
X
Xelt_h1 : start_h1 content_h1 end_h1;
Xstart_h1 : START_h1 TAGC
X ;
Xend_h1 : END_h1
X ;
X
Xcontent_h1 : /* empty */
X | content_h1 cont_h1; /*@@assume repeated-or*/
Xcont_h1 : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_a : start_a content_a end_a;
Xattrs_a :
X | attrs_a attr_a_href
X | attrs_a attr_a_methods
X | attrs_a attr_a_name
X | attrs_a attr_a_rel
X | attrs_a attr_a_rev
X | attrs_a attr_a_title
X | attrs_a attr_a_urn
X ;
X
Xattr_a_href : ANAME_href attrval_cdata;
Xattr_a_methods : ANAME_methods attrval_names;
Xattr_a_name : ANAME_name attrval_cdata;
Xattr_a_rel : ANAME_rel attrval_name;
Xattr_a_rev : ANAME_rev attrval_name;
Xattr_a_title : ANAME_title attrval_cdata;
Xattr_a_urn : ANAME_urn attrval_cdata;
Xstart_a : START_a attrs_a TAGC
X ;
Xend_a : END_a
X ;
X
Xcontent_a : /* empty */
X | content_a cont_a; /*@@assume repeated-or*/
Xcont_a : elt_h1_a_
X | elt_h2_a_
X | elt_h3_a_
X | elt_h4_a_
X | elt_h5_a_
X | elt_h6_a_
X | data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_h1_a_ : start_h1 content_h1_a_ end_h1;
Xcontent_h1_a_ : /* empty */
X | content_h1_a_ cont_h1_a_; /*@@assume repeated-or*/
Xcont_h1_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_img_a_ : start_img
Xattrs_img :
X | attrs_img attr_img_align
X | attrs_img attr_img_alt
X | attrs_img attr_img_ismap
X | attrs_img attr_img_src /* REQUIRED */
X ;
X
Xattr_img_align : ANAME_align LITERAL /*@# check: top middle bottom*/
X | ANAME_align VNAME_top
X | VNAME_top
X | ANAME_align VNAME_middle
X | VNAME_middle
X | ANAME_align VNAME_bottom
X | VNAME_bottom
X ;
Xattr_img_alt : ANAME_alt attrval_cdata;
Xattr_img_ismap : ANAME_ismap LITERAL /*@# check: ISMAP*/
X | ANAME_ismap VNAME_ismap
X | VNAME_ismap
X ;
Xattr_img_src : ANAME_src attrval_cdata;
Xstart_img : START_img attrs_img TAGC
X ;
X
X
Xelt_br_a_ : start_br
Xstart_br : START_br TAGC
X ;
X
X
Xelt_em_a_ : start_em content_em_a_ end_em;
Xstart_em : START_em TAGC
X ;
Xend_em : END_em
X ;
X
Xcontent_em_a_ : /* empty */
X | content_em_a_ cont_em_a_; /*@@assume repeated-or*/
Xcont_em_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_strong_a_ : start_strong content_strong_a_ end_strong;
Xstart_strong : START_strong TAGC
X ;
Xend_strong : END_strong
X ;
X
Xcontent_strong_a_ : /* empty */
X | content_strong_a_ cont_strong_a_; /*@@assume repeated-or*/
Xcont_strong_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_code_a_ : start_code content_code_a_ end_code;
Xstart_code : START_code TAGC
X ;
Xend_code : END_code
X ;
X
Xcontent_code_a_ : /* empty */
X | content_code_a_ cont_code_a_; /*@@assume repeated-or*/
Xcont_code_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_samp_a_ : start_samp content_samp_a_ end_samp;
Xstart_samp : START_samp TAGC
X ;
Xend_samp : END_samp
X ;
X
Xcontent_samp_a_ : /* empty */
X | content_samp_a_ cont_samp_a_; /*@@assume repeated-or*/
Xcont_samp_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_kbd_a_ : start_kbd content_kbd_a_ end_kbd;
Xstart_kbd : START_kbd TAGC
X ;
Xend_kbd : END_kbd
X ;
X
Xcontent_kbd_a_ : /* empty */
X | content_kbd_a_ cont_kbd_a_; /*@@assume repeated-or*/
Xcont_kbd_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_var_a_ : start_var content_var_a_ end_var;
Xstart_var : START_var TAGC
X ;
Xend_var : END_var
X ;
X
Xcontent_var_a_ : /* empty */
X | content_var_a_ cont_var_a_; /*@@assume repeated-or*/
Xcont_var_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_cite_a_ : start_cite content_cite_a_ end_cite;
Xstart_cite : START_cite TAGC
X ;
Xend_cite : END_cite
X ;
X
Xcontent_cite_a_ : /* empty */
X | content_cite_a_ cont_cite_a_; /*@@assume repeated-or*/
Xcont_cite_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_tt_a_ : start_tt content_tt_a_ end_tt;
Xstart_tt : START_tt TAGC
X ;
Xend_tt : END_tt
X ;
X
Xcontent_tt_a_ : /* empty */
X | content_tt_a_ cont_tt_a_; /*@@assume repeated-or*/
Xcont_tt_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_b_a_ : start_b content_b_a_ end_b;
Xstart_b : START_b TAGC
X ;
Xend_b : END_b
X ;
X
Xcontent_b_a_ : /* empty */
X | content_b_a_ cont_b_a_; /*@@assume repeated-or*/
Xcont_b_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_i_a_ : start_i content_i_a_ end_i;
Xstart_i : START_i TAGC
X ;
Xend_i : END_i
X ;
X
Xcontent_i_a_ : /* empty */
X | content_i_a_ cont_i_a_; /*@@assume repeated-or*/
Xcont_i_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_h2_a_ : start_h2 content_h2_a_ end_h2;
Xstart_h2 : START_h2 TAGC
X ;
Xend_h2 : END_h2
X ;
X
Xcontent_h2_a_ : /* empty */
X | content_h2_a_ cont_h2_a_; /*@@assume repeated-or*/
Xcont_h2_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_h3_a_ : start_h3 content_h3_a_ end_h3;
Xstart_h3 : START_h3 TAGC
X ;
Xend_h3 : END_h3
X ;
X
Xcontent_h3_a_ : /* empty */
X | content_h3_a_ cont_h3_a_; /*@@assume repeated-or*/
Xcont_h3_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_h4_a_ : start_h4 content_h4_a_ end_h4;
Xstart_h4 : START_h4 TAGC
X ;
Xend_h4 : END_h4
X ;
X
Xcontent_h4_a_ : /* empty */
X | content_h4_a_ cont_h4_a_; /*@@assume repeated-or*/
Xcont_h4_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_h5_a_ : start_h5 content_h5_a_ end_h5;
Xstart_h5 : START_h5 TAGC
X ;
Xend_h5 : END_h5
X ;
X
Xcontent_h5_a_ : /* empty */
X | content_h5_a_ cont_h5_a_; /*@@assume repeated-or*/
Xcont_h5_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_h6_a_ : start_h6 content_h6_a_ end_h6;
Xstart_h6 : START_h6 TAGC
X ;
Xend_h6 : END_h6
X ;
X
Xcontent_h6_a_ : /* empty */
X | content_h6_a_ cont_h6_a_; /*@@assume repeated-or*/
Xcont_h6_a_ : data
X | elt_img_a_
X | elt_br_a_
X | elt_em_a_
X | elt_strong_a_
X | elt_code_a_
X | elt_samp_a_
X | elt_kbd_a_
X | elt_var_a_
X | elt_cite_a_
X | elt_tt_a_
X | elt_b_a_
X | elt_i_a_
X ;
X
Xelt_img : start_img
X
Xelt_br : start_br
X
Xelt_em : start_em content_em end_em;
Xcontent_em : /* empty */
X | content_em cont_em; /*@@assume repeated-or*/
Xcont_em : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_strong : start_strong content_strong end_strong;
Xcontent_strong : /* empty */
X | content_strong cont_strong; /*@@assume repeated-or*/
Xcont_strong : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_code : start_code content_code end_code;
Xcontent_code : /* empty */
X | content_code cont_code; /*@@assume repeated-or*/
Xcont_code : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_samp : start_samp content_samp end_samp;
Xcontent_samp : /* empty */
X | content_samp cont_samp; /*@@assume repeated-or*/
Xcont_samp : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_kbd : start_kbd content_kbd end_kbd;
Xcontent_kbd : /* empty */
X | content_kbd cont_kbd; /*@@assume repeated-or*/
Xcont_kbd : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_var : start_var content_var end_var;
Xcontent_var : /* empty */
X | content_var cont_var; /*@@assume repeated-or*/
Xcont_var : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_cite : start_cite content_cite end_cite;
Xcontent_cite : /* empty */
X | content_cite cont_cite; /*@@assume repeated-or*/
Xcont_cite : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_tt : start_tt content_tt end_tt;
Xcontent_tt : /* empty */
X | content_tt cont_tt; /*@@assume repeated-or*/
Xcont_tt : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_b : start_b content_b end_b;
Xcontent_b : /* empty */
X | content_b cont_b; /*@@assume repeated-or*/
Xcont_b : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_i : start_i content_i end_i;
Xcontent_i : /* empty */
X | content_i cont_i; /*@@assume repeated-or*/
Xcont_i : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_h2 : start_h2 content_h2 end_h2;
Xcontent_h2 : /* empty */
X | content_h2 cont_h2; /*@@assume repeated-or*/
Xcont_h2 : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_h3 : start_h3 content_h3 end_h3;
Xcontent_h3 : /* empty */
X | content_h3 cont_h3; /*@@assume repeated-or*/
Xcont_h3 : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_h4 : start_h4 content_h4 end_h4;
Xcontent_h4 : /* empty */
X | content_h4 cont_h4; /*@@assume repeated-or*/
Xcont_h4 : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_h5 : start_h5 content_h5 end_h5;
Xcontent_h5 : /* empty */
X | content_h5 cont_h5; /*@@assume repeated-or*/
Xcont_h5 : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_h6 : start_h6 content_h6 end_h6;
Xcontent_h6 : /* empty */
X | content_h6 cont_h6; /*@@assume repeated-or*/
Xcont_h6 : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_p : start_p content_p end_p;
Xstart_p : START_p TAGC
X ;
Xend_p : END_p
X | /* omitted end tag */
X ;
X
Xcontent_p : /* empty */
X | content_p cont_p; /*@@assume repeated-or*/
Xcont_p : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_ul : start_ul content_ul end_ul;
Xattrs_ul :
X | attrs_ul attr_ul_compact
X ;
X
Xattr_ul_compact : ANAME_compact LITERAL /*@# check: COMPACT*/
X | ANAME_compact VNAME_compact
X | VNAME_compact
X ;
Xstart_ul : START_ul attrs_ul TAGC
X ;
Xend_ul : END_ul
X ;
X
Xcontent_ul : /* empty */
X | content_ul cont_ul; /*@@assume repeated-or*/
Xcont_ul : elt_li
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_li : start_li content_li end_li;
Xstart_li : START_li TAGC
X ;
Xend_li : END_li
X | /* omitted end tag */
X ;
X
Xcontent_li : /* empty */
X | content_li cont_li; /*@@assume repeated-or*/
Xcont_li : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X | elt_p
X | elt_ul
X | elt_ol
X | elt_dir
X | elt_menu
X | elt_dl
X | elt_pre
X | elt_xmp
X | elt_listing
X | elt_blockquote
X | elt_form
X | elt_isindex
X ;
X
Xelt_ol : start_ol content_ol end_ol;
Xattrs_ol :
X | attrs_ol attr_ol_compact
X ;
X
Xattr_ol_compact : ANAME_compact LITERAL /*@# check: COMPACT*/
X | ANAME_compact VNAME_compact
X | VNAME_compact
X ;
Xstart_ol : START_ol attrs_ol TAGC
X ;
Xend_ol : END_ol
X ;
X
Xcontent_ol : /* empty */
X | content_ol cont_ol; /*@@assume repeated-or*/
Xcont_ol : elt_li
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_dir : start_dir content_dir end_dir;
Xattrs_dir :
X | attrs_dir attr_dir_compact
X ;
X
Xattr_dir_compact : ANAME_compact LITERAL /*@# check: COMPACT*/
X | ANAME_compact VNAME_compact
X | VNAME_compact
X ;
Xstart_dir : START_dir attrs_dir TAGC
X ;
Xend_dir : END_dir
X ;
X
Xcontent_dir : /* empty */
X | content_dir cont_dir; /*@@assume repeated-or*/
Xcont_dir : elt_li_dir_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_li_dir_ : start_li content_li_dir_ end_li;
Xcontent_li_dir_ : /* empty */
X | content_li_dir_ cont_li_dir_; /*@@assume repeated-or*/
Xcont_li_dir_ : data
X | elt_a_dir_
X | elt_img_dir_
X | elt_br_dir_
X | elt_em_dir_
X | elt_strong_dir_
X | elt_code_dir_
X | elt_samp_dir_
X | elt_kbd_dir_
X | elt_var_dir_
X | elt_cite_dir_
X | elt_tt_dir_
X | elt_b_dir_
X | elt_i_dir_
X ;
X
Xelt_a_dir_ : start_a content_a_dir_ end_a;
Xcontent_a_dir_ : /* empty */
X | content_a_dir_ cont_a_dir_; /*@@assume repeated-or*/
Xcont_a_dir_ : elt_h1_a__dir_
X | elt_h2_a__dir_
X | elt_h3_a__dir_
X | elt_h4_a__dir_
X | elt_h5_a__dir_
X | elt_h6_a__dir_
X | data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_h1_a__dir_ : start_h1 content_h1_a__dir_ end_h1;
Xcontent_h1_a__dir_ : /* empty */
X | content_h1_a__dir_ cont_h1_a__dir_; /*@@assume repeated-or*/
Xcont_h1_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_img_a__dir_ : start_img
X
Xelt_br_a__dir_ : start_br
X
Xelt_em_a__dir_ : start_em content_em_a__dir_ end_em;
Xcontent_em_a__dir_ : /* empty */
X | content_em_a__dir_ cont_em_a__dir_; /*@@assume repeated-or*/
Xcont_em_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_strong_a__dir_ : start_strong content_strong_a__dir_ end_strong;
Xcontent_strong_a__dir_ : /* empty */
X | content_strong_a__dir_ cont_strong_a__dir_; /*@@assume repeated-or*/
Xcont_strong_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_code_a__dir_ : start_code content_code_a__dir_ end_code;
Xcontent_code_a__dir_ : /* empty */
X | content_code_a__dir_ cont_code_a__dir_; /*@@assume repeated-or*/
Xcont_code_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_samp_a__dir_ : start_samp content_samp_a__dir_ end_samp;
Xcontent_samp_a__dir_ : /* empty */
X | content_samp_a__dir_ cont_samp_a__dir_; /*@@assume repeated-or*/
Xcont_samp_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_kbd_a__dir_ : start_kbd content_kbd_a__dir_ end_kbd;
Xcontent_kbd_a__dir_ : /* empty */
X | content_kbd_a__dir_ cont_kbd_a__dir_; /*@@assume repeated-or*/
Xcont_kbd_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_var_a__dir_ : start_var content_var_a__dir_ end_var;
Xcontent_var_a__dir_ : /* empty */
X | content_var_a__dir_ cont_var_a__dir_; /*@@assume repeated-or*/
Xcont_var_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_cite_a__dir_ : start_cite content_cite_a__dir_ end_cite;
Xcontent_cite_a__dir_ : /* empty */
X | content_cite_a__dir_ cont_cite_a__dir_; /*@@assume repeated-or*/
Xcont_cite_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_tt_a__dir_ : start_tt content_tt_a__dir_ end_tt;
Xcontent_tt_a__dir_ : /* empty */
X | content_tt_a__dir_ cont_tt_a__dir_; /*@@assume repeated-or*/
Xcont_tt_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_b_a__dir_ : start_b content_b_a__dir_ end_b;
Xcontent_b_a__dir_ : /* empty */
X | content_b_a__dir_ cont_b_a__dir_; /*@@assume repeated-or*/
Xcont_b_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_i_a__dir_ : start_i content_i_a__dir_ end_i;
Xcontent_i_a__dir_ : /* empty */
X | content_i_a__dir_ cont_i_a__dir_; /*@@assume repeated-or*/
Xcont_i_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_h2_a__dir_ : start_h2 content_h2_a__dir_ end_h2;
Xcontent_h2_a__dir_ : /* empty */
X | content_h2_a__dir_ cont_h2_a__dir_; /*@@assume repeated-or*/
Xcont_h2_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_h3_a__dir_ : start_h3 content_h3_a__dir_ end_h3;
Xcontent_h3_a__dir_ : /* empty */
X | content_h3_a__dir_ cont_h3_a__dir_; /*@@assume repeated-or*/
Xcont_h3_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_h4_a__dir_ : start_h4 content_h4_a__dir_ end_h4;
Xcontent_h4_a__dir_ : /* empty */
X | content_h4_a__dir_ cont_h4_a__dir_; /*@@assume repeated-or*/
Xcont_h4_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_h5_a__dir_ : start_h5 content_h5_a__dir_ end_h5;
Xcontent_h5_a__dir_ : /* empty */
X | content_h5_a__dir_ cont_h5_a__dir_; /*@@assume repeated-or*/
Xcont_h5_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_h6_a__dir_ : start_h6 content_h6_a__dir_ end_h6;
Xcontent_h6_a__dir_ : /* empty */
X | content_h6_a__dir_ cont_h6_a__dir_; /*@@assume repeated-or*/
Xcont_h6_a__dir_ : data
X | elt_img_a__dir_
X | elt_br_a__dir_
X | elt_em_a__dir_
X | elt_strong_a__dir_
X | elt_code_a__dir_
X | elt_samp_a__dir_
X | elt_kbd_a__dir_
X | elt_var_a__dir_
X | elt_cite_a__dir_
X | elt_tt_a__dir_
X | elt_b_a__dir_
X | elt_i_a__dir_
X ;
X
Xelt_img_dir_ : start_img
X
Xelt_br_dir_ : start_br
X
Xelt_em_dir_ : start_em content_em_dir_ end_em;
Xcontent_em_dir_ : /* empty */
X | content_em_dir_ cont_em_dir_; /*@@assume repeated-or*/
Xcont_em_dir_ : data
X | elt_a_dir_
X | elt_img_dir_
X | elt_br_dir_
X | elt_em_dir_
X | elt_strong_dir_
X | elt_code_dir_
X | elt_samp_dir_
X | elt_kbd_dir_
X | elt_var_dir_
X | elt_cite_dir_
X | elt_tt_dir_
X | elt_b_dir_
X | elt_i_dir_
X ;
X
Xelt_strong_dir_ : start_strong content_strong_dir_ end_strong;
Xcontent_strong_dir_ : /* empty */
X | content_strong_dir_ cont_strong_dir_; /*@@assume repeated-or*/
Xcont_strong_dir_ : data
X | elt_a_dir_
X | elt_img_dir_
X | elt_br_dir_
X | elt_em_dir_
X | elt_strong_dir_
X | elt_code_dir_
X | elt_samp_dir_
X | elt_kbd_dir_
X | elt_var_dir_
X | elt_cite_dir_
X | elt_tt_dir_
X | elt_b_dir_
X | elt_i_dir_
X ;
X
Xelt_code_dir_ : start_code content_code_dir_ end_code;
Xcontent_code_dir_ : /* empty */
X | content_code_dir_ cont_code_dir_; /*@@assume repeated-or*/
Xcont_code_dir_ : data
X | elt_a_dir_
X | elt_img_dir_
X | elt_br_dir_
X | elt_em_dir_
X | elt_strong_dir_
X | elt_code_dir_
X | elt_samp_dir_
X | elt_kbd_dir_
X | elt_var_dir_
X | elt_cite_dir_
X | elt_tt_dir_
X | elt_b_dir_
X | elt_i_dir_
X ;
X
Xelt_samp_dir_ : start_samp content_samp_dir_ end_samp;
Xcontent_samp_dir_ : /* empty */
X | content_samp_dir_ cont_samp_dir_; /*@@assume repeated-or*/
Xcont_samp_dir_ : data
X | elt_a_dir_
X | elt_img_dir_
X | elt_br_dir_
X | elt_em_dir_
X | elt_strong_dir_
X | elt_code_dir_
X | elt_samp_dir_
X | elt_kbd_dir_
X | elt_var_dir_
X | elt_cite_dir_
X | elt_tt_dir_
X | elt_b_dir_
X | elt_i_dir_
X ;
X
Xelt_kbd_dir_ : start_kbd content_kbd_dir_ end_kbd;
Xcontent_kbd_dir_ : /* empty */
X | content_kbd_dir_ cont_kbd_dir_; /*@@assume repeated-or*/
Xcont_kbd_dir_ : data
X | elt_a_dir_
X | elt_img_dir_
X | elt_br_dir_
X | elt_em_dir_
X | elt_strong_dir_
X | elt_code_dir_
X | elt_samp_dir_
X | elt_kbd_dir_
X | elt_var_dir_
X | elt_cite_dir_
X | elt_tt_dir_
X | elt_b_dir_
X | elt_i_dir_
X ;
X
Xelt_var_dir_ : start_var content_var_dir_ end_var;
Xcontent_var_dir_ : /* empty */
X | content_var_dir_ cont_var_dir_; /*@@assume repeated-or*/
Xcont_var_dir_ : data
X | elt_a_dir_
X | elt_img_dir_
X | elt_br_dir_
X | elt_em_dir_
X | elt_strong_dir_
X | elt_code_dir_
X | elt_samp_dir_
X | elt_kbd_dir_
X | elt_var_dir_
X | elt_cite_dir_
X | elt_tt_dir_
X | elt_b_dir_
X | elt_i_dir_
X ;
X
Xelt_cite_dir_ : start_cite content_cite_dir_ end_cite;
Xcontent_cite_dir_ : /* empty */
X | content_cite_dir_ cont_cite_dir_; /*@@assume repeated-or*/
Xcont_cite_dir_ : data
X | elt_a_dir_
X | elt_img_dir_
X | elt_br_dir_
X | elt_em_dir_
X | elt_strong_dir_
X | elt_code_dir_
X | elt_samp_dir_
X | elt_kbd_dir_
X | elt_var_dir_
X | elt_cite_dir_
X | elt_tt_dir_
X | elt_b_dir_
X | elt_i_dir_
X ;
X
Xelt_tt_dir_ : start_tt content_tt_dir_ end_tt;
Xcontent_tt_dir_ : /* empty */
X | content_tt_dir_ cont_tt_dir_; /*@@assume repeated-or*/
Xcont_tt_dir_ : data
X | elt_a_dir_
X | elt_img_dir_
X | elt_br_dir_
X | elt_em_dir_
X | elt_strong_dir_
X | elt_code_dir_
X | elt_samp_dir_
X | elt_kbd_dir_
X | elt_var_dir_
X | elt_cite_dir_
X | elt_tt_dir_
X | elt_b_dir_
X | elt_i_dir_
X ;
X
Xelt_b_dir_ : start_b content_b_dir_ end_b;
Xcontent_b_dir_ : /* empty */
X | content_b_dir_ cont_b_dir_; /*@@assume repeated-or*/
Xcont_b_dir_ : data
X | elt_a_dir_
X | elt_img_dir_
X | elt_br_dir_
X | elt_em_dir_
X | elt_strong_dir_
X | elt_code_dir_
X | elt_samp_dir_
X | elt_kbd_dir_
X | elt_var_dir_
X | elt_cite_dir_
X | elt_tt_dir_
X | elt_b_dir_
X | elt_i_dir_
X ;
X
Xelt_i_dir_ : start_i content_i_dir_ end_i;
Xcontent_i_dir_ : /* empty */
X | content_i_dir_ cont_i_dir_; /*@@assume repeated-or*/
Xcont_i_dir_ : data
X | elt_a_dir_
X | elt_img_dir_
X | elt_br_dir_
X | elt_em_dir_
X | elt_strong_dir_
X | elt_code_dir_
X | elt_samp_dir_
X | elt_kbd_dir_
X | elt_var_dir_
X | elt_cite_dir_
X | elt_tt_dir_
X | elt_b_dir_
X | elt_i_dir_
X ;
X
Xelt_menu : start_menu content_menu end_menu;
Xattrs_menu :
X | attrs_menu attr_menu_compact
X ;
X
Xattr_menu_compact : ANAME_compact LITERAL /*@# check: COMPACT*/
X | ANAME_compact VNAME_compact
X | VNAME_compact
X ;
Xstart_menu : START_menu attrs_menu TAGC
X ;
Xend_menu : END_menu
X ;
X
Xcontent_menu : /* empty */
X | content_menu cont_menu; /*@@assume repeated-or*/
Xcont_menu : elt_li_menu_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_li_menu_ : start_li content_li_menu_ end_li;
Xcontent_li_menu_ : /* empty */
X | content_li_menu_ cont_li_menu_; /*@@assume repeated-or*/
Xcont_li_menu_ : data
X | elt_a_menu_
X | elt_img_menu_
X | elt_br_menu_
X | elt_em_menu_
X | elt_strong_menu_
X | elt_code_menu_
X | elt_samp_menu_
X | elt_kbd_menu_
X | elt_var_menu_
X | elt_cite_menu_
X | elt_tt_menu_
X | elt_b_menu_
X | elt_i_menu_
X ;
X
Xelt_a_menu_ : start_a content_a_menu_ end_a;
Xcontent_a_menu_ : /* empty */
X | content_a_menu_ cont_a_menu_; /*@@assume repeated-or*/
Xcont_a_menu_ : elt_h1_a__menu_
X | elt_h2_a__menu_
X | elt_h3_a__menu_
X | elt_h4_a__menu_
X | elt_h5_a__menu_
X | elt_h6_a__menu_
X | data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_h1_a__menu_ : start_h1 content_h1_a__menu_ end_h1;
Xcontent_h1_a__menu_ : /* empty */
X | content_h1_a__menu_ cont_h1_a__menu_; /*@@assume repeated-or*/
Xcont_h1_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_img_a__menu_ : start_img
X
Xelt_br_a__menu_ : start_br
X
Xelt_em_a__menu_ : start_em content_em_a__menu_ end_em;
Xcontent_em_a__menu_ : /* empty */
X | content_em_a__menu_ cont_em_a__menu_; /*@@assume repeated-or*/
Xcont_em_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_strong_a__menu_ : start_strong content_strong_a__menu_ end_strong;
Xcontent_strong_a__menu_ : /* empty */
X | content_strong_a__menu_ cont_strong_a__menu_; /*@@assume repeated-or*/
Xcont_strong_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_code_a__menu_ : start_code content_code_a__menu_ end_code;
Xcontent_code_a__menu_ : /* empty */
X | content_code_a__menu_ cont_code_a__menu_; /*@@assume repeated-or*/
Xcont_code_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_samp_a__menu_ : start_samp content_samp_a__menu_ end_samp;
Xcontent_samp_a__menu_ : /* empty */
X | content_samp_a__menu_ cont_samp_a__menu_; /*@@assume repeated-or*/
Xcont_samp_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_kbd_a__menu_ : start_kbd content_kbd_a__menu_ end_kbd;
Xcontent_kbd_a__menu_ : /* empty */
X | content_kbd_a__menu_ cont_kbd_a__menu_; /*@@assume repeated-or*/
Xcont_kbd_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_var_a__menu_ : start_var content_var_a__menu_ end_var;
Xcontent_var_a__menu_ : /* empty */
X | content_var_a__menu_ cont_var_a__menu_; /*@@assume repeated-or*/
Xcont_var_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_cite_a__menu_ : start_cite content_cite_a__menu_ end_cite;
Xcontent_cite_a__menu_ : /* empty */
X | content_cite_a__menu_ cont_cite_a__menu_; /*@@assume repeated-or*/
Xcont_cite_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_tt_a__menu_ : start_tt content_tt_a__menu_ end_tt;
Xcontent_tt_a__menu_ : /* empty */
X | content_tt_a__menu_ cont_tt_a__menu_; /*@@assume repeated-or*/
Xcont_tt_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_b_a__menu_ : start_b content_b_a__menu_ end_b;
Xcontent_b_a__menu_ : /* empty */
X | content_b_a__menu_ cont_b_a__menu_; /*@@assume repeated-or*/
Xcont_b_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_i_a__menu_ : start_i content_i_a__menu_ end_i;
Xcontent_i_a__menu_ : /* empty */
X | content_i_a__menu_ cont_i_a__menu_; /*@@assume repeated-or*/
Xcont_i_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_h2_a__menu_ : start_h2 content_h2_a__menu_ end_h2;
Xcontent_h2_a__menu_ : /* empty */
X | content_h2_a__menu_ cont_h2_a__menu_; /*@@assume repeated-or*/
Xcont_h2_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_h3_a__menu_ : start_h3 content_h3_a__menu_ end_h3;
Xcontent_h3_a__menu_ : /* empty */
X | content_h3_a__menu_ cont_h3_a__menu_; /*@@assume repeated-or*/
Xcont_h3_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_h4_a__menu_ : start_h4 content_h4_a__menu_ end_h4;
Xcontent_h4_a__menu_ : /* empty */
X | content_h4_a__menu_ cont_h4_a__menu_; /*@@assume repeated-or*/
Xcont_h4_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_h5_a__menu_ : start_h5 content_h5_a__menu_ end_h5;
Xcontent_h5_a__menu_ : /* empty */
X | content_h5_a__menu_ cont_h5_a__menu_; /*@@assume repeated-or*/
Xcont_h5_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_h6_a__menu_ : start_h6 content_h6_a__menu_ end_h6;
Xcontent_h6_a__menu_ : /* empty */
X | content_h6_a__menu_ cont_h6_a__menu_; /*@@assume repeated-or*/
Xcont_h6_a__menu_ : data
X | elt_img_a__menu_
X | elt_br_a__menu_
X | elt_em_a__menu_
X | elt_strong_a__menu_
X | elt_code_a__menu_
X | elt_samp_a__menu_
X | elt_kbd_a__menu_
X | elt_var_a__menu_
X | elt_cite_a__menu_
X | elt_tt_a__menu_
X | elt_b_a__menu_
X | elt_i_a__menu_
X ;
X
Xelt_img_menu_ : start_img
X
Xelt_br_menu_ : start_br
X
Xelt_em_menu_ : start_em content_em_menu_ end_em;
Xcontent_em_menu_ : /* empty */
X | content_em_menu_ cont_em_menu_; /*@@assume repeated-or*/
Xcont_em_menu_ : data
X | elt_a_menu_
X | elt_img_menu_
X | elt_br_menu_
X | elt_em_menu_
X | elt_strong_menu_
X | elt_code_menu_
X | elt_samp_menu_
X | elt_kbd_menu_
X | elt_var_menu_
X | elt_cite_menu_
X | elt_tt_menu_
X | elt_b_menu_
X | elt_i_menu_
X ;
X
Xelt_strong_menu_ : start_strong content_strong_menu_ end_strong;
Xcontent_strong_menu_ : /* empty */
X | content_strong_menu_ cont_strong_menu_; /*@@assume repeated-or*/
Xcont_strong_menu_ : data
X | elt_a_menu_
X | elt_img_menu_
X | elt_br_menu_
X | elt_em_menu_
X | elt_strong_menu_
X | elt_code_menu_
X | elt_samp_menu_
X | elt_kbd_menu_
X | elt_var_menu_
X | elt_cite_menu_
X | elt_tt_menu_
X | elt_b_menu_
X | elt_i_menu_
X ;
X
Xelt_code_menu_ : start_code content_code_menu_ end_code;
Xcontent_code_menu_ : /* empty */
X | content_code_menu_ cont_code_menu_; /*@@assume repeated-or*/
Xcont_code_menu_ : data
X | elt_a_menu_
X | elt_img_menu_
X | elt_br_menu_
X | elt_em_menu_
X | elt_strong_menu_
X | elt_code_menu_
X | elt_samp_menu_
X | elt_kbd_menu_
X | elt_var_menu_
X | elt_cite_menu_
X | elt_tt_menu_
X | elt_b_menu_
X | elt_i_menu_
X ;
X
Xelt_samp_menu_ : start_samp content_samp_menu_ end_samp;
Xcontent_samp_menu_ : /* empty */
X | content_samp_menu_ cont_samp_menu_; /*@@assume repeated-or*/
Xcont_samp_menu_ : data
X | elt_a_menu_
X | elt_img_menu_
X | elt_br_menu_
X | elt_em_menu_
X | elt_strong_menu_
X | elt_code_menu_
X | elt_samp_menu_
X | elt_kbd_menu_
X | elt_var_menu_
X | elt_cite_menu_
X | elt_tt_menu_
X | elt_b_menu_
X | elt_i_menu_
X ;
X
Xelt_kbd_menu_ : start_kbd content_kbd_menu_ end_kbd;
Xcontent_kbd_menu_ : /* empty */
X | content_kbd_menu_ cont_kbd_menu_; /*@@assume repeated-or*/
Xcont_kbd_menu_ : data
X | elt_a_menu_
X | elt_img_menu_
X | elt_br_menu_
X | elt_em_menu_
X | elt_strong_menu_
X | elt_code_menu_
X | elt_samp_menu_
X | elt_kbd_menu_
X | elt_var_menu_
X | elt_cite_menu_
X | elt_tt_menu_
X | elt_b_menu_
X | elt_i_menu_
X ;
X
Xelt_var_menu_ : start_var content_var_menu_ end_var;
Xcontent_var_menu_ : /* empty */
X | content_var_menu_ cont_var_menu_; /*@@assume repeated-or*/
Xcont_var_menu_ : data
X | elt_a_menu_
X | elt_img_menu_
X | elt_br_menu_
X | elt_em_menu_
X | elt_strong_menu_
X | elt_code_menu_
X | elt_samp_menu_
X | elt_kbd_menu_
X | elt_var_menu_
X | elt_cite_menu_
X | elt_tt_menu_
X | elt_b_menu_
X | elt_i_menu_
X ;
X
Xelt_cite_menu_ : start_cite content_cite_menu_ end_cite;
Xcontent_cite_menu_ : /* empty */
X | content_cite_menu_ cont_cite_menu_; /*@@assume repeated-or*/
Xcont_cite_menu_ : data
X | elt_a_menu_
X | elt_img_menu_
X | elt_br_menu_
X | elt_em_menu_
X | elt_strong_menu_
X | elt_code_menu_
X | elt_samp_menu_
X | elt_kbd_menu_
X | elt_var_menu_
X | elt_cite_menu_
X | elt_tt_menu_
X | elt_b_menu_
X | elt_i_menu_
X ;
X
Xelt_tt_menu_ : start_tt content_tt_menu_ end_tt;
Xcontent_tt_menu_ : /* empty */
X | content_tt_menu_ cont_tt_menu_; /*@@assume repeated-or*/
Xcont_tt_menu_ : data
X | elt_a_menu_
X | elt_img_menu_
X | elt_br_menu_
X | elt_em_menu_
X | elt_strong_menu_
X | elt_code_menu_
X | elt_samp_menu_
X | elt_kbd_menu_
X | elt_var_menu_
X | elt_cite_menu_
X | elt_tt_menu_
X | elt_b_menu_
X | elt_i_menu_
X ;
X
Xelt_b_menu_ : start_b content_b_menu_ end_b;
Xcontent_b_menu_ : /* empty */
X | content_b_menu_ cont_b_menu_; /*@@assume repeated-or*/
Xcont_b_menu_ : data
X | elt_a_menu_
X | elt_img_menu_
X | elt_br_menu_
X | elt_em_menu_
X | elt_strong_menu_
X | elt_code_menu_
X | elt_samp_menu_
X | elt_kbd_menu_
X | elt_var_menu_
X | elt_cite_menu_
X | elt_tt_menu_
X | elt_b_menu_
X | elt_i_menu_
X ;
X
Xelt_i_menu_ : start_i content_i_menu_ end_i;
Xcontent_i_menu_ : /* empty */
X | content_i_menu_ cont_i_menu_; /*@@assume repeated-or*/
Xcont_i_menu_ : data
X | elt_a_menu_
X | elt_img_menu_
X | elt_br_menu_
X | elt_em_menu_
X | elt_strong_menu_
X | elt_code_menu_
X | elt_samp_menu_
X | elt_kbd_menu_
X | elt_var_menu_
X | elt_cite_menu_
X | elt_tt_menu_
X | elt_b_menu_
X | elt_i_menu_
X ;
X
Xelt_dl : start_dl content_dl end_dl;
Xattrs_dl :
X | attrs_dl attr_dl_compact
X ;
X
Xattr_dl_compact : ANAME_compact LITERAL /*@# check: COMPACT*/
X | ANAME_compact VNAME_compact
X | VNAME_compact
X ;
Xstart_dl : START_dl attrs_dl TAGC
X ;
Xend_dl : END_dl
X ;
X
Xcontent_dl : /* empty */
X | content_dl cont_dl; /*@@assume repeated-or*/
Xcont_dl : elt_dt
X | elt_dd
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_dt : start_dt content_dt end_dt;
Xstart_dt : START_dt TAGC
X ;
Xend_dt : END_dt
X | /* omitted end tag */
X ;
X
Xcontent_dt : /* empty */
X | content_dt cont_dt; /*@@assume repeated-or*/
Xcont_dt : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X ;
X
Xelt_dd : start_dd content_dd end_dd;
Xstart_dd : START_dd TAGC
X ;
Xend_dd : END_dd
X | /* omitted end tag */
X ;
X
Xcontent_dd : /* empty */
X | content_dd cont_dd; /*@@assume repeated-or*/
Xcont_dd : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X | elt_p
X | elt_ul
X | elt_ol
X | elt_dir
X | elt_menu
X | elt_dl
X | elt_pre
X | elt_xmp
X | elt_listing
X | elt_blockquote
X | elt_form
X | elt_isindex
X ;
X
Xelt_pre : start_pre content_pre end_pre;
Xattrs_pre :
X | attrs_pre attr_pre_width
X ;
X
Xattr_pre_width : ANAME_width attrval_number;
Xstart_pre : START_pre attrs_pre TAGC
X ;
Xend_pre : END_pre
X ;
X
Xcontent_pre : /* empty */
X | content_pre cont_pre; /*@@assume repeated-or*/
Xcont_pre : data
X | elt_a
X | elt_hr
X | elt_br
X | elt_tt
X | elt_b
X | elt_i
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X ;
X
Xelt_hr : start_hr
Xstart_hr : START_hr TAGC
X ;
X
X
Xelt_xmp : start_xmp content_xmp end_xmp;
Xstart_xmp : START_xmp TAGC
X ;
Xend_xmp : END_xmp
X ;
X
Xcontent_xmp : /* empty */
X | content_xmp cont_xmp; /*@@assume repeated-or*/
Xcont_xmp : data
X ;
X
Xelt_listing : start_listing content_listing end_listing;
Xstart_listing : START_listing TAGC
X ;
Xend_listing : END_listing
X ;
X
Xcontent_listing : /* empty */
X | content_listing cont_listing; /*@@assume repeated-or*/
Xcont_listing : data
X ;
X
Xelt_blockquote : start_blockquote content_blockquote end_blockquote;
Xstart_blockquote : START_blockquote TAGC
X ;
Xend_blockquote : END_blockquote
X ;
X
Xcontent_blockquote : /* empty */
X | content_blockquote cont_blockquote; /*@@assume repeated-or*/
Xcont_blockquote : elt_h1
X | elt_h2
X | elt_h3
X | elt_h4
X | elt_h5
X | elt_h6
X | data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X | elt_p
X | elt_ul
X | elt_ol
X | elt_dir
X | elt_menu
X | elt_dl
X | elt_pre
X | elt_xmp
X | elt_listing
X | elt_blockquote
X | elt_form
X | elt_isindex
X | elt_hr
X | elt_address
X ;
X
Xelt_form : start_form content_form end_form;
Xattrs_form :
X | attrs_form attr_form_action
X | attrs_form attr_form_enctype
X | attrs_form attr_form_method
X ;
X
Xattr_form_action : ANAME_action attrval_cdata;
Xattr_form_enctype : ANAME_enctype attrval_cdata;
Xattr_form_method : ANAME_method LITERAL /*@# check: GET POST*/
X | ANAME_method VNAME_get
X | VNAME_get
X | ANAME_method VNAME_post
X | VNAME_post
X ;
Xstart_form : START_form attrs_form TAGC
X ;
Xend_form : END_form
X ;
X
Xcontent_form : /* empty */
X | content_form cont_form; /*@@assume repeated-or*/
Xcont_form : elt_h1_form_
X | elt_h2_form_
X | elt_h3_form_
X | elt_h4_form_
X | elt_h5_form_
X | elt_h6_form_
X | data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_p_form_
X | elt_ul_form_
X | elt_ol_form_
X | elt_dir_form_
X | elt_menu_form_
X | elt_dl_form_
X | elt_pre_form_
X | elt_xmp_form_
X | elt_listing_form_
X | elt_blockquote_form_
X | elt_isindex_form_
X | elt_hr_form_
X | elt_address_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_h1_form_ : start_h1 content_h1_form_ end_h1;
Xcontent_h1_form_ : /* empty */
X | content_h1_form_ cont_h1_form_; /*@@assume repeated-or*/
Xcont_h1_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_a_form_ : start_a content_a_form_ end_a;
Xcontent_a_form_ : /* empty */
X | content_a_form_ cont_a_form_; /*@@assume repeated-or*/
Xcont_a_form_ : elt_h1_a__form_
X | elt_h2_a__form_
X | elt_h3_a__form_
X | elt_h4_a__form_
X | elt_h5_a__form_
X | elt_h6_a__form_
X | data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_h1_a__form_ : start_h1 content_h1_a__form_ end_h1;
Xcontent_h1_a__form_ : /* empty */
X | content_h1_a__form_ cont_h1_a__form_; /*@@assume repeated-or*/
Xcont_h1_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_img_a__form_ : start_img
X
Xelt_br_a__form_ : start_br
X
Xelt_em_a__form_ : start_em content_em_a__form_ end_em;
Xcontent_em_a__form_ : /* empty */
X | content_em_a__form_ cont_em_a__form_; /*@@assume repeated-or*/
Xcont_em_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_strong_a__form_ : start_strong content_strong_a__form_ end_strong;
Xcontent_strong_a__form_ : /* empty */
X | content_strong_a__form_ cont_strong_a__form_; /*@@assume repeated-or*/
Xcont_strong_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_code_a__form_ : start_code content_code_a__form_ end_code;
Xcontent_code_a__form_ : /* empty */
X | content_code_a__form_ cont_code_a__form_; /*@@assume repeated-or*/
Xcont_code_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_samp_a__form_ : start_samp content_samp_a__form_ end_samp;
Xcontent_samp_a__form_ : /* empty */
X | content_samp_a__form_ cont_samp_a__form_; /*@@assume repeated-or*/
Xcont_samp_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_kbd_a__form_ : start_kbd content_kbd_a__form_ end_kbd;
Xcontent_kbd_a__form_ : /* empty */
X | content_kbd_a__form_ cont_kbd_a__form_; /*@@assume repeated-or*/
Xcont_kbd_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_var_a__form_ : start_var content_var_a__form_ end_var;
Xcontent_var_a__form_ : /* empty */
X | content_var_a__form_ cont_var_a__form_; /*@@assume repeated-or*/
Xcont_var_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_cite_a__form_ : start_cite content_cite_a__form_ end_cite;
Xcontent_cite_a__form_ : /* empty */
X | content_cite_a__form_ cont_cite_a__form_; /*@@assume repeated-or*/
Xcont_cite_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_tt_a__form_ : start_tt content_tt_a__form_ end_tt;
Xcontent_tt_a__form_ : /* empty */
X | content_tt_a__form_ cont_tt_a__form_; /*@@assume repeated-or*/
Xcont_tt_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_b_a__form_ : start_b content_b_a__form_ end_b;
Xcontent_b_a__form_ : /* empty */
X | content_b_a__form_ cont_b_a__form_; /*@@assume repeated-or*/
Xcont_b_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_i_a__form_ : start_i content_i_a__form_ end_i;
Xcontent_i_a__form_ : /* empty */
X | content_i_a__form_ cont_i_a__form_; /*@@assume repeated-or*/
Xcont_i_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_input_a__form_ : start_input
Xattrs_input :
X | attrs_input attr_input_align
X | attrs_input attr_input_checked
X | attrs_input attr_input_maxlength
X | attrs_input attr_input_name
X | attrs_input attr_input_size
X | attrs_input attr_input_src
X | attrs_input attr_input_type
X | attrs_input attr_input_value
X ;
X
Xattr_input_align : ANAME_align LITERAL /*@# check: top middle bottom*/
X | ANAME_align VNAME_top
X | VNAME_top
X | ANAME_align VNAME_middle
X | VNAME_middle
X | ANAME_align VNAME_bottom
X | VNAME_bottom
X ;
Xattr_input_checked : ANAME_checked LITERAL /*@# check: CHECKED*/
X | ANAME_checked VNAME_checked
X | VNAME_checked
X ;
Xattr_input_maxlength : ANAME_maxlength attrval_number;
Xattr_input_name : ANAME_name attrval_cdata;
Xattr_input_size : ANAME_size attrval_cdata;
Xattr_input_src : ANAME_src attrval_cdata;
Xattr_input_type : ANAME_type LITERAL /*@# check: TEXT PASSWORD CHECKBOX RADIO SUBMIT RESET IMAGE HIDDEN*/
X | ANAME_type VNAME_text
X | VNAME_text
X | ANAME_type VNAME_password
X | VNAME_password
X | ANAME_type VNAME_checkbox
X | VNAME_checkbox
X | ANAME_type VNAME_radio
X | VNAME_radio
X | ANAME_type VNAME_submit
X | VNAME_submit
X | ANAME_type VNAME_reset
X | VNAME_reset
X | ANAME_type VNAME_image
X | VNAME_image
X | ANAME_type VNAME_hidden
X | VNAME_hidden
X ;
Xattr_input_value : ANAME_value attrval_cdata;
Xstart_input : START_input attrs_input TAGC
X ;
X
X
Xelt_select_a__form_ : start_select content_select_a__form_ end_select;
Xattrs_select :
X | attrs_select attr_select_multiple
X | attrs_select attr_select_name /* REQUIRED */
X | attrs_select attr_select_size
X ;
X
Xattr_select_multiple : ANAME_multiple LITERAL /*@# check: MULTIPLE*/
X | ANAME_multiple VNAME_multiple
X | VNAME_multiple
X ;
Xattr_select_name : ANAME_name attrval_cdata;
Xattr_select_size : ANAME_size attrval_number;
Xstart_select : START_select attrs_select TAGC
X ;
Xend_select : END_select
X ;
X
Xcontent_select_a__form_ : /* empty */
X | content_select_a__form_ cont_select_a__form_; /*@@assume repeated-or*/
Xcont_select_a__form_ : elt_option_select__a__form_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_option_select__a__form_ : start_option content_option_select__a__form_ end_option;
Xattrs_option :
X | attrs_option attr_option_selected
X | attrs_option attr_option_value
X ;
X
Xattr_option_selected : ANAME_selected LITERAL /*@# check: SELECTED*/
X | ANAME_selected VNAME_selected
X | VNAME_selected
X ;
Xattr_option_value : ANAME_value attrval_cdata;
Xstart_option : START_option attrs_option TAGC
X ;
Xend_option : END_option
X | /* omitted end tag */
X ;
X
Xcontent_option_select__a__form_ : /* empty */
X | content_option_select__a__form_ cont_option_select__a__form_; /*@@assume repeated-or*/
Xcont_option_select__a__form_ : data
X ;
X
Xelt_textarea_a__form_ : start_textarea content_textarea_a__form_ end_textarea;
Xattrs_textarea :
X | attrs_textarea attr_textarea_cols /* REQUIRED */
X | attrs_textarea attr_textarea_name /* REQUIRED */
X | attrs_textarea attr_textarea_rows /* REQUIRED */
X ;
X
Xattr_textarea_cols : ANAME_cols attrval_number;
Xattr_textarea_name : ANAME_name attrval_cdata;
Xattr_textarea_rows : ANAME_rows attrval_number;
Xstart_textarea : START_textarea attrs_textarea TAGC
X ;
Xend_textarea : END_textarea
X ;
X
Xcontent_textarea_a__form_ : /* empty */
X | content_textarea_a__form_ cont_textarea_a__form_; /*@@assume repeated-or*/
Xcont_textarea_a__form_ : data
X ;
X
Xelt_h2_a__form_ : start_h2 content_h2_a__form_ end_h2;
Xcontent_h2_a__form_ : /* empty */
X | content_h2_a__form_ cont_h2_a__form_; /*@@assume repeated-or*/
Xcont_h2_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_h3_a__form_ : start_h3 content_h3_a__form_ end_h3;
Xcontent_h3_a__form_ : /* empty */
X | content_h3_a__form_ cont_h3_a__form_; /*@@assume repeated-or*/
Xcont_h3_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_h4_a__form_ : start_h4 content_h4_a__form_ end_h4;
Xcontent_h4_a__form_ : /* empty */
X | content_h4_a__form_ cont_h4_a__form_; /*@@assume repeated-or*/
Xcont_h4_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_h5_a__form_ : start_h5 content_h5_a__form_ end_h5;
Xcontent_h5_a__form_ : /* empty */
X | content_h5_a__form_ cont_h5_a__form_; /*@@assume repeated-or*/
Xcont_h5_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_h6_a__form_ : start_h6 content_h6_a__form_ end_h6;
Xcontent_h6_a__form_ : /* empty */
X | content_h6_a__form_ cont_h6_a__form_; /*@@assume repeated-or*/
Xcont_h6_a__form_ : data
X | elt_img_a__form_
X | elt_br_a__form_
X | elt_em_a__form_
X | elt_strong_a__form_
X | elt_code_a__form_
X | elt_samp_a__form_
X | elt_kbd_a__form_
X | elt_var_a__form_
X | elt_cite_a__form_
X | elt_tt_a__form_
X | elt_b_a__form_
X | elt_i_a__form_
X | elt_input_a__form_
X | elt_select_a__form_
X | elt_textarea_a__form_
X ;
X
Xelt_img_form_ : start_img
X
Xelt_br_form_ : start_br
X
Xelt_em_form_ : start_em content_em_form_ end_em;
Xcontent_em_form_ : /* empty */
X | content_em_form_ cont_em_form_; /*@@assume repeated-or*/
Xcont_em_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_strong_form_ : start_strong content_strong_form_ end_strong;
Xcontent_strong_form_ : /* empty */
X | content_strong_form_ cont_strong_form_; /*@@assume repeated-or*/
Xcont_strong_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_code_form_ : start_code content_code_form_ end_code;
Xcontent_code_form_ : /* empty */
X | content_code_form_ cont_code_form_; /*@@assume repeated-or*/
Xcont_code_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_samp_form_ : start_samp content_samp_form_ end_samp;
Xcontent_samp_form_ : /* empty */
X | content_samp_form_ cont_samp_form_; /*@@assume repeated-or*/
Xcont_samp_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_kbd_form_ : start_kbd content_kbd_form_ end_kbd;
Xcontent_kbd_form_ : /* empty */
X | content_kbd_form_ cont_kbd_form_; /*@@assume repeated-or*/
Xcont_kbd_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_var_form_ : start_var content_var_form_ end_var;
Xcontent_var_form_ : /* empty */
X | content_var_form_ cont_var_form_; /*@@assume repeated-or*/
Xcont_var_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_cite_form_ : start_cite content_cite_form_ end_cite;
Xcontent_cite_form_ : /* empty */
X | content_cite_form_ cont_cite_form_; /*@@assume repeated-or*/
Xcont_cite_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_tt_form_ : start_tt content_tt_form_ end_tt;
Xcontent_tt_form_ : /* empty */
X | content_tt_form_ cont_tt_form_; /*@@assume repeated-or*/
Xcont_tt_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_b_form_ : start_b content_b_form_ end_b;
Xcontent_b_form_ : /* empty */
X | content_b_form_ cont_b_form_; /*@@assume repeated-or*/
Xcont_b_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_i_form_ : start_i content_i_form_ end_i;
Xcontent_i_form_ : /* empty */
X | content_i_form_ cont_i_form_; /*@@assume repeated-or*/
Xcont_i_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_input_form_ : start_input
X
Xelt_select_form_ : start_select content_select_form_ end_select;
Xcontent_select_form_ : /* empty */
X | content_select_form_ cont_select_form_; /*@@assume repeated-or*/
Xcont_select_form_ : elt_option_select__form_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_option_select__form_ : start_option content_option_select__form_ end_option;
Xcontent_option_select__form_ : /* empty */
X | content_option_select__form_ cont_option_select__form_; /*@@assume repeated-or*/
Xcont_option_select__form_ : data
X ;
X
Xelt_textarea_form_ : start_textarea content_textarea_form_ end_textarea;
Xcontent_textarea_form_ : /* empty */
X | content_textarea_form_ cont_textarea_form_; /*@@assume repeated-or*/
Xcont_textarea_form_ : data
X ;
X
Xelt_h2_form_ : start_h2 content_h2_form_ end_h2;
Xcontent_h2_form_ : /* empty */
X | content_h2_form_ cont_h2_form_; /*@@assume repeated-or*/
Xcont_h2_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_h3_form_ : start_h3 content_h3_form_ end_h3;
Xcontent_h3_form_ : /* empty */
X | content_h3_form_ cont_h3_form_; /*@@assume repeated-or*/
Xcont_h3_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_h4_form_ : start_h4 content_h4_form_ end_h4;
Xcontent_h4_form_ : /* empty */
X | content_h4_form_ cont_h4_form_; /*@@assume repeated-or*/
Xcont_h4_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_h5_form_ : start_h5 content_h5_form_ end_h5;
Xcontent_h5_form_ : /* empty */
X | content_h5_form_ cont_h5_form_; /*@@assume repeated-or*/
Xcont_h5_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_h6_form_ : start_h6 content_h6_form_ end_h6;
Xcontent_h6_form_ : /* empty */
X | content_h6_form_ cont_h6_form_; /*@@assume repeated-or*/
Xcont_h6_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_p_form_ : start_p content_p_form_ end_p;
Xcontent_p_form_ : /* empty */
X | content_p_form_ cont_p_form_; /*@@assume repeated-or*/
Xcont_p_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_ul_form_ : start_ul content_ul_form_ end_ul;
Xcontent_ul_form_ : /* empty */
X | content_ul_form_ cont_ul_form_; /*@@assume repeated-or*/
Xcont_ul_form_ : elt_li_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_li_form_ : start_li content_li_form_ end_li;
Xcontent_li_form_ : /* empty */
X | content_li_form_ cont_li_form_; /*@@assume repeated-or*/
Xcont_li_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_p_form_
X | elt_ul_form_
X | elt_ol_form_
X | elt_dir_form_
X | elt_menu_form_
X | elt_dl_form_
X | elt_pre_form_
X | elt_xmp_form_
X | elt_listing_form_
X | elt_blockquote_form_
X | elt_isindex_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_ol_form_ : start_ol content_ol_form_ end_ol;
Xcontent_ol_form_ : /* empty */
X | content_ol_form_ cont_ol_form_; /*@@assume repeated-or*/
Xcont_ol_form_ : elt_li_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_dir_form_ : start_dir content_dir_form_ end_dir;
Xcontent_dir_form_ : /* empty */
X | content_dir_form_ cont_dir_form_; /*@@assume repeated-or*/
Xcont_dir_form_ : elt_li_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_li_dir__form_ : start_li content_li_dir__form_ end_li;
Xcontent_li_dir__form_ : /* empty */
X | content_li_dir__form_ cont_li_dir__form_; /*@@assume repeated-or*/
Xcont_li_dir__form_ : data
X | elt_a_dir__form_
X | elt_img_dir__form_
X | elt_br_dir__form_
X | elt_em_dir__form_
X | elt_strong_dir__form_
X | elt_code_dir__form_
X | elt_samp_dir__form_
X | elt_kbd_dir__form_
X | elt_var_dir__form_
X | elt_cite_dir__form_
X | elt_tt_dir__form_
X | elt_b_dir__form_
X | elt_i_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X ;
X
Xelt_a_dir__form_ : start_a content_a_dir__form_ end_a;
Xcontent_a_dir__form_ : /* empty */
X | content_a_dir__form_ cont_a_dir__form_; /*@@assume repeated-or*/
Xcont_a_dir__form_ : elt_h1_a__dir__form_
X | elt_h2_a__dir__form_
X | elt_h3_a__dir__form_
X | elt_h4_a__dir__form_
X | elt_h5_a__dir__form_
X | elt_h6_a__dir__form_
X | data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_h1_a__dir__form_ : start_h1 content_h1_a__dir__form_ end_h1;
Xcontent_h1_a__dir__form_ : /* empty */
X | content_h1_a__dir__form_ cont_h1_a__dir__form_; /*@@assume repeated-or*/
Xcont_h1_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_img_a__dir__form_ : start_img
X
Xelt_br_a__dir__form_ : start_br
X
Xelt_em_a__dir__form_ : start_em content_em_a__dir__form_ end_em;
Xcontent_em_a__dir__form_ : /* empty */
X | content_em_a__dir__form_ cont_em_a__dir__form_; /*@@assume repeated-or*/
Xcont_em_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_strong_a__dir__form_ : start_strong content_strong_a__dir__form_ end_strong;
Xcontent_strong_a__dir__form_ : /* empty */
X | content_strong_a__dir__form_ cont_strong_a__dir__form_; /*@@assume repeated-or*/
Xcont_strong_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_code_a__dir__form_ : start_code content_code_a__dir__form_ end_code;
Xcontent_code_a__dir__form_ : /* empty */
X | content_code_a__dir__form_ cont_code_a__dir__form_; /*@@assume repeated-or*/
Xcont_code_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_samp_a__dir__form_ : start_samp content_samp_a__dir__form_ end_samp;
Xcontent_samp_a__dir__form_ : /* empty */
X | content_samp_a__dir__form_ cont_samp_a__dir__form_; /*@@assume repeated-or*/
Xcont_samp_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_kbd_a__dir__form_ : start_kbd content_kbd_a__dir__form_ end_kbd;
Xcontent_kbd_a__dir__form_ : /* empty */
X | content_kbd_a__dir__form_ cont_kbd_a__dir__form_; /*@@assume repeated-or*/
Xcont_kbd_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_var_a__dir__form_ : start_var content_var_a__dir__form_ end_var;
Xcontent_var_a__dir__form_ : /* empty */
X | content_var_a__dir__form_ cont_var_a__dir__form_; /*@@assume repeated-or*/
Xcont_var_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_cite_a__dir__form_ : start_cite content_cite_a__dir__form_ end_cite;
Xcontent_cite_a__dir__form_ : /* empty */
X | content_cite_a__dir__form_ cont_cite_a__dir__form_; /*@@assume repeated-or*/
Xcont_cite_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_tt_a__dir__form_ : start_tt content_tt_a__dir__form_ end_tt;
Xcontent_tt_a__dir__form_ : /* empty */
X | content_tt_a__dir__form_ cont_tt_a__dir__form_; /*@@assume repeated-or*/
Xcont_tt_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_b_a__dir__form_ : start_b content_b_a__dir__form_ end_b;
Xcontent_b_a__dir__form_ : /* empty */
X | content_b_a__dir__form_ cont_b_a__dir__form_; /*@@assume repeated-or*/
Xcont_b_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_i_a__dir__form_ : start_i content_i_a__dir__form_ end_i;
Xcontent_i_a__dir__form_ : /* empty */
X | content_i_a__dir__form_ cont_i_a__dir__form_; /*@@assume repeated-or*/
Xcont_i_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_input_a__dir__form_ : start_input
X
Xelt_select_a__dir__form_ : start_select content_select_a__dir__form_ end_select;
Xcontent_select_a__dir__form_ : /* empty */
X | content_select_a__dir__form_ cont_select_a__dir__form_; /*@@assume repeated-or*/
Xcont_select_a__dir__form_ : elt_option_select__a__dir__form_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_option_select__a__dir__form_ : start_option content_option_select__a__dir__form_ end_option;
Xcontent_option_select__a__dir__form_ : /* empty */
X | content_option_select__a__dir__form_ cont_option_select__a__dir__form_; /*@@assume repeated-or*/
Xcont_option_select__a__dir__form_ : data
X ;
X
Xelt_textarea_a__dir__form_ : start_textarea content_textarea_a__dir__form_ end_textarea;
Xcontent_textarea_a__dir__form_ : /* empty */
X | content_textarea_a__dir__form_ cont_textarea_a__dir__form_; /*@@assume repeated-or*/
Xcont_textarea_a__dir__form_ : data
X ;
X
Xelt_h2_a__dir__form_ : start_h2 content_h2_a__dir__form_ end_h2;
Xcontent_h2_a__dir__form_ : /* empty */
X | content_h2_a__dir__form_ cont_h2_a__dir__form_; /*@@assume repeated-or*/
Xcont_h2_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_h3_a__dir__form_ : start_h3 content_h3_a__dir__form_ end_h3;
Xcontent_h3_a__dir__form_ : /* empty */
X | content_h3_a__dir__form_ cont_h3_a__dir__form_; /*@@assume repeated-or*/
Xcont_h3_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_h4_a__dir__form_ : start_h4 content_h4_a__dir__form_ end_h4;
Xcontent_h4_a__dir__form_ : /* empty */
X | content_h4_a__dir__form_ cont_h4_a__dir__form_; /*@@assume repeated-or*/
Xcont_h4_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_h5_a__dir__form_ : start_h5 content_h5_a__dir__form_ end_h5;
Xcontent_h5_a__dir__form_ : /* empty */
X | content_h5_a__dir__form_ cont_h5_a__dir__form_; /*@@assume repeated-or*/
Xcont_h5_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_h6_a__dir__form_ : start_h6 content_h6_a__dir__form_ end_h6;
Xcontent_h6_a__dir__form_ : /* empty */
X | content_h6_a__dir__form_ cont_h6_a__dir__form_; /*@@assume repeated-or*/
Xcont_h6_a__dir__form_ : data
X | elt_img_a__dir__form_
X | elt_br_a__dir__form_
X | elt_em_a__dir__form_
X | elt_strong_a__dir__form_
X | elt_code_a__dir__form_
X | elt_samp_a__dir__form_
X | elt_kbd_a__dir__form_
X | elt_var_a__dir__form_
X | elt_cite_a__dir__form_
X | elt_tt_a__dir__form_
X | elt_b_a__dir__form_
X | elt_i_a__dir__form_
X | elt_input_a__dir__form_
X | elt_select_a__dir__form_
X | elt_textarea_a__dir__form_
X ;
X
Xelt_img_dir__form_ : start_img
X
Xelt_br_dir__form_ : start_br
X
Xelt_em_dir__form_ : start_em content_em_dir__form_ end_em;
Xcontent_em_dir__form_ : /* empty */
X | content_em_dir__form_ cont_em_dir__form_; /*@@assume repeated-or*/
Xcont_em_dir__form_ : data
X | elt_a_dir__form_
X | elt_img_dir__form_
X | elt_br_dir__form_
X | elt_em_dir__form_
X | elt_strong_dir__form_
X | elt_code_dir__form_
X | elt_samp_dir__form_
X | elt_kbd_dir__form_
X | elt_var_dir__form_
X | elt_cite_dir__form_
X | elt_tt_dir__form_
X | elt_b_dir__form_
X | elt_i_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X ;
X
Xelt_strong_dir__form_ : start_strong content_strong_dir__form_ end_strong;
Xcontent_strong_dir__form_ : /* empty */
X | content_strong_dir__form_ cont_strong_dir__form_; /*@@assume repeated-or*/
Xcont_strong_dir__form_ : data
X | elt_a_dir__form_
X | elt_img_dir__form_
X | elt_br_dir__form_
X | elt_em_dir__form_
X | elt_strong_dir__form_
X | elt_code_dir__form_
X | elt_samp_dir__form_
X | elt_kbd_dir__form_
X | elt_var_dir__form_
X | elt_cite_dir__form_
X | elt_tt_dir__form_
X | elt_b_dir__form_
X | elt_i_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X ;
X
Xelt_code_dir__form_ : start_code content_code_dir__form_ end_code;
Xcontent_code_dir__form_ : /* empty */
X | content_code_dir__form_ cont_code_dir__form_; /*@@assume repeated-or*/
Xcont_code_dir__form_ : data
X | elt_a_dir__form_
X | elt_img_dir__form_
X | elt_br_dir__form_
X | elt_em_dir__form_
X | elt_strong_dir__form_
X | elt_code_dir__form_
X | elt_samp_dir__form_
X | elt_kbd_dir__form_
X | elt_var_dir__form_
X | elt_cite_dir__form_
X | elt_tt_dir__form_
X | elt_b_dir__form_
X | elt_i_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X ;
X
Xelt_samp_dir__form_ : start_samp content_samp_dir__form_ end_samp;
Xcontent_samp_dir__form_ : /* empty */
X | content_samp_dir__form_ cont_samp_dir__form_; /*@@assume repeated-or*/
Xcont_samp_dir__form_ : data
X | elt_a_dir__form_
X | elt_img_dir__form_
X | elt_br_dir__form_
X | elt_em_dir__form_
X | elt_strong_dir__form_
X | elt_code_dir__form_
X | elt_samp_dir__form_
X | elt_kbd_dir__form_
X | elt_var_dir__form_
X | elt_cite_dir__form_
X | elt_tt_dir__form_
X | elt_b_dir__form_
X | elt_i_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X ;
X
Xelt_kbd_dir__form_ : start_kbd content_kbd_dir__form_ end_kbd;
Xcontent_kbd_dir__form_ : /* empty */
X | content_kbd_dir__form_ cont_kbd_dir__form_; /*@@assume repeated-or*/
Xcont_kbd_dir__form_ : data
X | elt_a_dir__form_
X | elt_img_dir__form_
X | elt_br_dir__form_
X | elt_em_dir__form_
X | elt_strong_dir__form_
X | elt_code_dir__form_
X | elt_samp_dir__form_
X | elt_kbd_dir__form_
X | elt_var_dir__form_
X | elt_cite_dir__form_
X | elt_tt_dir__form_
X | elt_b_dir__form_
X | elt_i_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X ;
X
Xelt_var_dir__form_ : start_var content_var_dir__form_ end_var;
Xcontent_var_dir__form_ : /* empty */
X | content_var_dir__form_ cont_var_dir__form_; /*@@assume repeated-or*/
Xcont_var_dir__form_ : data
X | elt_a_dir__form_
X | elt_img_dir__form_
X | elt_br_dir__form_
X | elt_em_dir__form_
X | elt_strong_dir__form_
X | elt_code_dir__form_
X | elt_samp_dir__form_
X | elt_kbd_dir__form_
X | elt_var_dir__form_
X | elt_cite_dir__form_
X | elt_tt_dir__form_
X | elt_b_dir__form_
X | elt_i_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X ;
X
Xelt_cite_dir__form_ : start_cite content_cite_dir__form_ end_cite;
Xcontent_cite_dir__form_ : /* empty */
X | content_cite_dir__form_ cont_cite_dir__form_; /*@@assume repeated-or*/
Xcont_cite_dir__form_ : data
X | elt_a_dir__form_
X | elt_img_dir__form_
X | elt_br_dir__form_
X | elt_em_dir__form_
X | elt_strong_dir__form_
X | elt_code_dir__form_
X | elt_samp_dir__form_
X | elt_kbd_dir__form_
X | elt_var_dir__form_
X | elt_cite_dir__form_
X | elt_tt_dir__form_
X | elt_b_dir__form_
X | elt_i_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X ;
X
Xelt_tt_dir__form_ : start_tt content_tt_dir__form_ end_tt;
Xcontent_tt_dir__form_ : /* empty */
X | content_tt_dir__form_ cont_tt_dir__form_; /*@@assume repeated-or*/
Xcont_tt_dir__form_ : data
X | elt_a_dir__form_
X | elt_img_dir__form_
X | elt_br_dir__form_
X | elt_em_dir__form_
X | elt_strong_dir__form_
X | elt_code_dir__form_
X | elt_samp_dir__form_
X | elt_kbd_dir__form_
X | elt_var_dir__form_
X | elt_cite_dir__form_
X | elt_tt_dir__form_
X | elt_b_dir__form_
X | elt_i_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X ;
X
Xelt_b_dir__form_ : start_b content_b_dir__form_ end_b;
Xcontent_b_dir__form_ : /* empty */
X | content_b_dir__form_ cont_b_dir__form_; /*@@assume repeated-or*/
Xcont_b_dir__form_ : data
X | elt_a_dir__form_
X | elt_img_dir__form_
X | elt_br_dir__form_
X | elt_em_dir__form_
X | elt_strong_dir__form_
X | elt_code_dir__form_
X | elt_samp_dir__form_
X | elt_kbd_dir__form_
X | elt_var_dir__form_
X | elt_cite_dir__form_
X | elt_tt_dir__form_
X | elt_b_dir__form_
X | elt_i_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X ;
X
Xelt_i_dir__form_ : start_i content_i_dir__form_ end_i;
Xcontent_i_dir__form_ : /* empty */
X | content_i_dir__form_ cont_i_dir__form_; /*@@assume repeated-or*/
Xcont_i_dir__form_ : data
X | elt_a_dir__form_
X | elt_img_dir__form_
X | elt_br_dir__form_
X | elt_em_dir__form_
X | elt_strong_dir__form_
X | elt_code_dir__form_
X | elt_samp_dir__form_
X | elt_kbd_dir__form_
X | elt_var_dir__form_
X | elt_cite_dir__form_
X | elt_tt_dir__form_
X | elt_b_dir__form_
X | elt_i_dir__form_
X | elt_input_dir__form_
X | elt_select_dir__form_
X | elt_textarea_dir__form_
X ;
X
Xelt_input_dir__form_ : start_input
X
Xelt_select_dir__form_ : start_select content_select_dir__form_ end_select;
Xcontent_select_dir__form_ : /* empty */
X | content_select_dir__form_ cont_select_dir__form_; /*@@assume repeated-or*/
Xcont_select_dir__form_ : elt_option_select__dir__form_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_option_select__dir__form_ : start_option content_option_select__dir__form_ end_option;
Xcontent_option_select__dir__form_ : /* empty */
X | content_option_select__dir__form_ cont_option_select__dir__form_; /*@@assume repeated-or*/
Xcont_option_select__dir__form_ : data
X ;
X
Xelt_textarea_dir__form_ : start_textarea content_textarea_dir__form_ end_textarea;
Xcontent_textarea_dir__form_ : /* empty */
X | content_textarea_dir__form_ cont_textarea_dir__form_; /*@@assume repeated-or*/
Xcont_textarea_dir__form_ : data
X ;
X
Xelt_menu_form_ : start_menu content_menu_form_ end_menu;
Xcontent_menu_form_ : /* empty */
X | content_menu_form_ cont_menu_form_; /*@@assume repeated-or*/
Xcont_menu_form_ : elt_li_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_li_menu__form_ : start_li content_li_menu__form_ end_li;
Xcontent_li_menu__form_ : /* empty */
X | content_li_menu__form_ cont_li_menu__form_; /*@@assume repeated-or*/
Xcont_li_menu__form_ : data
X | elt_a_menu__form_
X | elt_img_menu__form_
X | elt_br_menu__form_
X | elt_em_menu__form_
X | elt_strong_menu__form_
X | elt_code_menu__form_
X | elt_samp_menu__form_
X | elt_kbd_menu__form_
X | elt_var_menu__form_
X | elt_cite_menu__form_
X | elt_tt_menu__form_
X | elt_b_menu__form_
X | elt_i_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X ;
X
Xelt_a_menu__form_ : start_a content_a_menu__form_ end_a;
Xcontent_a_menu__form_ : /* empty */
X | content_a_menu__form_ cont_a_menu__form_; /*@@assume repeated-or*/
Xcont_a_menu__form_ : elt_h1_a__menu__form_
X | elt_h2_a__menu__form_
X | elt_h3_a__menu__form_
X | elt_h4_a__menu__form_
X | elt_h5_a__menu__form_
X | elt_h6_a__menu__form_
X | data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_h1_a__menu__form_ : start_h1 content_h1_a__menu__form_ end_h1;
Xcontent_h1_a__menu__form_ : /* empty */
X | content_h1_a__menu__form_ cont_h1_a__menu__form_; /*@@assume repeated-or*/
Xcont_h1_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_img_a__menu__form_ : start_img
X
Xelt_br_a__menu__form_ : start_br
X
Xelt_em_a__menu__form_ : start_em content_em_a__menu__form_ end_em;
Xcontent_em_a__menu__form_ : /* empty */
X | content_em_a__menu__form_ cont_em_a__menu__form_; /*@@assume repeated-or*/
Xcont_em_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_strong_a__menu__form_ : start_strong content_strong_a__menu__form_ end_strong;
Xcontent_strong_a__menu__form_ : /* empty */
X | content_strong_a__menu__form_ cont_strong_a__menu__form_; /*@@assume repeated-or*/
Xcont_strong_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_code_a__menu__form_ : start_code content_code_a__menu__form_ end_code;
Xcontent_code_a__menu__form_ : /* empty */
X | content_code_a__menu__form_ cont_code_a__menu__form_; /*@@assume repeated-or*/
Xcont_code_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_samp_a__menu__form_ : start_samp content_samp_a__menu__form_ end_samp;
Xcontent_samp_a__menu__form_ : /* empty */
X | content_samp_a__menu__form_ cont_samp_a__menu__form_; /*@@assume repeated-or*/
Xcont_samp_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_kbd_a__menu__form_ : start_kbd content_kbd_a__menu__form_ end_kbd;
Xcontent_kbd_a__menu__form_ : /* empty */
X | content_kbd_a__menu__form_ cont_kbd_a__menu__form_; /*@@assume repeated-or*/
Xcont_kbd_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_var_a__menu__form_ : start_var content_var_a__menu__form_ end_var;
Xcontent_var_a__menu__form_ : /* empty */
X | content_var_a__menu__form_ cont_var_a__menu__form_; /*@@assume repeated-or*/
Xcont_var_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_cite_a__menu__form_ : start_cite content_cite_a__menu__form_ end_cite;
Xcontent_cite_a__menu__form_ : /* empty */
X | content_cite_a__menu__form_ cont_cite_a__menu__form_; /*@@assume repeated-or*/
Xcont_cite_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_tt_a__menu__form_ : start_tt content_tt_a__menu__form_ end_tt;
Xcontent_tt_a__menu__form_ : /* empty */
X | content_tt_a__menu__form_ cont_tt_a__menu__form_; /*@@assume repeated-or*/
Xcont_tt_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_b_a__menu__form_ : start_b content_b_a__menu__form_ end_b;
Xcontent_b_a__menu__form_ : /* empty */
X | content_b_a__menu__form_ cont_b_a__menu__form_; /*@@assume repeated-or*/
Xcont_b_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_i_a__menu__form_ : start_i content_i_a__menu__form_ end_i;
Xcontent_i_a__menu__form_ : /* empty */
X | content_i_a__menu__form_ cont_i_a__menu__form_; /*@@assume repeated-or*/
Xcont_i_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_input_a__menu__form_ : start_input
X
Xelt_select_a__menu__form_ : start_select content_select_a__menu__form_ end_select;
Xcontent_select_a__menu__form_ : /* empty */
X | content_select_a__menu__form_ cont_select_a__menu__form_; /*@@assume repeated-or*/
Xcont_select_a__menu__form_ : elt_option_select__a__menu__form_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_option_select__a__menu__form_ : start_option content_option_select__a__menu__form_ end_option;
Xcontent_option_select__a__menu__form_ : /* empty */
X | content_option_select__a__menu__form_ cont_option_select__a__menu__form_; /*@@assume repeated-or*/
Xcont_option_select__a__menu__form_ : data
X ;
X
Xelt_textarea_a__menu__form_ : start_textarea content_textarea_a__menu__form_ end_textarea;
Xcontent_textarea_a__menu__form_ : /* empty */
X | content_textarea_a__menu__form_ cont_textarea_a__menu__form_; /*@@assume repeated-or*/
Xcont_textarea_a__menu__form_ : data
X ;
X
Xelt_h2_a__menu__form_ : start_h2 content_h2_a__menu__form_ end_h2;
Xcontent_h2_a__menu__form_ : /* empty */
X | content_h2_a__menu__form_ cont_h2_a__menu__form_; /*@@assume repeated-or*/
Xcont_h2_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_h3_a__menu__form_ : start_h3 content_h3_a__menu__form_ end_h3;
Xcontent_h3_a__menu__form_ : /* empty */
X | content_h3_a__menu__form_ cont_h3_a__menu__form_; /*@@assume repeated-or*/
Xcont_h3_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_h4_a__menu__form_ : start_h4 content_h4_a__menu__form_ end_h4;
Xcontent_h4_a__menu__form_ : /* empty */
X | content_h4_a__menu__form_ cont_h4_a__menu__form_; /*@@assume repeated-or*/
Xcont_h4_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_h5_a__menu__form_ : start_h5 content_h5_a__menu__form_ end_h5;
Xcontent_h5_a__menu__form_ : /* empty */
X | content_h5_a__menu__form_ cont_h5_a__menu__form_; /*@@assume repeated-or*/
Xcont_h5_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_h6_a__menu__form_ : start_h6 content_h6_a__menu__form_ end_h6;
Xcontent_h6_a__menu__form_ : /* empty */
X | content_h6_a__menu__form_ cont_h6_a__menu__form_; /*@@assume repeated-or*/
Xcont_h6_a__menu__form_ : data
X | elt_img_a__menu__form_
X | elt_br_a__menu__form_
X | elt_em_a__menu__form_
X | elt_strong_a__menu__form_
X | elt_code_a__menu__form_
X | elt_samp_a__menu__form_
X | elt_kbd_a__menu__form_
X | elt_var_a__menu__form_
X | elt_cite_a__menu__form_
X | elt_tt_a__menu__form_
X | elt_b_a__menu__form_
X | elt_i_a__menu__form_
X | elt_input_a__menu__form_
X | elt_select_a__menu__form_
X | elt_textarea_a__menu__form_
X ;
X
Xelt_img_menu__form_ : start_img
X
Xelt_br_menu__form_ : start_br
X
Xelt_em_menu__form_ : start_em content_em_menu__form_ end_em;
Xcontent_em_menu__form_ : /* empty */
X | content_em_menu__form_ cont_em_menu__form_; /*@@assume repeated-or*/
Xcont_em_menu__form_ : data
X | elt_a_menu__form_
X | elt_img_menu__form_
X | elt_br_menu__form_
X | elt_em_menu__form_
X | elt_strong_menu__form_
X | elt_code_menu__form_
X | elt_samp_menu__form_
X | elt_kbd_menu__form_
X | elt_var_menu__form_
X | elt_cite_menu__form_
X | elt_tt_menu__form_
X | elt_b_menu__form_
X | elt_i_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X ;
X
Xelt_strong_menu__form_ : start_strong content_strong_menu__form_ end_strong;
Xcontent_strong_menu__form_ : /* empty */
X | content_strong_menu__form_ cont_strong_menu__form_; /*@@assume repeated-or*/
Xcont_strong_menu__form_ : data
X | elt_a_menu__form_
X | elt_img_menu__form_
X | elt_br_menu__form_
X | elt_em_menu__form_
X | elt_strong_menu__form_
X | elt_code_menu__form_
X | elt_samp_menu__form_
X | elt_kbd_menu__form_
X | elt_var_menu__form_
X | elt_cite_menu__form_
X | elt_tt_menu__form_
X | elt_b_menu__form_
X | elt_i_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X ;
X
Xelt_code_menu__form_ : start_code content_code_menu__form_ end_code;
Xcontent_code_menu__form_ : /* empty */
X | content_code_menu__form_ cont_code_menu__form_; /*@@assume repeated-or*/
Xcont_code_menu__form_ : data
X | elt_a_menu__form_
X | elt_img_menu__form_
X | elt_br_menu__form_
X | elt_em_menu__form_
X | elt_strong_menu__form_
X | elt_code_menu__form_
X | elt_samp_menu__form_
X | elt_kbd_menu__form_
X | elt_var_menu__form_
X | elt_cite_menu__form_
X | elt_tt_menu__form_
X | elt_b_menu__form_
X | elt_i_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X ;
X
Xelt_samp_menu__form_ : start_samp content_samp_menu__form_ end_samp;
Xcontent_samp_menu__form_ : /* empty */
X | content_samp_menu__form_ cont_samp_menu__form_; /*@@assume repeated-or*/
Xcont_samp_menu__form_ : data
X | elt_a_menu__form_
X | elt_img_menu__form_
X | elt_br_menu__form_
X | elt_em_menu__form_
X | elt_strong_menu__form_
X | elt_code_menu__form_
X | elt_samp_menu__form_
X | elt_kbd_menu__form_
X | elt_var_menu__form_
X | elt_cite_menu__form_
X | elt_tt_menu__form_
X | elt_b_menu__form_
X | elt_i_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X ;
X
Xelt_kbd_menu__form_ : start_kbd content_kbd_menu__form_ end_kbd;
Xcontent_kbd_menu__form_ : /* empty */
X | content_kbd_menu__form_ cont_kbd_menu__form_; /*@@assume repeated-or*/
Xcont_kbd_menu__form_ : data
X | elt_a_menu__form_
X | elt_img_menu__form_
X | elt_br_menu__form_
X | elt_em_menu__form_
X | elt_strong_menu__form_
X | elt_code_menu__form_
X | elt_samp_menu__form_
X | elt_kbd_menu__form_
X | elt_var_menu__form_
X | elt_cite_menu__form_
X | elt_tt_menu__form_
X | elt_b_menu__form_
X | elt_i_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X ;
X
Xelt_var_menu__form_ : start_var content_var_menu__form_ end_var;
Xcontent_var_menu__form_ : /* empty */
X | content_var_menu__form_ cont_var_menu__form_; /*@@assume repeated-or*/
Xcont_var_menu__form_ : data
X | elt_a_menu__form_
X | elt_img_menu__form_
X | elt_br_menu__form_
X | elt_em_menu__form_
X | elt_strong_menu__form_
X | elt_code_menu__form_
X | elt_samp_menu__form_
X | elt_kbd_menu__form_
X | elt_var_menu__form_
X | elt_cite_menu__form_
X | elt_tt_menu__form_
X | elt_b_menu__form_
X | elt_i_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X ;
X
Xelt_cite_menu__form_ : start_cite content_cite_menu__form_ end_cite;
Xcontent_cite_menu__form_ : /* empty */
X | content_cite_menu__form_ cont_cite_menu__form_; /*@@assume repeated-or*/
Xcont_cite_menu__form_ : data
X | elt_a_menu__form_
X | elt_img_menu__form_
X | elt_br_menu__form_
X | elt_em_menu__form_
X | elt_strong_menu__form_
X | elt_code_menu__form_
X | elt_samp_menu__form_
X | elt_kbd_menu__form_
X | elt_var_menu__form_
X | elt_cite_menu__form_
X | elt_tt_menu__form_
X | elt_b_menu__form_
X | elt_i_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X ;
X
Xelt_tt_menu__form_ : start_tt content_tt_menu__form_ end_tt;
Xcontent_tt_menu__form_ : /* empty */
X | content_tt_menu__form_ cont_tt_menu__form_; /*@@assume repeated-or*/
Xcont_tt_menu__form_ : data
X | elt_a_menu__form_
X | elt_img_menu__form_
X | elt_br_menu__form_
X | elt_em_menu__form_
X | elt_strong_menu__form_
X | elt_code_menu__form_
X | elt_samp_menu__form_
X | elt_kbd_menu__form_
X | elt_var_menu__form_
X | elt_cite_menu__form_
X | elt_tt_menu__form_
X | elt_b_menu__form_
X | elt_i_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X ;
X
Xelt_b_menu__form_ : start_b content_b_menu__form_ end_b;
Xcontent_b_menu__form_ : /* empty */
X | content_b_menu__form_ cont_b_menu__form_; /*@@assume repeated-or*/
Xcont_b_menu__form_ : data
X | elt_a_menu__form_
X | elt_img_menu__form_
X | elt_br_menu__form_
X | elt_em_menu__form_
X | elt_strong_menu__form_
X | elt_code_menu__form_
X | elt_samp_menu__form_
X | elt_kbd_menu__form_
X | elt_var_menu__form_
X | elt_cite_menu__form_
X | elt_tt_menu__form_
X | elt_b_menu__form_
X | elt_i_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X ;
X
Xelt_i_menu__form_ : start_i content_i_menu__form_ end_i;
Xcontent_i_menu__form_ : /* empty */
X | content_i_menu__form_ cont_i_menu__form_; /*@@assume repeated-or*/
Xcont_i_menu__form_ : data
X | elt_a_menu__form_
X | elt_img_menu__form_
X | elt_br_menu__form_
X | elt_em_menu__form_
X | elt_strong_menu__form_
X | elt_code_menu__form_
X | elt_samp_menu__form_
X | elt_kbd_menu__form_
X | elt_var_menu__form_
X | elt_cite_menu__form_
X | elt_tt_menu__form_
X | elt_b_menu__form_
X | elt_i_menu__form_
X | elt_input_menu__form_
X | elt_select_menu__form_
X | elt_textarea_menu__form_
X ;
X
Xelt_input_menu__form_ : start_input
X
Xelt_select_menu__form_ : start_select content_select_menu__form_ end_select;
Xcontent_select_menu__form_ : /* empty */
X | content_select_menu__form_ cont_select_menu__form_; /*@@assume repeated-or*/
Xcont_select_menu__form_ : elt_option_select__menu__form_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_option_select__menu__form_ : start_option content_option_select__menu__form_ end_option;
Xcontent_option_select__menu__form_ : /* empty */
X | content_option_select__menu__form_ cont_option_select__menu__form_; /*@@assume repeated-or*/
Xcont_option_select__menu__form_ : data
X ;
X
Xelt_textarea_menu__form_ : start_textarea content_textarea_menu__form_ end_textarea;
Xcontent_textarea_menu__form_ : /* empty */
X | content_textarea_menu__form_ cont_textarea_menu__form_; /*@@assume repeated-or*/
Xcont_textarea_menu__form_ : data
X ;
X
Xelt_dl_form_ : start_dl content_dl_form_ end_dl;
Xcontent_dl_form_ : /* empty */
X | content_dl_form_ cont_dl_form_; /*@@assume repeated-or*/
Xcont_dl_form_ : elt_dt_form_
X | elt_dd_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X | DATA /* skip DATA in eltement content */
X ;
X
Xelt_dt_form_ : start_dt content_dt_form_ end_dt;
Xcontent_dt_form_ : /* empty */
X | content_dt_form_ cont_dt_form_; /*@@assume repeated-or*/
Xcont_dt_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_dd_form_ : start_dd content_dd_form_ end_dd;
Xcontent_dd_form_ : /* empty */
X | content_dd_form_ cont_dd_form_; /*@@assume repeated-or*/
Xcont_dd_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_p_form_
X | elt_ul_form_
X | elt_ol_form_
X | elt_dir_form_
X | elt_menu_form_
X | elt_dl_form_
X | elt_pre_form_
X | elt_xmp_form_
X | elt_listing_form_
X | elt_blockquote_form_
X | elt_isindex_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_pre_form_ : start_pre content_pre_form_ end_pre;
Xcontent_pre_form_ : /* empty */
X | content_pre_form_ cont_pre_form_; /*@@assume repeated-or*/
Xcont_pre_form_ : data
X | elt_a_form_
X | elt_hr_form_
X | elt_br_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_hr_form_ : start_hr
X
Xelt_xmp_form_ : start_xmp content_xmp_form_ end_xmp;
Xcontent_xmp_form_ : /* empty */
X | content_xmp_form_ cont_xmp_form_; /*@@assume repeated-or*/
Xcont_xmp_form_ : data
X ;
X
Xelt_listing_form_ : start_listing content_listing_form_ end_listing;
Xcontent_listing_form_ : /* empty */
X | content_listing_form_ cont_listing_form_; /*@@assume repeated-or*/
Xcont_listing_form_ : data
X ;
X
Xelt_blockquote_form_ : start_blockquote content_blockquote_form_ end_blockquote;
Xcontent_blockquote_form_ : /* empty */
X | content_blockquote_form_ cont_blockquote_form_; /*@@assume repeated-or*/
Xcont_blockquote_form_ : elt_h1_form_
X | elt_h2_form_
X | elt_h3_form_
X | elt_h4_form_
X | elt_h5_form_
X | elt_h6_form_
X | data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_p_form_
X | elt_ul_form_
X | elt_ol_form_
X | elt_dir_form_
X | elt_menu_form_
X | elt_dl_form_
X | elt_pre_form_
X | elt_xmp_form_
X | elt_listing_form_
X | elt_blockquote_form_
X | elt_isindex_form_
X | elt_hr_form_
X | elt_address_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_isindex_form_ : start_isindex
X
Xelt_address_form_ : start_address content_address_form_ end_address;
Xstart_address : START_address TAGC
X ;
Xend_address : END_address
X ;
X
Xcontent_address_form_ : /* empty */
X | content_address_form_ cont_address_form_; /*@@assume repeated-or*/
Xcont_address_form_ : data
X | elt_a_form_
X | elt_img_form_
X | elt_br_form_
X | elt_em_form_
X | elt_strong_form_
X | elt_code_form_
X | elt_samp_form_
X | elt_kbd_form_
X | elt_var_form_
X | elt_cite_form_
X | elt_tt_form_
X | elt_b_form_
X | elt_i_form_
X | elt_p_form_
X | elt_input_form_
X | elt_select_form_
X | elt_textarea_form_
X ;
X
Xelt_address : start_address content_address end_address;
Xcontent_address : /* empty */
X | content_address cont_address; /*@@assume repeated-or*/
Xcont_address : data
X | elt_a
X | elt_img
X | elt_br
X | elt_em
X | elt_strong
X | elt_code
X | elt_samp
X | elt_kbd
X | elt_var
X | elt_cite
X | elt_tt
X | elt_b
X | elt_i
X | elt_p
X ;
X
Xelt_plaintext : start_plaintext content_plaintext end_plaintext;
Xstart_plaintext : START_plaintext TAGC
X ;
Xend_plaintext : END_plaintext
X | /* omitted end tag */
X ;
X
Xcontent_plaintext : /* empty */
X | content_plaintext cont_plaintext; /*@@assume repeated-or*/
Xcont_plaintext : data
X ;
X
Xdata : DATA
X | data DATA
X ;
X
Xattrval_cdata : LITERAL | NMTOKEN | NAME | NUMBER ;
Xattrval_number : NUMBER
X | LITERAL /* @# check quoted stuff for NUMBER syntax */
X ;
Xattrval_numbers : NUMBER
X | LITERAL /* @# check quoted stuff for NUMBERS syntax */
X ;
Xattrval_name : NAME
X | LITERAL /* @# check quoted stuff for NAME syntax */
X ;
Xattrval_id : NAME
X | LITERAL /* @# check quoted stuff for NAME syntax; check uniqueness */
X ;
Xattrval_names : NAME
X | LITERAL /* @# check quoted stuff for NAMES syntax */
X ;
X
END_OF_html.y
if test 111429 -ne `wc -c <html.y`; then
echo shar: \"html.y\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f main.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"main.c\"
else
echo shar: Extracting \"main.c\" \(240 characters\)
sed "s/^X//" >main.c <<'END_OF_main.c'
X/* $Id: main.c,v 1.1 1995/01/16 20:53:58 connolly Exp $ */
X
X#include <stdio.h>
X
Xextern int yydebug;
X
Xint
Xmain(int argc, char **argv)
X{
X if(argc > 1) yydebug=1;
X yyparse();
X}
X
Xint
Xyyerror(void)
X{
X fprintf(stderr, "yyerror");
X abort();
X}
END_OF_main.c
if test 240 -ne `wc -c <main.c`; then
echo shar: \"main.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f sgml.l -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"sgml.l\"
else
echo shar: Extracting \"sgml.l\" \(3881 characters\)
sed "s/^X//" >sgml.l <<'END_OF_sgml.l'
X/* $Id: sgml.l,v 1.1 1995/01/16 20:54:01 connolly Exp $ */
X
X%{
X#include <ctype.h>
X#include <string.h>
X#include <stdio.h>
X
X#include "html.tab.h"
X
X typedef enum { content_element, content_EMPTY, content_MIXED,
X content_CDATA, content_RCDATA }
X SGML_Content;
X
X typedef enum { start_tags, end_tags, attribute_names, value_names, ns_max
X } Namespaces;
X static int
X lookup_name(const char* name, int namespace, SGML_Content *content);
X
X%}
X
X%s MIXED
X%x ATTR
X%x ATTRVAL
X%x CDATA
X%x RCDATA
X%x LIT
X
X/* INITIAL state is ELEMENT content */
X
XFNMCHAR [a-zA-Z]
XNMCHAR [a-zA-Z0-9\.-]
XDIGIT [0-9]
Xps [ \t\r\n\f\l]
XRS \r
XRE \n
X
X%%
X static SGML_Content content = content_element;
X
X<INITIAL,MIXED>"<"{FNMCHAR}{NMCHAR}*{ps}* {
X
X int tok = lookup_name(yytext+1, start_tags, &content);
X
X if (tok >= 0){
X BEGIN(ATTR);
X return tok;
X }
X /* @@ else go into "junk tag" state? */
X }
X
X<INITIAL,MIXED,CDATA,RCDATA>"</"{FNMCHAR}{NMCHAR}*{ps}*[>]? {
X
X int tok = lookup_name(yytext+2, end_tags, &content);
X
X /* @# report syntax error if yytext doesn't end with > */
X
X if(tok >= 0){
X BEGIN(MIXED); /* @@ CDATA mode for XMP/LISTING? */
X return tok;
X }
X /* else: report unknown GI */
X }
X
X<INITIAL,MIXED,RCDATA>"&"{FNMCHAR}{NMCHAR}*";"? {
X /* @# assume all entities are CDATA -- or at least that
X they have no non-data markup */
X
X /* @# return the data somehow */
X
X return DATA;
X }
X
X /* @@ comments, marked sections, <!USEMAP>, pi's, etc. */
X
X<INITIAL>{ps}+ /* skip space */
X
X
X<ATTR>{FNMCHAR}{NMCHAR}*{ps}*"="{ps}* {
X
X /* attribute name */
X int tok = lookup_name(yytext, attribute_names, &content);
X
X BEGIN(ATTRVAL);
X
X if(tok >= 0){
X return tok;
X }
X /* @# else report error: no such attribute */
X }
X
X<ATTR>{FNMCHAR}{NMCHAR}*{ps}* {
X /* attribute value */
X int tok = lookup_name(yytext, value_names, &content);
X if(tok >= 0){
X return tok;
X }
X else{
X return NAME; /* generic NAME token: store yytext somewhere? @@ */
X }
X }
X
X<ATTR>">" {
X BEGIN(MIXED);
X /* @@ switch(content){ ... } */
X return TAGC;
X }
X
X<ATTR>. { /* @# report error: bad char in markup */ }
X
X<ATTRVAL>{DIGIT}+{ps}* { BEGIN(ATTR); return NUMBER; }
X<ATTRVAL>{NMCHAR}+{ps}* { BEGIN(ATTR); return NMTOKEN; }
X<ATTRVAL>"\"" { BEGIN(LIT); }
X
X<LIT>"\"" { BEGIN(ATTR); return LITERAL; /* @@single q*/}
X<LIT>"&"{FNMCHAR}{NMCHAR}*";"? {
X /* @# assume all entities are CDATA -- or at least that
X they have no non-data markup */
X
X /* append data to current LITERAL */
X }
X<LIT>{RE} { /* xvt to space */ }
X<LIT>{RS} { /* xvt to space */ }
X<LIT>[^\n\r&"]+ { /* append to current LITERAL */ }
X<LIT>. { /* append to current LITERAL */ }
X
X
X
X<MIXED,CDATA,RCDATA>{RS}+ { return DATA; /* @# ingore these? */}
X<MIXED,CDATA,RCDATA>{RE} { return DATA; /* @# ignore these sometimes?*/}
X<MIXED,CDATA,RCDATA>[^<&\n\t]+ { return DATA; }
X<MIXED,CDATA,RCDATA>. { return DATA; }
X
X
X<INITIAL,ATTR,ATTRVAL>. { /* report error: bad char */ }
X
X
X%%
X
X#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
X
Xstatic int
Xlookup_name(const char* name, int namespace, SGML_Content *content)
X{
X static struct{
X char *gi;
X int tok[ns_max];
X } dtd[] = {
X#include "tokens.c"
X };
X
X int len = strlen(name);
X int i;
X int ret = NAME;
X char *dup = strdup(name); /* @@ NULL return? */
X
X if(dup){
X for(i = 0; i < len; i++){
X if(isalpha(dup[i])) dup[i] = tolower((int)(dup[i]));
X else if(isdigit(dup[i]) || dup[i] == '.' || dup[i] == '-')/* ok */;
X else {
X dup[i] = '\0';
X break;
X }
X }
X
X for(i = 0; i < ARRAY_SIZE(dtd); i++){
X if(strcmp(dtd[i].gi, dup) == 0){
X ret = dtd[i].tok[namespace];
X break;
X }
X }
X free(dup);
X }/* @# else out of memory... */
X
X return ret;
X}
END_OF_sgml.l
if test 3881 -ne `wc -c <sgml.l`; then
echo shar: \"sgml.l\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f tokens.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"tokens.c\"
else
echo shar: Extracting \"tokens.c\" \(3652 characters\)
sed "s/^X//" >tokens.c <<'END_OF_tokens.c'
X { "a", START_a, END_a, -1, -1 },
X { "action", -1, -1, ANAME_action, -1 },
X { "address", START_address, END_address, -1, -1 },
X { "align", -1, -1, ANAME_align, -1 },
X { "alt", -1, -1, ANAME_alt, -1 },
X { "b", START_b, END_b, -1, -1 },
X { "base", START_base, -1, -1, -1 },
X { "blockquote", START_blockquote, END_blockquote, -1, -1 },
X { "body", START_body, END_body, -1, -1 },
X { "bottom", -1, -1, -1, VNAME_bottom },
X { "br", START_br, -1, -1, -1 },
X { "checkbox", -1, -1, -1, VNAME_checkbox },
X { "checked", -1, -1, ANAME_checked, VNAME_checked },
X { "cite", START_cite, END_cite, -1, -1 },
X { "code", START_code, END_code, -1, -1 },
X { "cols", -1, -1, ANAME_cols, -1 },
X { "compact", -1, -1, ANAME_compact, VNAME_compact },
X { "content", -1, -1, ANAME_content, -1 },
X { "dd", START_dd, END_dd, -1, -1 },
X { "dir", START_dir, END_dir, -1, -1 },
X { "dl", START_dl, END_dl, -1, -1 },
X { "dt", START_dt, END_dt, -1, -1 },
X { "em", START_em, END_em, -1, -1 },
X { "enctype", -1, -1, ANAME_enctype, -1 },
X { "form", START_form, END_form, -1, -1 },
X { "get", -1, -1, -1, VNAME_get },
X { "h1", START_h1, END_h1, -1, -1 },
X { "h2", START_h2, END_h2, -1, -1 },
X { "h3", START_h3, END_h3, -1, -1 },
X { "h4", START_h4, END_h4, -1, -1 },
X { "h5", START_h5, END_h5, -1, -1 },
X { "h6", START_h6, END_h6, -1, -1 },
X { "head", START_head, END_head, -1, -1 },
X { "hidden", -1, -1, -1, VNAME_hidden },
X { "hr", START_hr, -1, -1, -1 },
X { "href", -1, -1, ANAME_href, -1 },
X { "html", START_html, END_html, -1, -1 },
X { "http__equiv", -1, -1, ANAME_http__equiv, -1 },
X { "i", START_i, END_i, -1, -1 },
X { "image", -1, -1, -1, VNAME_image },
X { "img", START_img, -1, -1, -1 },
X { "input", START_input, -1, -1, -1 },
X { "isindex", START_isindex, -1, -1, -1 },
X { "ismap", -1, -1, ANAME_ismap, VNAME_ismap },
X { "kbd", START_kbd, END_kbd, -1, -1 },
X { "li", START_li, END_li, -1, -1 },
X { "link", START_link, -1, -1, -1 },
X { "listing", START_listing, END_listing, -1, -1 },
X { "maxlength", -1, -1, ANAME_maxlength, -1 },
X { "menu", START_menu, END_menu, -1, -1 },
X { "meta", START_meta, -1, -1, -1 },
X { "method", -1, -1, ANAME_method, -1 },
X { "methods", -1, -1, ANAME_methods, -1 },
X { "middle", -1, -1, -1, VNAME_middle },
X { "multiple", -1, -1, ANAME_multiple, VNAME_multiple },
X { "n", -1, -1, ANAME_n, -1 },
X { "name", -1, -1, ANAME_name, -1 },
X { "nextid", START_nextid, -1, -1, -1 },
X { "ol", START_ol, END_ol, -1, -1 },
X { "option", START_option, END_option, -1, -1 },
X { "p", START_p, END_p, -1, -1 },
X { "password", -1, -1, -1, VNAME_password },
X { "plaintext", START_plaintext, END_plaintext, -1, -1 },
X { "post", -1, -1, -1, VNAME_post },
X { "pre", START_pre, END_pre, -1, -1 },
X { "radio", -1, -1, -1, VNAME_radio },
X { "rel", -1, -1, ANAME_rel, -1 },
X { "reset", -1, -1, -1, VNAME_reset },
X { "rev", -1, -1, ANAME_rev, -1 },
X { "rows", -1, -1, ANAME_rows, -1 },
X { "samp", START_samp, END_samp, -1, -1 },
X { "select", START_select, END_select, -1, -1 },
X { "selected", -1, -1, ANAME_selected, VNAME_selected },
X { "size", -1, -1, ANAME_size, -1 },
X { "src", -1, -1, ANAME_src, -1 },
X { "strong", START_strong, END_strong, -1, -1 },
X { "submit", -1, -1, -1, VNAME_submit },
X { "text", -1, -1, -1, VNAME_text },
X { "textarea", START_textarea, END_textarea, -1, -1 },
X { "title", START_title, END_title, ANAME_title, -1 },
X { "top", -1, -1, -1, VNAME_top },
X { "tt", START_tt, END_tt, -1, -1 },
X { "type", -1, -1, ANAME_type, -1 },
X { "ul", START_ul, END_ul, -1, -1 },
X { "urn", -1, -1, ANAME_urn, -1 },
X { "value", -1, -1, ANAME_value, -1 },
X { "var", START_var, END_var, -1, -1 },
X { "width", -1, -1, ANAME_width, -1 },
X { "xmp", START_xmp, END_xmp, -1, -1 },
END_OF_tokens.c
if test 3652 -ne `wc -c <tokens.c`; then
echo shar: \"tokens.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of shell archive.
exit 0