syntax/parse: fix bug that disabled opt, improve debugging

This commit is contained in:
Ryan Culpepper 2016-03-23 10:09:53 -04:00
parent cf595678f6
commit 25b2ec2e03
2 changed files with 29 additions and 19 deletions

View File

@ -55,14 +55,19 @@
;; ----
(define (optimize-matrix0 rows)
(define now (current-inexact-milliseconds))
(when (and DEBUG-OPT-SUCCEED (> (length rows) 1))
(eprintf "\n%% optimizing (~s):\n" (length rows))
(pretty-write (matrix->sexpr rows) (current-error-port)))
(define result (optimize-matrix rows))
#|
(when DEBUG-OPT-SUCCEED
(let ([sexpr (matrix->sexpr result)])
(unless (equal? (car sexpr) 'MATCH)
(eprintf "%% optimized matrix (~s):\n" (length rows))
(pretty-write (matrix->sexpr result) (current-error-port)))))
|#
(define then (current-inexact-milliseconds))
(when (and DEBUG-OPT-SUCCEED (> (length rows) 1))
(cond [(= (length result) (length rows))
(eprintf "%% !! FAILED !! (~s ms)\n\n" (floor (- then now)))]
[else
(eprintf "==> (~s ms)\n" (floor (- then now)))
(pretty-write (matrix->sexpr result) (current-error-port))
(eprintf "\n")]))
result)
;; optimize-matrix : (listof pk1) -> Matrix
@ -113,12 +118,12 @@
;; pattern->partitioner : pattern -> (values (pattern -> boolean) ((listof pk1) -> PK))
(define (pattern->partitioner pat1)
(match pat1
[(pat:pair proper? attrs head tail)
[(pat:pair attrs proper? head tail)
(values (lambda (p) (and (pat:pair? p) (eq? (pat:pair-proper? p) proper?)))
(lambda (rows)
(when DEBUG-OPT-SUCCEED
(eprintf "-- accumulated ~s rows like ~e\n" (length rows) (pattern->sexpr pat1)))
(cond [(> (length rows) 1)
(when DEBUG-OPT-SUCCEED
(eprintf "** pairs (~s)\n" (length rows)))
(pk/pair proper?
(optimize-matrix
(for/list ([row (in-list rows)])
@ -132,9 +137,9 @@
[(? pattern-factorable?)
(values (lambda (pat2) (pattern-equal? pat1 pat2))
(lambda (rows)
(when DEBUG-OPT-SUCCEED
(eprintf "-- accumulated ~s rows like ~e\n" (length rows) (pattern->sexpr pat1)))
(cond [(> (length rows) 1)
(when DEBUG-OPT-SUCCEED
(eprintf "** factored(~s): ~e\n" (length rows) (syntax->datum #`#,pat1)))
(pk/same pat1
(optimize-matrix
(for/list ([row (in-list rows)])
@ -372,7 +377,6 @@
;; ----
#|
(define (matrix->sexpr rows)
(cond [(null? rows) ;; shouldn't happen
'(FAIL)]
@ -386,7 +390,7 @@
(cons 'MATCH (map pattern->sexpr pats))]
[(pk/same pat inner)
(list 'SAME (pattern->sexpr pat) (matrix->sexpr inner))]
[(pk/pair inner)
[(pk/pair proper? inner)
(list 'PAIR (matrix->sexpr inner))]
[(pk/and inner)
(list 'AND (matrix->sexpr inner))]))
@ -404,9 +408,14 @@
[(? pat:literal?) `(quote ,(syntax->datum (pat:literal-id p)))]
[(pat:datum _as datum) datum]
[(? pat:action?) 'ACTION]
[(pat:pair _as _p? head tail)
[(pat:pair _as '#t head tail)
(cons (pattern->sexpr head) (pattern->sexpr tail))]
[(pat:pair _as '#f head tail)
(list '~pair (pattern->sexpr head) (pattern->sexpr tail))]
[(pat:head _as head tail)
(cons (pattern->sexpr head) (pattern->sexpr tail))]
[(pat:dots _as (list eh) tail)
(list* (pattern->sexpr eh) '... (pattern->sexpr tail))]
[(ehpat _as hpat '#f)
(pattern->sexpr hpat)]
[_ 'PATTERN]))
|#

View File

@ -477,10 +477,11 @@ Conventions:
(define-syntax (first-desc:matrix stx)
(syntax-case stx ()
[(fdm (#s(pk (pat1 . pats) k)))
[(fdm (#s(pk1 (pat1 . pats) k)))
#'(first-desc:S pat1)]
[(fdm (pk ...))
;; FIXME
[(fdm (#s(pk/same pat1 pks)))
#'(first-desc:S pat1)]
[(fdm (pk ...)) ;; FIXME
#'#f]))
;; ----