Guile Syntax PArse should work with guile 2.0.4 and higher Put the syntax directory in the load pathdirectory and then use (use-modules (syntax parse)) For documentation see the racket documentation at http://docs.racket-lang.org/syntax/stxparse.html Examples can be seen in syntax/parse/test.scm There are some deviations from the racket syntax, * there is no notion of phases in guile * regexp convetions assumes a regexp literal, use strings representing the regexp in stead * define-syntax-class, define-syntax-class-splicing, define-conventions and define-literal-set cannot be used for local definitions in stead use corresponding with-syntax-class, with-syntax-class-splicing, with-syntax-conventions, with-syntax-literal-set it's the same syntax but with the usual extra argument e.g. (define-syntax-class a ...) ... => (with-syntax-class ((a ...) ...) code ...) For the case with many with statement we can do as well (with-syntax-data ((class a ...) (splicing b ...) (literal-set c ...) (conventions d ...)) code ...) e.g. any combinations is allowd. This has * functionality like let* and is a little suger end ekvivalent to using the more specific with statements but with the benefit of shallow nesting. * In logic that could be a general value if the expression form is either (syntax .) or (quasisyntax .) then the expresion will be assumed to be a syntax and a implicit with-syntax is issued. It's unclear how this is controlled in racket. * struct matching is not suported, guile does not handle structs well when inserted as a datum for syntax objects there are two reasons 1. struct literals cannot be handled as atom data in the .go file but always has to be constructed at loading 2. to destruct a struct one would want to be able to do it as with a list with stx-car stx-cdr etc, these accessors handles syntax information and location information, a pure syntax-e and a struct accessor looses syntax features and render using struct elements unuseful. Use lists instead. As a conclusion we do not support these feature in guile-syntax-parse until guile get's the needed features. * similar argument applies to boxes. * kernal-literals literal set is not supported because this is a racket feature * contracts are not supported and the experimental features are not supported * the experimental features are not supported