On 2022-06-11 13:38, slipbits wrote: > You nowhere define the syntax and grammar of Bison in one place.
Ah, but that is only the case if we are talking strictly about documentation. There is a grammar of Bison given in Bison in the source tree: https://git.savannah.gnu.org/cgit/bison.git/tree/src/parse-gram.y So the good news is that the grammar is formally specified as a grammar. Maybe a document version of this could be automatically extracted from the source via some text processing or something. How about: add a grammar pretty-printing facility into Bison itself, and that can then be applied to the file to geenrate a version that is pulled into the document. Now there is a form of pretty-printing in Bison: it can produce a report file ("y.output" in Yacc mode). This y.output contains a listing of all the rules, without the actions, reformatted. The grammar could perhaps be text-scraped out of that file, or some additional knobs could be implemented to bend that reporting feature into pretty-printing. There might be hacks in the grammar though to resolve ambiguities. There is a famous ambiguity in the Yacc grammar involving the terminating semicolon of a rule, which is actually optional. So that is to say, this is a valid grammar fragment, without the semicolon terminating either rule: a : b | c d : e The "d" is interpreted as the left nonterminal of a new rule, rather than a continuation of the a : c rule. That sort of thing needs explaining, if it happens not to follow from the grammar alone, but some tricks are used. > It is very important that all syntax and grammar rules be defined, > and equally important that definition be aggregated and complete, > and put into an accessible location. The scatter-shot revelation of > grammar and syntax should be avoided. A subset of Bison conforms to the POSIX Yacc specification. POSIX does have a Yacc grammar all in one place, expressed in Yacc. See the "Input Grammar" section here: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/yacc.html But of course that grammar has no actions and other clutter. Cheers ...