From 024d9d45cf599c05bbade3723f1a4d6e9ddb0846 Mon Sep 17 00:00:00 2001 From: Scott Owens Date: Fri, 9 Nov 2001 10:06:31 +0000 Subject: [PATCH] *** empty log message *** original commit: 36bccc62d0555fc59aa6fddfe90b15012dd66c8f --- collects/parser-tools/lex.ss | 2 +- .../private-yacc/parser-builder.ss | 41 +++++++++++++------ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/collects/parser-tools/lex.ss b/collects/parser-tools/lex.ss index 49d3fe4..327fa6f 100644 --- a/collects/parser-tools/lex.ss +++ b/collects/parser-tools/lex.ss @@ -10,7 +10,7 @@ (provide lex define-lex-abbrev define-lex-abbrevs make-lex-buf get-position position-offset position-line position-col position? - define-tokens define-empty-tokens) + define-tokens define-empty-tokens token-value token-name token?) (define-syntax lex diff --git a/collects/parser-tools/private-yacc/parser-builder.ss b/collects/parser-tools/private-yacc/parser-builder.ss index 10e3570..4c5f170 100644 --- a/collects/parser-tools/private-yacc/parser-builder.ss +++ b/collects/parser-tools/private-yacc/parser-builder.ss @@ -12,19 +12,36 @@ (let* ((grammar (parse-input start end input-terms assocs prods runtime)) (table (build-table grammar filename)) (table-code - (cons 'vector - (map (lambda (action) + `((lambda (table-list) + (let ((v (list->vector table-list))) + (let loop ((i 0)) + (cond + ((< i (vector-length v)) + (let ((vi (vector-ref v i))) (cond - ((shift? action) - `(make-shift ,(shift-state action))) - ((reduce? action) - `(make-reduce ,(reduce-prod-num action) - ,(reduce-lhs-num action) - ,(reduce-rhs-length action))) - ((accept? action) - `(make-accept)) - (else action))) - (vector->list table)))) + ((list? vi) + (vector-set! v i + (cond + ((eq? 's (car vi)) + (make-shift (cadr vi))) + ((eq? 'r (car vi)) + (make-reduce (cadr vi) (caddr vi) (cadddr vi))) + ((eq? 'a (car vi)) (make-accept))))))) + (loop (add1 i))) + (else v))))) + (quote + ,(map (lambda (action) + (cond + ((shift? action) + `(s ,(shift-state action))) + ((reduce? action) + `(r ,(reduce-prod-num action) + ,(reduce-lhs-num action) + ,(reduce-rhs-length action))) + ((accept? action) + `(a)) + (else action))) + (vector->list table))))) (num-non-terms (length (grammar-non-terms grammar)))