diff --git a/racket/syndicate/syntax-classes.rkt b/racket/syndicate/syntax-classes.rkt new file mode 100644 index 0000000..1504a46 --- /dev/null +++ b/racket/syndicate/syntax-classes.rkt @@ -0,0 +1,21 @@ +#lang racket/base +;; Common syntax classes. + +(provide (for-syntax assertions + name)) + +(require (for-syntax racket/base)) +(require (for-syntax syntax/parse)) +(require (for-syntax syntax/srcloc)) + +(require "trie.rkt") + +(begin-for-syntax + (define-splicing-syntax-class assertions + (pattern (~seq #:assertions P0) #:attr P #'(pattern->trie ' P0)) + (pattern (~seq #:assertions* P)) ;; P should be an expression yielding a trie + (pattern (~seq) #:attr P #'trie-empty)) + + (define-splicing-syntax-class name + (pattern (~seq #:name N)) + (pattern (~seq) #:attr N #'#f)))