$Revision: 1666 $
$Date: 2002-06-12 07:19:37 -0400 (Wed, 12 Jun 2002) $
productionset — A set of EBNF productions
productionset ::= ((title
,titleabbrev
?)?, (production
|productionrecap
)+)
This element is only available if you are using the EBNF Module.
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.
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 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Division by Zero
Division by zero is an error. Constraints, such as this one, are used to express conditions that cannot be expressed in the grammar.
Formatted as a displayed block. The detailed processing expecations with respect to individual productions, left-hand sides, and right-hand sides are quite complex.
Production
s should be numbered.
These elements contain productionset:
appendix
, article
, bibliodiv
, bibliography
, blockquote
, callout
, chapter
, glossary
, glossdiv
, index
, listitem
, msgexplan
, msgtext
, partintro
, preface
, procedure
, refsect1
, refsect2
, refsect3
, refsection
, refsynopsisdiv
, sect1
, sect2
, sect3
, sect4
, sect5
, section
, setindex
, simplesect
, step
, taskprerequisites
, taskrelated
, tasksummary
.
The following elements occur in productionset:
production
, productionrecap
, title
, titleabbrev
.
<!DOCTYPE simplesect PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"> <simplesect><title>EBNF Grammar</title> <productionset><title>Arithemetic Expressions</title> <production 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 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 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 id="ebnf.number"> <lhs>Number</lhs> <rhs>[0-9]+</rhs> </production> </productionset> <constraintdef id="div0"> <title>Division by Zero</title> <para>Division by zero is an error.</para> </constraintdef> </simplesect>