On Thu, Jul 8, 2010 at 5:29 AM, Andy Wingo <wi...@pobox.com> wrote: > Hi Michael, > > I am travelling currently, so a bit of asynchronicity in the reply :) > > On Mon 05 Jul 2010 07:05, Michael Lucy <michaelgl...@gmail.com> writes: > >> I finally got things into a usable state, so I pushed out what I have >> to origin/mlucy. > > Great news! > >> Files I've added so far: >> guile/modules/ice-9/peg.scm (I assume this is the right place to put this?) > > Probably, yes, for parts of PEG to be available as macros and > procedures. You would probably want a language implementation as well, > for string-based PEGs. > >> PEG compiler: Works for all the grammars I've tested, no known bugs. >> Currently compiles to Scheme code rather than Tree-IL for debugging. > > That is the right thing to do. Most of PEG should be available through > macros and procedures. > >> Comments: Pretty good I think, but I could stand to have more. > > Yes, it readable at a quick glance. > >> External documentation: None so far. > > A .texi file will be good, alongside the LALR(1) parser.
Working on this now; should be done soon. > >> Syntactic Sugar: Canonical string-based PEGs can be parsed just fine. > > Cool! > >> Testing: Small test suite. Needs to be standardized with the other .test >> files. > > Great. > >> Benchmarks: None so far, but I haven't really done any optimization so >> I'd bet it performs poorly. > > Well, it's good to have work left to do :) > >> Problems: >> >> 1. PEG compiler compiles to scheme code rather than TREE-IL, and uses >> some custom pieces of syntax that I then have to export. I've been >> meaning to ask, how big a deal is this? I originally had it compile >> to Scheme while I was debugging things, but the Scheme gets compiled >> down to TREE-IL form, right? Should I fix it to compile straight to >> TREE-IL anyway rather than just finding a way to get around having to >> export all that syntax? > > No it should compile to Scheme. However the biggest problem with your > code is that it is implemented with define-macro. You should change it > to be implemented with syntax-case. Please let me know if you need help. > > Syntax-case is a bit trickier in some ways than define-macro, but it's > simpler in others (e.g., no need for your `safe-bind' macro). Check out > "Macros" in the manual (from git) and tell me what's confusing there; it > was only fleshed out with info on syntax-case recently. The documentation looks pretty straightforward. This will probably take me a bit; some of the translations look a little complicated. This will also solve my current problem of having to export a bunch of macros for the compiled PEGs to work. I've been thinking it might be good to work on the benchmarks first--once I understand where the speed bottlenecks are I'll have to rewrite some of the macros anyway, and it would probably be easier to rewrite them as syntax-case macros then instead of doing it twice. If you'd rather I translate them first, though, I'm happy to. Sorry I didn't do it this way in the first place. > >> 2. Tests aren't standardized (peg.test looks nothing like the other >> .test files). > > This isn't a big deal > >> 3. This: >> >> scheme@(guile-user)> (use-modules (ice-9 peg)) >> ;;; note: source file /home/zededarian/guile/module/ice-9/peg.scm >> ;;; newer than compiled >> /home/zededarian/guile/cache/guile/ccache/2.0-0.R-LE-4/home/zededarian/guile/module/ice-9/peg.scm.go >> ;;; note: autocompilation is enabled, set GUILE_AUTO_COMPILE=0 >> ;;; or pass the --no-autocompile argument to disable. >> ;;; compiling /home/zededarian/guile/module/ice-9/peg.scm >> ;;; WARNING: compilation of /home/zededarian/guile/module/ice-9/peg.scm >> failed: >> ;;; key wrong-type-arg, throw args ("vm-debug-engine" "Wrong type to >> apply: ~S" (#f) (#f)) >> >> Somehow it works fine despite the warnings. Can anybody shed light on >> what this means? > > Dunno! We'll look at it after getting the macro situation sorted > out. You can try: > > (use-modules (system base compile)) > (compile-file "module/ice-9/peg.scm") > > and see where the debugger leaves you. Turns out I can fix this by wrapping my entire file in an (eval-when (compile load eval) ...) form. Is this one of those fixes that's going to haunt me down the line? > >> 5. The pretty-print module doesn't get loaded when peg does, and some >> of my functions use it. I have: >> >> :use-module (ice-9 pretty-print) >> >> in my define-module form at the top of peg.scm; shouldn't that take >> care of it? > > Yep, that should work. > >> Any thoughts or comments? I'm sorry I didn't get this into a branch earlier. > > Heh, no problem. I'm looking forward to a lean mean PEG parsing machine! > > Andy > -- > http://wingolog.org/ >