productionset

productionset — A set of EBNF productions.

Synopsis

productionset ::=

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) 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.

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:

<productionset>
<production xml:id="ebnf.expression">
<lhs>Expression</lhs>
<rhs>
<nonterminal def="#ebnf.arith">ArithExpression</nonterminal>
|
<nonterminal def="#ebnf.mult">MultExpression</nonterminal>
Does this grammar actually get precedence right? </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"></constraint>
</production>
<production xml:id="ebnf.number">
<lhs>Number</lhs>
<rhs>[0-9]+</rhs>
</production>
</productionset>
<constraintdef xml:id="div0">

Division by zero is an error.

</constraintdef>

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>
Last revised by Norman Walsh on (git hash: c3457cab689d8fd89ba4252de204cf9a14e40acd 6a501344525f32f9834f0e4a5c3c3f8131803fa4 47fe34b28bad7941a61b9c1c17d47f6eed36cd04)