PasteRack.org
Paste # 45720
2019-11-15 01:14:57

Fork as a new paste.

Paste viewed 280 times.


Embed:

error in deffne

  1. #lang racket
  2. (require (for-syntax racket/syntax))
  3.  
  4. (define-syntax (define-tokens-ext stx)
  5.   (syntax-case stx ()
  6.     [(_ id (fields ...))
  7.      (quasisyntax/loc stx
  8.        (begin
  9.          ; Define a constructor.
  10.          #,@(map
  11.              (lambda (x)
  12.                (let* [(local-name (car (syntax->list  x)))
  13.                      (local-fields (append (list 'name 'lexeme)
  14.                                            (if (< 1 (length (syntax->list  x)))
  15.                                                (cadr (syntax->list  x))
  16.                                                null)))
  17.                      (local-define-name (string->symbol (format "ext-token~a" local-name)))
  18.                      (local-args (append (list 'lexeme)
  19.                                            (if (< 1 (length (syntax->list  x)))
  20.                                                (cadr (syntax->list  x))
  21.                                                null)))
  22.                      ]
  23.                  #`(begin
  24.                  (define-struct #,local-name #,local-fields #:transparent)
  25.                  (define #,(append (list local-define-name) local-args)
  26.                      ((string->symbol (format "make-~" #,local-name)) #,local-name #,local-args)))))
  27.  
  28.              (syntax->list (syntax (fields ...))))))]))
  29.  
  30. (define-tokens-ext DataTokens ((WS (BOS correct mixed))
  31.                                (COMMA )
  32.                                (ID (lang correct ))))

=>