Basically, an expository paper about implementing a DSL—specifically, a regex automata DSL—using Racket (then DrScheme)‘s hygienic macro system. The benefit of doing this is that we can abstract over implementation. The paper is a pedagogic example of the use of macros!

Basically, Racket becomes a compiler from a language for automata to Racket source code.

In racket, syntax-rules is basically macro pattern-matching. Its first argument is a set of symbols to treat literally. We then have a bunch of pattern matching things, and what to generate based on it.

(define-syntax process-state
  (syntax-rules (->)
	[(_ (a -> b) ...) body...]))