productionset
productionset — A set of EBNF productions.
Synopsis
productionset ::=
Attributes
Additional Constraints
- If this element is the root element, it must have a version attribute.
Description
A productionset
is a collection of
Extended Backus-Naur Form (EBNF)
production
s.
EBNF is a notation for describing the grammar of context-free languages. Even if you aren’t conversant in the programming language concepts of context-free languages and grammars, it’s not really as hard to understand as it sounds.
Processing expectations
Formatted as a displayed block. The detailed processing expectations with respect to individual productions, lefthand sides, and righthand sides are quite complex.
The production
s should be numbered.
Parents
These elements contain productionset
: acknowledgements
, annotation
, answer
, appendix
, article
, bibliodiv
, bibliography
, bibliolist
, blockquote
, callout
, calloutlist
, caption
(db.caption), caution
, chapter
, colophon
, constraintdef
, cover
, dedication
, entry
, example
, figure
, footnote
, glossary
, glossdef
, glossdiv
, glosslist
, important
, index
, indexdiv
, informalexample
, informalfigure
, itemizedlist
, legalnotice
, listitem
, msgexplan
, msgtext
, note
, orderedlist
, para
, partintro
, preface
, procedure
, qandadiv
, qandaset
, question
, refsect1
, refsect2
, refsect3
, refsection
, refsynopsisdiv
, result
, revdescription
, sect1
, sect2
, sect3
, sect4
, sect5
, section
, setindex
, sidebar
, simplesect
, step
, taskprerequisites
, taskrelated
, tasksummary
, td
, textobject
, th
, tip
, toc
, tocdiv
, topic
, variablelist
, warning
.
Children
The following elements occur in productionset: info
(db.titleforbidden.info), info
(db.titleonly.info), production
, productionrecap
, title
, titleabbrev
.
Examples
A set of EBNF productions describes the legal arrangements of tokens in a language. Consider arithmetic expressions as a simple example.
The expression
“3 + 4
”
is valid and so is
“3 + 4 - 5
”, but
“3 - + - 4
” is not, nor is
“3 + 4 6
”. We can use EBNF to
describe all the possible legal arrangements:
That is expressed in DocBook like this:
<article xmlns='http://docbook.org/ns/docbook'>
<title>Example productionset</title>
<simplesect><title>EBNF Grammar</title>
<productionset><title>Arithemetic Expressions</title>
<production xml:id="ebnf.expression">
<lhs>Expression</lhs>
<rhs><nonterminal def="#ebnf.arith">ArithExpression</nonterminal> |
<nonterminal def="#ebnf.mult">MultExpression</nonterminal>
<lineannotation>Does this grammar actually get precedence right?
</lineannotation>
</rhs>
</production>
<production xml:id="ebnf.arith">
<lhs>ArithExpression</lhs>
<rhs><nonterminal def="#ebnf.expression">Expression</nonterminal>
'+'
<nonterminal def="#ebnf.mult">MultExpression</nonterminal> |
<nonterminal def="#ebnf.expression">Expression</nonterminal>
'-'
<nonterminal def="#ebnf.mult">MultExpression</nonterminal>
</rhs>
</production>
<production xml:id="ebnf.mult">
<lhs>MultExpression</lhs>
<rhs><nonterminal def="#ebnf.mult">MultExpression</nonterminal>
'*'
<nonterminal def="#ebnf.mult">MultExpression</nonterminal> |
<nonterminal def="#ebnf.mult">MultExpression</nonterminal>
'/'
<nonterminal def="#ebnf.mult">MultExpression</nonterminal> |
<nonterminal def="#ebnf.number">Number</nonterminal>
</rhs>
<constraint linkend="div0"/>
</production>
<production xml:id="ebnf.number">
<lhs>Number</lhs>
<rhs>[0-9]+</rhs>
</production>
</productionset>
<constraintdef xml:id="div0">
<title>Division by Zero</title>
<para>Division by zero is an error.</para>
</constraintdef>
</simplesect>
</article>