PasteRack.org
Paste # 29560
2019-11-14 23:55:48

Fork as a new paste.

Paste viewed 279 times.


Embed:

convert into define-syntax

  1. #lang racket
  2. (define macro-def '(DataTokens ((WS (BOS correct mixed))
  3.                                 (COMMA )
  4.                                 (ID (lang correct )))))
  5.  
  6. (define (declare-token-struct data)
  7.   (let [(token-name (string->symbol (format "token-~a" (car data))))
  8.         (fields  (append (list 'name 'value) (if (< 1 (length data)) (cadr data) null)))]
  9.      (list
  10.          'define-struct  token-name
  11.           fields '#:transparent )))
  12.  
  13. (define (declare-token-constructor data)
  14.   (let [(define-name (string->symbol (format "ext-token-~a" (car data))))
  15.         (struct-name (string->symbol (format "make-token-~a" (car data))))
  16.         (token-name (string->symbol (format "~a"  (car data))))
  17.         (fields  (append (list 'name 'value) (if (< 1 (length data)) (cadr data) null)))]
  18.  
  19.      (list 'define  (append  (list define-name) (cdr fields))
  20.           (flatten (append (list struct-name token-name (cdr fields)))))))
  21.  
  22.  
  23. (define (define-tokens-ext x)
  24.   (append
  25.   (map declare-token-struct (cadr x))
  26.   (map declare-token-constructor (cadr x))
  27.   ))

=>