productionset — A set of EBNF productions.


productionset ::=

Additional Constraints

  • If this element is the root element, it must have a version attribute.


A productionset is a collection of Extended Backus-Naur Form (EBNF) productions.

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 productions should be numbered.


The following elements occur in productionset: info (, info (, production, productionrecap, title, titleabbrev.


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:

Arithemetic Expressions
[1] Expression:=ArithExpression | MultExpression Does this grammar actually get precedence right?
[2] ArithExpression:=Expression '+' MultExpression | Expression '-' MultExpression
[4] Number:=[0-9]+
Division by Zero

Division by zero is an error.

That is expressed in DocBook like this:

1<article xmlns=''>
<title>Example productionset</title>
<simplesect><title>EBNF Grammar</title>
<productionset><title>Arithemetic Expressions</title>
<production xml:id="ebnf.expression">
  <rhs><nonterminal def="#ebnf.arith">ArithExpression</nonterminal> |
10       <nonterminal def="#ebnf.mult">MultExpression</nonterminal>
  <lineannotation>Does this grammar actually get precedence right?
15<production xml:id="ebnf.arith">
  <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>
25<production xml:id="ebnf.mult">
  <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>
35  <constraint linkend="div0"/>
<production xml:id="ebnf.number">
<constraintdef xml:id="div0">
<title>Division by Zero</title>
45<para>Division by zero is an error.</para>