Hi everyone, I'm pondering about how to write something in the cleanest/most efficient way. Yes, I know, it's basic stuff, but neveretheless. Look at this grammar:
------------------------------------------------------ FirstProlog: /* empty */ | FirstPrologPart FirstPrologPart | FirstPrologPart FirstPrologPart: DefaultNamespaceDecl | Setter | NamespaceDecl | Foo | Bar ------------------------------------------------------ In other words, this grammar (intentionally) allows zero or more DefaultNAmespaceDecl, Setter or NamespaceDecl in arbitrary order. For example: "Setter, Setter, NamespaceDecl", or simply "<empty>". Here's another version, which as far as I can tell, achieves the same: ------------------------------------------------------ FirstProlog: /* empty */ | FirstProlog DefaultNamespaceDecl | FirstProlog Setter | FirstProlog NamespaceDecl | FirstProlog Foo | FirstProlog Bar ------------------------------------------------------ The second version is perhaps more compact while on the other hand being repetitive. I wonder, what is the best way to write the above? What is fastest? What is most beautiful? What do you prefer and why? Also, is it possible to with Bison grammar specify that an terminal may appear in any order among other terminals, but it may not occur more than once? For example, in the above grammar, that "NamespaceDecl" can only appear once(be it after two Setters or between a DefaultNamespaceDecl and a Setter, for example). Of course, if such things aren't possible I can always add business logic and error out if a violation is detected, but it would be nice to push it down in the grammar. Cheers, Frans _______________________________________________ Help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison