From a261d785d07eabda159fb6c3bf63d0c714960d87 Mon Sep 17 00:00:00 2001 From: Scott Owens Date: Fri, 26 Apr 2002 20:49:39 +0000 Subject: [PATCH] *** empty log message *** original commit: aedfa47e449e4927abce7efcb27d0ecbe3bb8e4e --- .../parser-tools/private-lex/token-syntax.ss | 33 +------------ collects/parser-tools/private-lex/token.ss | 48 ++++++++++++++----- 2 files changed, 38 insertions(+), 43 deletions(-) diff --git a/collects/parser-tools/private-lex/token-syntax.ss b/collects/parser-tools/private-lex/token-syntax.ss index 534e662..c963f54 100644 --- a/collects/parser-tools/private-lex/token-syntax.ss +++ b/collects/parser-tools/private-lex/token-syntax.ss @@ -3,38 +3,7 @@ ;; The things needed at compile time to handle definition of tokens - (provide make-terminals-def terminals-def-t terminals-def? define-tokens-helper) + (provide make-terminals-def terminals-def-t terminals-def?) (define-struct terminals-def (t)) - - (define (define-tokens-helper stx runtime empty?) - (syntax-case stx () - ((_ name (terms ...)) - (andmap identifier? (syntax->list (syntax (terms ...)))) - (datum->syntax-object - runtime - `(begin - (define-syntax ,(syntax name) - (make-terminals-def (quote-syntax ,(syntax (terms ...))))) - ,@(map - (lambda (n) - (if (eq? (syntax-object->datum n) 'error) - (raise-syntax-error - #f - "Cannot define a token named error." - stx)) - `(define (,(datum->syntax-object - n - (string->symbol - (format "token-~a" (syntax-object->datum n))) - n) - ,@(if empty? '() '(x))) - (make-token ',n ,(if empty? #f 'x)))) - (syntax->list (syntax (terms ...))))) - stx)) - ((_ ...) - (raise-syntax-error - #f - "must have the form (define-tokens name (symbol ...))" - stx)))) ) diff --git a/collects/parser-tools/private-lex/token.ss b/collects/parser-tools/private-lex/token.ss index 8e28c52..72967e4 100644 --- a/collects/parser-tools/private-lex/token.ss +++ b/collects/parser-tools/private-lex/token.ss @@ -1,22 +1,48 @@ #cs (module token mzscheme + (require-for-syntax "token-syntax.ss") + ;; Defining tokens - (require-for-syntax "token-syntax.ss") - (provide define-tokens define-empty-tokens make-token token-name token-value token?) (define-struct token (name value) (make-inspector)) - (define-syntax (define-tokens stx) - (syntax-case stx () - ((_ name ...) - (define-tokens-helper stx #'here #f)))) - - (define-syntax (define-empty-tokens stx) - (syntax-case stx () - ((_ name ...) - (define-tokens-helper stx #'here #t)))) + (define-syntaxes (define-tokens define-empty-tokens) + (let ((define-tokens-helper + (lambda (stx empty?) + (syntax-case stx () + ((_ name (terms ...)) + (andmap identifier? (syntax->list (syntax (terms ...)))) + (datum->syntax-object + #'here + `(begin + (define-syntax ,(syntax name) + (make-terminals-def (quote-syntax ,(syntax (terms ...))))) + ,@(map + (lambda (n) + (if (eq? (syntax-object->datum n) 'error) + (raise-syntax-error + #f + "Cannot define a token named error." + stx)) + `(define (,(datum->syntax-object + n + (string->symbol + (format "token-~a" (syntax-object->datum n))) + n) + ,@(if empty? '() '(x))) + (make-token ',n ,(if empty? #f 'x)))) + (syntax->list (syntax (terms ...))))) + stx)) + ((_ ...) + (raise-syntax-error + #f + "must have the form (define-tokens name (symbol ...)) or (define-empty-tokens name (symbol ...))" + stx)))))) + (values + (lambda (stx) (define-tokens-helper stx #f)) + (lambda (stx) (define-tokens-helper stx #t))))) )