<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I have written a PEG parser library in the Dylan language, and I am happy enough with it to announce it on this list.<div><br></div><div><div><ul class="MailOutline"><li>Documentation: <a href="http://wiki.opendylan.org/wiki/view.dsp?title=PEG%20Parser%20Library">http://wiki.opendylan.org/wiki/view.dsp?title=PEG Parser Library</a></li><li>Source code: <a href="http://www.opendylan.org/cgi-bin/viewvc.cgi/trunk/libraries/utilities/peg-parser/">http://www.opendylan.org/cgi-bin/viewvc.cgi/trunk/libraries/utilities/peg-parser/</a></li></ul></div><div><br></div><div>I think it is about as capable as Rats! and Treetop. It is not a parser generator, but rather a parser library to be called upon directly by a program or library. It caches user-specified productions (as opposed to automatically determining the best productions to cache, or caching all productions), supports grammar attributes, and allows user actions. I think that left-recursive parsing requires all productions to be cached, so it does not support that feature. It is not limited to working with characters, but rather relies on user-supplied functions to parse terminals. These functions can also be created for intermediate productions within a parse tree, allowing, for example, call-outs to a secondary parser for specific sections of code, or sophisticated error-recovery techniques.</div><div><div><br></div><div><div>Take a look. If you've any questions or comments, I'd be pleased to discuss it.</div><div><br></div></div><div>I've used it for special-purpose parsing of the Dylan language itself and for parsing a plain-text markup format.</div><div><br></div><div><ul class="MailOutline"><li>As used for markup parsing: <a href="http://www.opendylan.org/cgi-bin/viewvc.cgi/trunk/libraries/doctower/code/markup-parser-lib/markup-parser/">http://www.opendylan.org/cgi-bin/viewvc.cgi/trunk/libraries/doctower/code/markup-parser-lib/markup-parser/</a></li></ul><div><br></div></div></div></div></body></html>