I'm converting this PEG parser from R5RS scheme to CL:
http://dev.lshift.net/tonyg/json-scheme/
I'm having trouble (I think) deciphering how the following macro is expanded (esp. the 2nd line "(#t alternative) ...")
...
((_ #f "alt" nt body ((/ alternative ...) rest ...)) (packrat-check (packrat-parser #f "alts" nt (#t alternative) ...) (lambda (result) (packrat-parser #f "alt" nt body (rest ...)))))
...
Let's say the input is something simple, such as "...((x <- #\y (/ #\a #\b)) x) ... " (i.e. parse a 'y' followed by an 'a' or a 'b', assign 'y' to the variable x, then return that variable x).
Does someone know how to "read" this macro?
Or, can someone tell me the exact steps in getting any working implementation of R5RS scheme up on linux (mint/ubuntu/debian) or Win7 and display the expanded macro? (I seem to hit confusing roadblocks with racket, chicken, cpscm+scm2lisp).
Thanks pt
Hello Paul,
Getting Racket running on Ubuntu couldn't possibly be more difficult than "sudo apt-get install racket", could it? I'm running Ubuntu and "apt-cache show racket" gives me a package in the Universe repository.
In that pattern, "alternative ..." matches whatever is found after the forward slash in that subexpression; i.e. all the alternatives. Scheme is able to "multiply out" the "..." such that
(#t alternative) ...
expands out to
(#t alternative0) (#t alternative1) (#t alternative2) etc.
where alternative0 is the first item after the forward slash, alternative1 is the second, etc.
Vish
On Tue, Feb 19, 2013 at 9:56 AM, Paul Tarvydas paultarvydas@gmail.com wrote:
I'm converting this PEG parser from R5RS scheme to CL:
http://dev.lshift.net/tonyg/json-scheme/
I'm having trouble (I think) deciphering how the following macro is expanded (esp. the 2nd line "(#t alternative) ...")
...
((_ #f "alt" nt body ((/ alternative ...) rest ...)) (packrat-check (packrat-parser #f "alts" nt (#t alternative) ...) (lambda (result) (packrat-parser #f "alt" nt body (rest ...)))))
...
Let's say the input is something simple, such as "...((x <- #\y (/ #\a #\b)) x) ... " (i.e. parse a 'y' followed by an 'a' or a 'b', assign 'y' to the variable x, then return that variable x).
Does someone know how to "read" this macro?
Or, can someone tell me the exact steps in getting any working implementation of R5RS scheme up on linux (mint/ubuntu/debian) or Win7 and display the expanded macro? (I seem to hit confusing roadblocks with racket, chicken, cpscm+scm2lisp).
Thanks pt
toronto-lisp mailing list toronto-lisp@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/toronto-lisp