This is the mail archive of the
docbook@lists.oasis-open.org
mailing list for the DocBook project.
Proposal #2 for BNF/EBNF markup
- To: docbook at lists dot oasis-open dot org
- Subject: DOCBOOK: Proposal #2 for BNF/EBNF markup
- From: "Eve L. Maler" <Eve dot Maler at east dot sun dot com>
- Date: Wed, 22 Mar 2000 15:53:53 -0500
- Reply-To: docbook at lists dot oasis-open dot org
Here is round 2 of my BNF proposal. Changes:
- Removed bnf element
- Changed name of prod element to production
- Change name of prodrecap element to productionrecap
- Replaced rhsline element with sbr element
- Added constraint and constraintnote elements
Things I didn't change, even though it was suggested:
- I kept the names lhs and rhs because they are so common in CoSci
- I kept the name nt because otherwise it really clogs up the code
- I kept constraint as an empty element
Issues and other notes:
- You really only want to put lineannotations at the ends of lines, but
because it's a mixed content model, the DTD can't control the combination
of sbr's, lineannotations, and line breaks inserted unilaterally by the
formatter.
- Note that rhs is not line-specific. The sbr element just forces a break,
but it's entirely possible that the rhs content will also be flowed onto
several lines just because the column in which it needs to appear has
limited room.
- I don't think we can make the nt element empty and then generate its
content (the nonterminal's name ) reliably, so we have to do a bit of
"duplication" (and take the risk of error) and have authors supply the
content inside the element.
* * *
<!-- add productionset to %formal.class; -->
<!ELEMENT productionset
((%formalobject.title.content;), (production|productionrecap)+)>
<!ELEMENT productionset %common.attrib;>
<!ELEMENT prod (lhs, rhs, constraint*)>
<!ATTLIST prod
%idreq.common.attrib;
>
<!ELEMENT lhs (#PCDATA)>
<!ATTLIST lhs %common.attrib;>
<!ELEMENT rhs (#PCDATA|nt|lineannotation|sbr)*>
<!ATTLIST rhs %common.attrib;>
<!-- add nt to %tech.char.class; -->
<!ELEMENT nt (#PCDATA)>
<!ATTLIST nt
%common.attrib;
%required-XLink-to-production-ID;
>
<!ELEMENT constraint EMPTY>
<!ATTLIST constraint
%common.attrib;
$required-XLink-to-constraintnote-ID;
>
<!ELEMENT prodrecap EMPTY>
<!ATTLIST prodrecap
%common.attrib;
%required-XLink-to-production-ID;
>
<!-- Add constraintnote to %admon.class; -->
<!ELEMENT constraintnote (title, (%admon.mix;)+)>
<!ATTLIST constraintnote
%idreq.common.attrib;
>
* * *
Examples based on the XML specification, but using this proposal; see
http://www.w3.org/TR/REC-xml for how they're supposed to be presented:
<productionset>
<production id="NT-Char">
<lhs>Char</lhs>
<rhs>#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
<!-- The above line break in the source file has nothing to do with the
line breaks in the output. -->
| [#x10000-#x10FFFF]
<lineannotation>any Unicode character, excluding the surrogate
blocks, FFFE, and FFFF.
</lineannotation>
</rhs>
</production>
</productionset>
<productionset>
<production id="NT-SDDecl">
<lhs>SDDecl</lhs>
<rhs><nt def="NT-S">S</nt> 'standalone' <nt def="NT-Eq">Eq</nt>
<!-- The above line break in the source file has nothing to do with the
line breaks in the output. -->
(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"'))
</rhs>
<constraint def="check-rmd"/>
</production>
</productionset>
<productionset>
<production id="NT-element">
<lhs>element</lhs>
<rhs>
<nt def="NT-EmptyElemTag">EmptyElemTag</nt>
<sbr/><!-- There will be a line break in the output because of the sbr. -->
| <nt def="NT-STag">STag</nt> <nt def="NT-content">content</nt>
<!-- The above line break has nothing to do with the output. -->
<nt def="NT-ETag">ETag</nt>
</rhs>
<constraint def="GIMatch"/>
<constraint def="elementvalid"/>
</production>
</productionset>
* * *
Eve
Eve Maler +1 781 442 3190
Sun Microsystems XML Technology Center elm @ east.sun.com