The grammar is a composite of the HTML 2.0 standard tags and special extensions to the language as enabled by the latest versions of NCSA Mosaic, Netscape Communication's Netscape Navigator, and Microsoft's Internet Explorer.
The rules are in alphabetical order. The starting rule for an entire document is named html_document.
| 
 a_tag  | 
 ::=  | 
 <a>  | 
| 
 {a_content }0  | 
||
| 
 </a>  | 
||
| 
 a_content  | 
 ::=  | 
 heading  | 
| 
 |  | 
 text  | 
|
| 
 address_tag  | 
 ::=  | 
 <address>  | 
| 
 {address_content }0  | 
||
| 
 </address>  | 
||
| 
 address_content  | 
 ::=  | 
 p_tag  | 
| 
 |  | 
 text  | 
|
| 
 applet_content  | 
 ::=  | 
 {<param>}0  | 
| 
 body_content  | 
||
| 
 applet_tag  | 
 ::=  | 
 <applet>  | 
| 
 applet_content  | 
||
| 
 </applet>  | 
||
| a_content may not contain a_tags; you may not nest <a> tags within other <a> tags. | ||
| 
 b_tag  | 
 ::=  | 
 <b> text </b>  | 
| 
 basefont_tag  | 
 ::=  | 
 <basefont>  | 
| 
 body_content  | 
||
| 
 </basefont>  | 
||
| 
 big_tag  | 
 ::=  | 
 <big> text</big>  | 
| 
 blink_tag  | 
 ::=  | 
 <blink> text</blink>  | 
| 
 block  | 
 ::=  | 
 {block_content }0  | 
| 
 block_content  | 
 ::=  | 
 <isindex>  | 
| 
 |  | 
 basefont_tag  | 
|
| 
 |  | 
 blockquote_tag  | 
|
| 
 |  | 
 center_tag  | 
|
| 
 |  | 
 dir_tag  | 
|
| 
 |  | 
 div_tag  | 
|
| 
 |  | 
 dl_tag  | 
|
| 
 |  | 
 form_tag  | 
|
| 
 |  | 
 listing_tag  | 
|
| 
 |  | 
 menu_tag  | 
|
| 
 |  | 
 multicol_tag  | 
|
| 
 |  | 
 nobr_tag  | 
|
| 
 |  | 
 ol_tag  | 
|
| 
 |  | 
 p_tag  | 
|
| 
 |  | 
 pre_tag  | 
|
| 
 |  | 
 table_tag  | 
|
| 
 |  | 
 ul_tag  | 
|
| 
 |  | 
 xmp_tag  | 
|
| 
 blockquote_tag  | 
 ::=  | 
 <blockquote>  | 
| 
 body_content  | 
||
| 
 </blockquote>  | 
||
| 
 body_content  | 
 ::=  | 
 <bgsound>  | 
| 
 |  | 
 <hr>  | 
|
| 
 |  | 
 address_tag  | 
|
| 
 |  | 
 block  | 
|
| 
 |  | 
 heading  | 
|
| 
 |  | 
 layer_tag  | 
|
| 
 |  | 
 map_tag  | 
|
| 
 |  | 
 marquee_tag  | 
|
| 
 |  | 
 text  | 
|
| 
 body_tag  | 
 ::=  | 
 <body>  | 
| 
 {body_content }0  | 
||
| 
 </body>  | 
||
| 
 caption_tag  | 
 ::=  | 
 <caption>  | 
| 
 body_content  | 
||
| 
 </caption>  | 
||
| 
 center_tag  | 
 ::=  | 
 <center>  | 
| 
 body_content  | 
||
| 
 </center>  | 
||
| 
 cite_tag  | 
 ::=  | 
 <cite> text </cite>  | 
| 
 code_tag  | 
 ::=  | 
 <code> text </code>  | 
| 
 colgroup_content  | 
 ::=  | 
 {<col>}0  | 
| 
 colgroup_tag  | 
 ::=  | 
 <colgroup>  | 
| 
 colgroup_content  | 
||
| 
 content_style  | 
 ::=  | 
 cite_tag  | 
| 
 |  | 
 code_tag  | 
|
| 
 |  | 
 dfn_tag  | 
|
| 
 |  | 
 em_tag  | 
|
| 
 |  | 
 kbd_tag  | 
|
| 
 |  | 
 samp_tag  | 
|
| 
 |  | 
 strong_tag  | 
|
| 
 |  | 
 var_tag  | 
|
| 
 dd_tag  | 
 ::=  | 
 <dd>  | 
| 
 flow  | 
||
| 
 </dd>  | 
||
| 
 dfn_tag  | 
 ::=  | 
 <dfn> text </dfn>  | 
| 
 dir_tag  | 
 ::=  | 
 <dir>  | 
| 
 { li_tag }  | 
||
| 
 </dir>  | 
||
| 
 div_tag  | 
 ::=  | 
 <div>  | 
| 
 body_content  | 
||
| 
 </div>  | 
||
| 
 dl_content  | 
 ::=  | 
 dt_tag dd_tag  | 
| The li_tag within the dir_tag may not contain any element found in a block. | ||
| 
 dl_tag  | 
 ::=  | 
 <dl>  | 
| 
 {dl_content }  | 
||
| 
 </dl>  | 
||
| 
 dt_tag  | 
 ::=  | 
 <dt>  | 
| 
 text  | 
||
| 
 </dt>  | 
||
| 
 em_tag  | 
 ::=  | 
 <em> text </em>  | 
| 
 flow  | 
 ::=  | 
 {flow_content }0  | 
| 
 flow_content  | 
 ::=  | 
 block  | 
| 
 |  | 
 text  | 
|
| 
 font_tag  | 
 ::=  | 
 <font> style_text </font>  | 
| 
 form_content  | 
 ::=  | 
 <input>  | 
| 
 |  | 
 <keygen>  | 
|
| 
 |  | 
 body_content  | 
|
| 
 |  | 
 select_tag  | 
|
| 
 |  | 
 textarea_tag  | 
|
| 
 form_tag  | 
 ::=  | 
 <form>  | 
| 
 {form_content }0  | 
||
| 
 </form>  | 
||
| 
 frameset_content  | 
 ::=  | 
 <frame>  | 
| 
 |  | 
 noframes_tag  | 
|
| 
 frameset_tag  | 
 ::=  | 
 <frameset>  | 
| 
 {frameset_content }0  | 
||
| 
 </frameset>  | 
||
| 
 h1_tag  | 
 ::=  | 
 <h1> text </h1>  | 
| 
 h2_tag  | 
 ::=  | 
 <h2> text </h2>  | 
| 
 h3_tag  | 
 ::=  | 
 <h3> text </h3>  | 
| 
 h4_tag  | 
 ::=  | 
 <h4> text </h4>  | 
| 
 h5_tag  | 
 ::=  | 
 <h5> text </h5>  | 
| 
 h6_tag  | 
 ::=  | 
 <h6> text </h6>  | 
| 
 head_content  | 
 ::=  | 
 <base>  | 
| 
 |  | 
 <isindex>  | 
|
| 
 |  | 
 <link>  | 
|
| 
 |  | 
 <meta>  | 
|
| 
 |  | 
 <nextid>  | 
|
| form_content may not contain form_tags; you may not nest one <form> within another <form>. | ||
| 
 |  | 
 style_tag  | 
|
| 
 |  | 
 title_tag  | 
|
| 
 head_tag  | 
 ::=  | 
 <head>  | 
| 
 {head_content }0  | 
||
| 
 </head>  | 
||
| 
 heading  | 
 ::=  | 
 h1_tag  | 
| 
 |  | 
 h2_tag  | 
|
| 
 |  | 
 h3_tag  | 
|
| 
 |  | 
 h4_tag  | 
|
| 
 |  | 
 h5_tag  | 
|
| 
 |  | 
 h6_tag  | 
|
| 
 html_content  | 
 ::=  | 
 head_tag body_tag  | 
| 
 |  | 
 head_tag frameset_tag  | 
|
| 
 html_document  | 
 ::=  | 
 html_tag  | 
| 
 html_tag  | 
 ::=  | 
 <html>  | 
| 
 html_content  | 
||
| 
 </html>  | 
||
| 
 i_tag  | 
 ::=  | 
 <i> text </i>  | 
| 
 ilayer_tag  | 
 ::=  | 
 <ilayer>  | 
| 
 body_content  | 
||
| 
 </ilayer>  | 
||
| 
 kbd_tag  | 
 ::=  | 
 <kbd> text </kbd>  | 
| 
 layer_tag  | 
 ::=  | 
 <layer>  | 
| 
 body_content  | 
||
| 
 </layer>  | 
||
| 
 li_tag  | 
 ::=  | 
 <li>  | 
| 
 flow  | 
||
| 
 </li>  | 
||
| 
 listing_tag  | 
 ::=  | 
 <listing>  | 
| 
 literal_text  | 
||
| 
 </listing>  | 
||
| 
 map_content  | 
 ::=  | 
 {<area>}0  | 
| 
 map_tag  | 
 ::=  | 
 <map>  | 
| 
 map_content  | 
||
| 
 </map>  | 
||
| 
 marquee_tag  | 
 ::=  | 
 <marquee>  | 
| 
 style_text  | 
||
| 
 </marquee>  | 
||
| 
 menu_tag  | 
 ::=  | 
 <menu>  | 
| 
 {li_tag }0  | 
||
| 
 </menu>  | 
||
| 
 multicol_tag  | 
 ::=  | 
 <multicol>  | 
| 
 body_content  | 
||
| 
 </multicol>  | 
||
| 
 nobr_tag  | 
 ::=  | 
 <nobr> text </nobr>  | 
| 
 noembed_tag  | 
 ::=  | 
 <noembed> text </noembed>  | 
| 
 noframes_tag  | 
 ::=  | 
 <noframes>  | 
| 
 {body_content }0  | 
||
| 
 </noframes>  | 
||
| 
 noscript_tag  | 
 ::=  | 
 <noscript> text </noscript>  | 
| 
 object_content  | 
 ::=  | 
 {<param>}0  | 
| 
 body_content  | 
||
| 
 object_tag  | 
 ::=  | 
 <object>  | 
| 
 object_content  | 
||
| 
 </object>  | 
||
| 
 ol_tag  | 
 ::=  | 
 <ol>  | 
| 
 {li_tag }  | 
||
| 
 </ol>  | 
||
| 
 option_tag  | 
 ::=  | 
 <option>  | 
| 
 plain_text  | 
||
| 
 </option>  | 
||
| 
 p_tag  | 
 ::=  | 
 <p>  | 
| 
 text  | 
||
| 
 </p>  | 
||
| 
 physical_style  | 
 ::=  | 
 b_tag  | 
| 
 |  | 
 big_tag  | 
|
| 
 |  | 
 blink_tag  | 
|
| 
 |  | 
 font_tag  | 
|
| 
 |  | 
 i_tag  | 
|
| 
 |  | 
 s_tag  | 
|
| 
 |  | 
 small_tag  | 
|
| 
 |  | 
 span_tag  | 
|
| The li_tag within the menu_tag may not contain any element found in a block. | ||
| 
 |  | 
 strike_tag  | 
|
| 
 |  | 
 sub_tag  | 
|
| 
 |  | 
 sup_tag  | 
|
| 
 |  | 
 tt_tag  | 
|
| 
 |  | 
 u_tag  | 
|
| 
 pre_content  | 
 ::=  | 
 <br>  | 
| 
 |  | 
 <hr>  | 
|
| 
 |  | 
 a_tag  | 
|
| 
 |  | 
 style_text  | 
|
| 
 pre_tag  | 
 ::=  | 
 <pre>  | 
| 
 {pre_content }0  | 
||
| 
 </pre>  | 
||
| 
 s_tag  | 
 ::=  | 
 <s> text </s>  | 
| 
 samp_tag  | 
 ::=  | 
 <samp> text </samp>  | 
| 
 script_tag  | 
 ::=  | 
 <script> plain_text </script>  | 
| 
 select_tag  | 
 ::=  | 
 <select>  | 
| 
 {option_tag }  | 
||
| 
 </select>  | 
||
| 
 server_tag  | 
 ::=  | 
 <server> plain_text </server>  | 
| 
 small_tag  | 
 ::=  | 
 <small> text </small>  | 
| 
 span_tag  | 
 ::=  | 
 <span> text </span>  | 
| 
 strike_tag  | 
 ::=  | 
 <strike> text </strike>  | 
| 
 strong_tag  | 
 ::=  | 
 <strong> text </strong>  | 
| 
 style_tag  | 
 ::=  | 
 <style> plain_text </style>  | 
| 
 sub_tag  | 
 ::=  | 
 <sub> text </sub>  | 
| 
 sup_tag  | 
 ::=  | 
 <sup> text </sup>  | 
| 
 table_cell  | 
 ::=  | 
 td_tag  | 
| 
 |  | 
 th_tag  | 
|
| 
 table_content  | 
 ::=  | 
 <tbody>  | 
| 
 |  | 
 <tfoot>  | 
|
| 
 |  | 
 <thead>  | 
|
| 
 |  | 
 tr_tag  | 
|
| A script_tag may be placed anywhere within an HTML document, without regard to syntactic rules.A server_tag may be placed anywhere within an HTML document, without regard to syntactic rules. | ||
| 
 table_tag  | 
 ::=  | 
 <table>  | 
| 
 [caption_tag ]  | 
||
| 
 {colgroup_tag }0  | 
||
| 
 {table_content }0  | 
||
| 
 </table>  | 
||
| 
 td_tag  | 
 ::=  | 
 <td>  | 
| 
 body_content  | 
||
| 
 </td>  | 
||
| 
 text  | 
 ::=  | 
 {text_content }0  | 
| 
 text_content  | 
 ::=  | 
 <br>  | 
| 
 |  | 
 <embed>  | 
|
| 
 |  | 
 <iframe>  | 
|
| 
 |  | 
 <img>  | 
|
| 
 |  | 
 <spacer>  | 
|
| 
 |  | 
 <wbr>  | 
|
| 
 |  | 
 a_tag  | 
|
| 
 |  | 
 applet_tag  | 
|
| 
 |  | 
 content_style  | 
|
| 
 |  | 
 ilayer_tag  | 
|
| 
 |  | 
 noembed_tag  | 
|
| 
 |  | 
 noscript_tag  | 
|
| 
 |  | 
 object_tag  | 
|
| 
 |  | 
 plain_text  | 
|
| 
 |  | 
 physical_style  | 
|
| 
 textarea_tag  | 
 ::=  | 
 <textarea> plain_text </textarea>  | 
| 
 th_tag  | 
 ::=  | 
 <th>  | 
| 
 body_content  | 
||
| 
 </th>  | 
||
| 
 title_tag  | 
 ::=  | 
 <title> plain_text </title>  | 
| 
 tr_tag  | 
 ::=  | 
 <tr>  | 
| 
 {table_cell }0  | 
||
| 
 </tr>  | 
||
| 
 tt_tag  | 
 ::=  | 
 <tt> text </tt>  | 
| 
 u_tag  | 
 ::=  | 
 <u> text </u>  | 
| 
 ul_tag  | 
 ::=  | 
 <ul>  | 
| 
 {li_tag }  | 
||
| 
 </ul>  | 
||
| 
 var_tag  | 
 ::=  | 
 <var> text </var>  | 
| 
 xmp_tag  | 
 ::=  | 
 <xmp>  | 
| 
 literal_text  | 
||
| 
 </xmp>  | 
||