productionset
productionset — A set of EBNF productions.
Synopsis
productionset ::=
- Sequence of:
Attributes
Common attributes and common linking attributes.
No additional 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.
Attributes
Common attributes and common linking attributes.
- any attribute
Any attribute in any other explicit namespace
Parents
77 elements contain productionset
. × ⏵
Children
6 elements occur in productionset
. × ⏵
Examples
A set of EBNF productions describes the legal arrangements of tokens in a language. Consider arithmetic expressions as a simple example.
The expression
is valid and so is
3 + 4
, but
3 + 4 - 5
is not, nor is
3 - + - 4
. We can use EBNF to
describe all the possible legal arrangements:3 + 4 6
Division by zero is an error.
That is expressed in DocBook like this:
1 |<article xmlns='http://docbook.org/ns/docbook'>
|<title>Example productionset</title>
||
<simplesect><title>EBNF Grammar</title>
5 ||
<productionset><title>Arithemetic Expressions</title>
|<production xml:id="ebnf.expression">
|<lhs>Expression</lhs>
|<rhs><nonterminal def="#ebnf.arith">ArithExpression</nonterminal> |
10 |<nonterminal def="#ebnf.mult">MultExpression</nonterminal>
|<lineannotation>Does this grammar actually get precedence right?
|</lineannotation>
|</rhs>
|</production>
15 |<production xml:id="ebnf.arith">
|<lhs>ArithExpression</lhs>
|<rhs><nonterminal def="#ebnf.expression">Expression</nonterminal>
|'+'
|<nonterminal def="#ebnf.mult">MultExpression</nonterminal> |
20 |<nonterminal def="#ebnf.expression">Expression</nonterminal>
|'-'
|<nonterminal def="#ebnf.mult">MultExpression</nonterminal>
|</rhs>
|</production>
25 |<production xml:id="ebnf.mult">
|<lhs>MultExpression</lhs>
|<rhs><nonterminal def="#ebnf.mult">MultExpression</nonterminal>
|'*'
|<nonterminal def="#ebnf.mult">MultExpression</nonterminal> |
30 |<nonterminal def="#ebnf.mult">MultExpression</nonterminal>
|'/'
|<nonterminal def="#ebnf.mult">MultExpression</nonterminal> |
|<nonterminal def="#ebnf.number">Number</nonterminal>
|</rhs>
35 |<constraint linkend="div0"/>
|</production>
|<production xml:id="ebnf.number">
|<lhs>Number</lhs>
|<rhs>[0-9]+</rhs>
40 |</production>
|</productionset>
||
<constraintdef xml:id="div0">
|<title>Division by Zero</title>
45 |<para>Division by zero is an error.</para>
|</constraintdef>
|</simplesect>
||
</article>