Hello Mark, I have few suggestions: 1. I was going through the tutorial and comparing EBNF and ABNF grammars. ABNF adds Bounded Repetition 3*5 A. Is there any chance of adding it also to EBNF? I don't know, how the syntax would be, but it can be useful at times. Repetition of characters can be done inside regular expression. Repetition of rules can be done also - 3*5 A would be: S = A A A A? A? Repetition of 100*120 A is not practical to encode like this anymore. I know about the combinators: {:S (rep 100 120 (nt :A))} and mixing of grammars: (abnf "S = 100*130 A") but still, it would be nice to be able to do it inside the EBNF string.
Reading through the: http://en.wikipedia.org/wiki/Ebnf 2. I found that EBNF implements an exception operator - http://en.wikipedia.org/wiki/Ebnf#Table_of_symbols used for example like this: string = '"' , { all characters - '"' }, '"' ; Negative lookahead can be used instead string = '"' , { !'"' all characters }, '"' ; Just wanted to let you know about this difference. I can imagine that there many modifications of EBNF grammar out there :-) 3. Returning back to the point 1. and reading http://en.wikipedia.org/wiki/Ebnf#Conventions There actually is a way, how to express repetitions in EBNF: aa = "A"; bb = 3 * aa, "B"; cc = 3 * [aa], "C"; dd = {aa}, "D"; ee = aa, {aa}, "E"; ff = 3 * aa, 3 * [aa], "F"; gg = {3 * aa}, "G"; Again, don't know if the syntax is optimal. ABNF and regular expressions define it better, in my opinion. Thank you for your good work! Frantisek On Tuesday, May 14, 2013 10:13:52 AM UTC+2, puzzler wrote: > > Instaparse is an easy-to-use, feature-rich parser generator for Clojure. > The big idea behind instaparse is to make it simple to convert grammars to > parsers without needing to know the idiosyncrasies of LL1, LALR, and other > esoteric grammar restrictions imposed by most parser generators. > > When I announced instaparse a little over a month ago, I imagined that I > had packed so many features into it, that surely there was nothing more > that anyone could possibly want. Oh, how naive I was :) . Within a few > days, there were a half-dozen great enhancement ideas posted on the github > site. > > Here are the highlights of the new 1.1.0 release: > > 1. Support for comments in the grammar. (This was by far the most popular > request.) > > 2. A new front-end for ABNF grammars. ABNF is a syntax popular for > carefully defining protocols in formal specs. Instaparse's support for > ABNF means that it is a simple copy-paste exercise to turn these > specifications into an executable parser. > > 3. The ability to convert EBNF and ABNF *fragments* into Clojure data > structures that can be easily merged with one another and with data > structures built by the combinator library. > > https://github.com/Engelberg/instaparse for full feature list and > extensive tutorial. > https://github.com/Engelberg/instaparse/blob/master/CHANGES.md for a list > of changes since the last version. > https://github.com/Engelberg/instaparse/blob/master/docs/ABNF.md for > detailed docs about the new ABNF syntax. > > It seems that whenever instaparse comes up, there is an outcry from people > who have a visceral reaction against the notion of building a parser from a > *string specification* of a grammar. So I want to be clear up front that > instaparse supports *three *input formats that you can freely > mix-and-match: EBNF strings, ABNF strings, and Clojure data structures. > String input is particularly handy since most grammars are already written > down somewhere in one of these two notations, but the data structures are > an option if you need them. Instaparse also supports two output formats: > hiccup and enlive. > > This release focused mostly on adding new features; the next version will > primarily be another round of performance tuning. If you want to follow > along and help test as I try out new optimization strategies, keep an eye > on the 1.2.0-SNAPSHOT branch: > https://github.com/Engelberg/instaparse/tree/v1.2 > > Special thanks to Alex Engelberg who implemented the new ABNF input > format, and David Powell and Peter Monks who suggested the feature and > helped test it. > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.