Appendix A. A Tutorial D Grammar

I never use a big, big D—

W. S. Gilbert: HMS Pinafore (1878)

This appendix gives for purposes of reference a simple BNF grammar for Tutorial D relational expressions and assignments. Details of nonrelational expressions, including aggregate operator invocations in particular, are omitted, and so are definitional operations such as those used to define base relvars and constraints. The following are also omitted:

  • SUMMARIZE, because (as explained in Chapter 5) this operator is somewhat deprecated

  • Aspects of the language not discussed in the body of the book

Also, the grammar is simplified in certain respects. In particular, it makes no attempt to say where image relations can and can’t be used, nor does it pay any attention to operator precedence rules. (As a result of this latter point, certain constructs permitted by the grammar—for example, the expression r1 MINUS r2 MINUS r3—are potentially ambiguous. Additional syntax rules are needed to resolve such issues, but such rules are omitted here. Of course, parentheses can always be used to guarantee a desired order of evaluation anyway.) A few further points of detail:

  • All syntactic categories of the form <... name> are assumed to be <identifier>s and are defined no further here.

  • Although the category <bool exp> is left undefined, it might help to recall that a relational comparison in particular is a special case.

  • As usual, all of the various commalists mentioned are allowed to be empty.

Expressions

<relation ...

Get Relational Theory for Computer Professionals now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.