Hi, what do you think about dsl version using map? Nice Idea was proposed here http://www.reddit.com/r/Clojure/comments/1djbio/growing_a_lanugage_with_clojure_and_instaparse/c9qwv4d
On Tuesday, April 9, 2013 12:41:38 PM UTC+3, puzzler wrote: > > On Tue, Apr 9, 2013 at 1:33 AM, Tassilo Horn <ts...@gnu.org > <javascript:>>wrote: > >> Nice, but providing the grammar as a plain string looks somewhat >> unnatural to me. Why not something like this (parser being a macro)? >> >> (def as-and-bs >> (parser >> S = AB* . >> AB = A B . >> A = "a" + . >> B = "b" + .)) >> >> I.e., symbols denote non-terminals, strings denote terminals, and the >> dot indicates the end of a rule. >> >> Bye, >> Tassilo >> > > I played around with that, but even if you suppress evaluation by using a > macro, Clojure's reader makes strong assumptions about certain symbols. > For example, it is standard in EBNF notation for {} to mean zero-or-more. > But if you include {A B C} in your grammar using the macro approach, > Clojure's reader will throw an error because it treats {} as a map and > expects an even number of forms to follow. That was the main reason, but > it also makes the notation much more sensitive to whitespace (for example, > AB * versus AB*). Gradually, those little issues start making it look less > and less like traditional notation. There's something really nice about > just being able to copy and paste a grammar off of a website and have it > just work. > > I understand where you're coming from, though. It definitely is part of > the Clojure culture to avoid string representations for many kinds of data > (e.g., SQL queries). We do accept it for regular expressions, and for > things like #inst "2011-12-31T19:00:00.000-05:00", though, and that's the > kind of feel I was going for. Would it be more psychologically palatable > to type: > #insta/parser "S = 'a' 'b'" > rather than > (insta/parser "S = 'a' 'b'") > ? > > What do you think would be gained by making it a macro? From my > perspective, a macro is essentially just a string that is being processed > by the Clojure reader (and thus subject to its constraints). If the > grammar were expressed in the way you propose, is it any easier to build up > a grammar programmatically? Is it any easier to compose grammars? If > anything, I think it might be harder. > > Thanks for the comments, > > Mark > -- -- 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.