A human engineered variant of BNF

There is no question that BNF, or one of its myriad variants, is popularly used to define programming languages. Yet almost every time a language is defined, yet another variant is used. I believe that the reason for this proliferation is the continuing dissatisfaction with the details of this notation. I offer here a very simple, human engineered variant of BNF. In no way is this variant a technical contribution, but rather several small ideas for improving human comprehension. The variant satisfies the following criteria: [] The absence of angle brackets. As most agree, the traditional angle brackets are distracting at best. [] The suppression of recursion. Most recursive productions are difficult to read, especially for novices. [] The absence of diagrams. Diagrams are difficult to draw and modify, and cause definitions to "spread out." [] The avoidance of confusing conventions to denote options and sequences. The familiar use of both braces and square brackets can give rise to terse but complex productions. [] The use of prettyprinting to display logical structure. Proper spacing and alignment conventions can go a long way to illuminate the intent of the language being defined. While individually small, it is just such details that are important to users. has been heavily used in [Ledgard and Marcotty 1980]. The conventions are as follows: 1. Category names are written in lower case; programming language symbols in upper case (the usual convention) or in a different type face (e.g. underlined, boldface, or italics). 2. Square brackets enclose optional items. 3. Sequences of items are denoted by placing "..." after a category name orthe closing bracket of an optional item.