From c754bbc54fc29b52d757fc1500bbcb8dcafdfc23 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Fri, 10 Oct 2014 23:21:57 -0500 Subject: [PATCH] add a form of conditional right-hand sides to metafunctions in the spirit of those giant left curly braces that you sometimes see (and typeset them that way) --- .../redex-doc/redex/scribblings/ref.scrbl | 16 ++- pkgs/redex-pkgs/redex-lib/info.rkt | 2 +- .../redex-lib/redex/private/judgment-form.rkt | 105 +++++++------- .../redex/private/reduction-semantics.rkt | 46 ++++-- .../redex/private/core-layout.rkt | 4 + .../redex-pict-lib/redex/private/pict.rkt | 135 ++++++++++++++---- .../redex-test/redex/tests/bitmap-test.rkt | 10 +- .../tests/bmps-macosx/metafunction-TL.png | Bin 6913 -> 11854 bytes .../bmps-macosx/metafunctions-multiple.png | Bin 17917 -> 23494 bytes .../redex-test/redex/tests/tl-test.rkt | 18 +++ 10 files changed, 247 insertions(+), 89 deletions(-) diff --git a/pkgs/redex-pkgs/redex-doc/redex/scribblings/ref.scrbl b/pkgs/redex-pkgs/redex-doc/redex/scribblings/ref.scrbl index 433d7c0ea9..350c9356cc 100644 --- a/pkgs/redex-pkgs/redex-doc/redex/scribblings/ref.scrbl +++ b/pkgs/redex-pkgs/redex-doc/redex/scribblings/ref.scrbl @@ -1122,7 +1122,8 @@ reduce it further). (where/hidden pat @#,tttterm) (judgment-holds (judgment-form-id pat/term ...)) - (clause-name name)])]{ + (clause-name name) + (code:line or @#,tttterm)])]{ The @racket[define-metafunction] form builds a function on sexpressions according to the pattern and right-hand-side @@ -1219,8 +1220,19 @@ ensures that there is a unique match for that case. Without it, @racket[(term (- (x x) x))] would lead to an ambiguous match. -@history[#:changed "1.4" @list{Added @racket[#:post] conditions.}] +The @racket[or] clause is used to define a form of conditional +right-hand side of a metafunction. In particular, if any of the +@racket[where] or @racket[side-condition] clauses fail, then +evaluation continues after an @racket[or] clause, treating the +term that follows as the result (subject to any subsequent +@racket[where] clauses or @racket[side-condition]s. This construction +is equivalent to simply duplicating the left-hand side of the +clause, once for each @racket[or] expression, but signals to +the typesetting library to use a large left curly brace to group +the conditions in the @racket[or]. +@history[#:changed "1.4" @list{Added @racket[#:post] conditions.}] + #:changed "1.5" @list{Added @racket[or] clauses.}] } @defform[(define-metafunction/extension f language diff --git a/pkgs/redex-pkgs/redex-lib/info.rkt b/pkgs/redex-pkgs/redex-lib/info.rkt index c70f0fde7b..ec0f331e2d 100644 --- a/pkgs/redex-pkgs/redex-lib/info.rkt +++ b/pkgs/redex-pkgs/redex-lib/info.rkt @@ -18,4 +18,4 @@ (define pkg-authors '(robby bfetscher)) -(define version "1.4") +(define version "1.5") diff --git a/pkgs/redex-pkgs/redex-lib/redex/private/judgment-form.rkt b/pkgs/redex-pkgs/redex-lib/redex/private/judgment-form.rkt index ae731ba84e..ecf57142c1 100644 --- a/pkgs/redex-pkgs/redex-lib/redex/private/judgment-form.rkt +++ b/pkgs/redex-pkgs/redex-lib/redex/private/judgment-form.rkt @@ -1109,7 +1109,8 @@ (define-syntax (generate-lws stx) (syntax-case stx () - [(_ relation? seq-of-lhs seq-of-lhs-for-lw seq-of-tl-side-cond/binds seq-of-rhs side-condition-unquoted?) + [(_ relation? seq-of-lhs seq-of-lhs-for-lw seq-of-tl-side-cond/binds seq-of-rhs + side-condition-unquoted?) (with-syntax ([(rhs/lw ...) (syntax-case #'relation? () @@ -1121,55 +1122,61 @@ (map name-pattern-lws (syntax->list #'seq-of-lhs))] [((where/sc/lw ...) ...) ;; Also for pict, extract where bindings - (map (λ (hm) - (map - (λ (lst) - (syntax-case lst (unquote side-condition where) - [(form-name . _) - (judgment-form-id? #'form-name) - #`(make-metafunc-extra-side-cond #,(to-lw/proc lst))] - [(form-name . _) - (judgment-form-id? #'form-name) - #`(make-metafunc-extra-side-cond #,(to-lw/proc lst))] - [(where pat (unquote (f _ _))) - (and (or (identifier? #'pat) - (let ([l (syntax->list #'pat)]) - (and l (andmap identifier? (syntax->list #'pat))))) - (or (free-identifier=? #'f #'variable-not-in) - (free-identifier=? #'f #'variables-not-in))) - (with-syntax ([(ids ...) - (map to-lw/proc - (if (identifier? #'pat) - (list #'pat) - (syntax->list #'pat)))]) - #`(make-metafunc-extra-fresh - (list ids ...)))] - [(where pat exp) - #`(make-metafunc-extra-where - #,(to-lw/proc #'pat) #,(to-lw/proc #'exp))] - [(side-condition x) - #`(make-metafunc-extra-side-cond - #,(if (syntax-e #'side-condition-unquoted?) - (to-lw/uq/proc #'x) - (to-lw/proc #'x)))] - [maybe-ellipsis - (ellipsis? #'maybe-ellipsis) - (to-lw/proc #'maybe-ellipsis)])) - (visible-extras hm))) - (syntax->list #'seq-of-tl-side-cond/binds))] + (for/list ([hm (in-list (syntax->list #'seq-of-tl-side-cond/binds))]) + (define the-extras (visible-extras hm)) + (for/list ([lst (in-list the-extras)] + [next (if (null? the-extras) + '() + (append (cdr the-extras) (list #f)))]) + (syntax-case next (or) + [or (to-lw/proc lst)] + [else + (syntax-case lst (unquote side-condition where or) + [(form-name . _) + (judgment-form-id? #'form-name) + #`(make-metafunc-extra-side-cond #,(to-lw/proc lst))] + [(form-name . _) + (judgment-form-id? #'form-name) + #`(make-metafunc-extra-side-cond #,(to-lw/proc lst))] + [(where pat (unquote (f _ _))) + (and (or (identifier? #'pat) + (let ([l (syntax->list #'pat)]) + (and l (andmap identifier? (syntax->list #'pat))))) + (or (free-identifier=? #'f #'variable-not-in) + (free-identifier=? #'f #'variables-not-in))) + (with-syntax ([(ids ...) + (map to-lw/proc + (if (identifier? #'pat) + (list #'pat) + (syntax->list #'pat)))]) + #`(make-metafunc-extra-fresh + (list ids ...)))] + [(where pat exp) + #`(make-metafunc-extra-where + #,(to-lw/proc #'pat) #,(to-lw/proc #'exp))] + [(side-condition x) + #`(make-metafunc-extra-side-cond + #,(if (syntax-e #'side-condition-unquoted?) + (to-lw/uq/proc #'x) + (to-lw/proc #'x)))] + [or ''or] + [(clause-name name) + #''(clause-name name)] + [maybe-ellipsis + (ellipsis? #'maybe-ellipsis) + (to-lw/proc #'maybe-ellipsis)])])))] [(((where-bind-id/lw . where-bind-pat/lw) ...) ...) - (map (λ (clauses) - (for/fold ([binds '()]) ([clause (visible-extras clauses)]) - (syntax-case clause (where) - [(form-name . pieces) - (judgment-form-id? #'form-name) - (let*-values ([(mode) (judgment-form-mode (lookup-judgment-form-id #'form-name))] - [(_ outs) (split-by-mode (syntax->list #'pieces) mode)]) - (for/fold ([binds binds]) ([out outs]) - (append (name-pattern-lws out) binds)))] - [(where lhs rhs) (append (name-pattern-lws #'lhs) binds)] - [_ binds]))) - (syntax->list #'seq-of-tl-side-cond/binds))] + (for/list ([clauses (in-list (syntax->list #'seq-of-tl-side-cond/binds))]) + (for/fold ([binds '()]) ([clause (visible-extras clauses)]) + (syntax-case clause (where) + [(form-name . pieces) + (judgment-form-id? #'form-name) + (let*-values ([(mode) (judgment-form-mode (lookup-judgment-form-id #'form-name))] + [(_ outs) (split-by-mode (syntax->list #'pieces) mode)]) + (for/fold ([binds binds]) ([out outs]) + (append (name-pattern-lws out) binds)))] + [(where lhs rhs) (append (name-pattern-lws #'lhs) binds)] + [_ binds])))] [(((rhs-bind-id/lw . rhs-bind-pat/lw/uq) ...) ...) ;; Also for pict, extract pattern bindings (map (λ (x) (map (λ (x) (cons (to-lw/proc (car x)) (to-lw/uq/proc (cdr x)))) diff --git a/pkgs/redex-pkgs/redex-lib/redex/private/reduction-semantics.rkt b/pkgs/redex-pkgs/redex-lib/redex/private/reduction-semantics.rkt index 51ff1473b8..c56c1e4d3c 100644 --- a/pkgs/redex-pkgs/redex-lib/redex/private/reduction-semantics.rkt +++ b/pkgs/redex-pkgs/redex-lib/redex/private/reduction-semantics.rkt @@ -1256,13 +1256,37 @@ (list the-clause-name #'id))) (set! the-clause-name #'id) stuffs)] - [_ (cons stuff+name stuffs)]))) + [_ + (cons stuff+name stuffs)]))) (cons (cond [(not the-clause-name) #f] [(identifier? the-clause-name) (symbol->string (syntax-e the-clause-name))] [else the-clause-name]) (reverse stuff-without-clause-name)))) +(define-for-syntax (eliminate-metafunction-ors stx) + (define (is-not-or? x) + (syntax-case x (or) + [or #f] + [else #t])) + (apply + append + (for/list ([clause (in-list (syntax->list stx))]) + (syntax-case clause () + [(lhs . rhs+stuff) + (let () + (define split + (let loop ([lst (syntax->list #'rhs+stuff)]) + (define batch (takef lst is-not-or?)) + (cond + [(null? batch) '()] + [else + (define next (dropf lst is-not-or?)) + (if (pair? next) + (cons batch (loop (cdr next))) + (list batch))]))) + (map (λ (x) (cons #'lhs x)) split))])))) + (define-syntax (generate-metafunction stx) (syntax-case stx () [(_ orig-stx lang prev-metafunction-stx @@ -1288,11 +1312,17 @@ (define syn-error-name (syntax-e #'syn-error-name)) (define lang-nts (definition-nts #'lang #'orig-stx syn-error-name)) - (with-syntax ([(((original-names lhs-clauses ...) raw-rhses ...) ...) pats] - [(lhs-for-lw ...) (lhs-lws pats)]) + (with-syntax ([(((original-names lhs-clauses ...) raw-rhses ...) ...) + (eliminate-metafunction-ors #'pats-stx)] + [(lhs-for-lw ...) (lhs-lws pats)] + [(((_1 lhs-with-ors-intact ...) + rhs-with-ors-intact + stuff-with-ors-intact ...) ...) + pats]) (with-syntax ([((rhs stuff+names ...) ...) #'((raw-rhses ...) ...)] [(lhs ...) #'((lhs-clauses ...) ...)]) - (with-syntax ([((clause-name stuff ...) ...) (extract-clause-names #'((stuff+names ...) ...))]) + (with-syntax ([((clause-name stuff ...) ...) + (extract-clause-names #'((stuff+names ...) ...))]) (parse-extras #'((stuff ...) ...)) (with-syntax ([((syncheck-expr side-conditions-rewritten lhs-names lhs-namess/ellipses) ...) (map (λ (x) (rewrite-side-conditions/check-errs @@ -1345,7 +1375,7 @@ (path->relative-string/library (syntax-source lhs))) (syntax-line lhs) (syntax-column lhs))) - pats)] + (syntax->list #'(original-names ...)))] [(dom-syncheck-expr dom-side-conditions-rewritten (dom-names ...) dom-names/ellipses) @@ -1427,10 +1457,10 @@ ;; body of mf (generate-lws #f - (lhs ...) + ((lhs-with-ors-intact ...) ...) (lhs-for-lw ...) - ((stuff ...) ...) - (rhs ...) + ((stuff-with-ors-intact ...) ...) + (rhs-with-ors-intact ...) #t)) lang #t ;; multi-args? diff --git a/pkgs/redex-pkgs/redex-pict-lib/redex/private/core-layout.rkt b/pkgs/redex-pkgs/redex-pict-lib/redex/private/core-layout.rkt index 4cd6cb8814..8f312ded25 100644 --- a/pkgs/redex-pkgs/redex-pict-lib/redex/private/core-layout.rkt +++ b/pkgs/redex-pkgs/redex-pict-lib/redex/private/core-layout.rkt @@ -49,6 +49,10 @@ white-bracket-sizing apply-rewrites use-homemade-white-brackets + left-curly-bracket-upper-hook + left-curly-bracket-middle-piece + left-curly-bracket-lower-hook + curly-bracket-extension ;; for test suite build-lines diff --git a/pkgs/redex-pkgs/redex-pict-lib/redex/private/pict.rkt b/pkgs/redex-pkgs/redex-pict-lib/redex/private/pict.rkt index c9fe69cca3..6df8cee038 100644 --- a/pkgs/redex-pkgs/redex-pict-lib/redex/private/pict.rkt +++ b/pkgs/redex-pkgs/redex-pict-lib/redex/private/pict.rkt @@ -5,7 +5,8 @@ racket/match racket/pretty racket/set - (only-in racket/list drop-right last partition add-between) + (only-in racket/list drop-right last partition add-between + splitf-at) texpict/mrpict texpict/utils @@ -381,6 +382,9 @@ (define where-make-prefix-pict (make-parameter (lambda () (basic-text " where " (default-style))))) +(define otherwise-make-pict + (make-parameter (lambda () + (basic-text " otherwise" (default-style))))) (define (where-pict lhs rhs) ((where-combine) lhs rhs)) @@ -971,10 +975,7 @@ (define case-labels (map (λ (mf) (metafunc-proc-clause-names (metafunction-proc mf))) mfs)) (define eqns (select-mf-cases contracts all-eqns case-labels)) (define lhs/contracts (select-mf-cases contracts all-lhss case-labels)) - (define rhss (for/list ([eqn/contract (in-list eqns)]) - (if (pict? eqn/contract) - 'contract - (wrapper->pict (list-ref eqn/contract 2))))) + (unless (or (not current-linebreaks) (= (length current-linebreaks) (length eqns))) (error 'metafunction->pict @@ -1006,6 +1007,104 @@ (memq style '(up-down/compact-side-conditions left-right/compact-side-conditions left-right*/compact-side-conditions))) + + (define (handle-single-side-condition scs) + (define-values (fresh where/sc) (partition metafunc-extra-fresh? scs)) + (side-condition-pict + (foldl (λ (clause picts) + (foldr (λ (l ps) (cons (wrapper->pict l) ps)) + picts (metafunc-extra-fresh-vars clause))) + '() fresh) + (filter + values + (for/list ([thing (in-list where/sc)]) + (match thing + [(struct metafunc-extra-where (lhs rhs)) + (where-pict (wrapper->pict lhs) (wrapper->pict rhs))] + [(struct metafunc-extra-side-cond (expr)) + (wrapper->pict expr)] + [`(clause-name ,n) #f]))) + (cond + [vertical-side-conditions? + ;; maximize line breaks: + 0] + [compact-side-conditions? + ;; maximize line break as needed: + max-line-w/pre-sc] + [else + ;; no line breaks: + +inf.0]))) + + (define (build-brace-based-rhs stuff) + (define conds + (let loop ([stuff stuff]) + (define-values (before after) (splitf-at stuff (λ (x) (not (equal? x 'or))))) + (if (null? after) + (list before) + (cons before (loop (cdr after)))))) + (define last-line (- (length conds) 1)) + (define rhs+scs (for/list ([cond-line (in-list conds)] + [i (in-naturals)]) + (define rhs (wrapper->pict (car cond-line))) + (define scs + (if (and (= last-line i) (null? (cdr cond-line))) + ((otherwise-make-pict)) + (handle-single-side-condition (cdr cond-line)))) + (list rhs scs))) + (define rhs (map car rhs+scs)) + (define scs (map cadr rhs+scs)) + (define widest-rhs (apply max 0 (map pict-width rhs))) + (define widest-scs (apply max 0 (map pict-width scs))) + (add-left-brace + (apply vl-append + 2 + (for/list ([rhs (in-list rhs)] + [scs (in-list scs)]) + (htl-append (lbl-superimpose + rhs + (blank widest-rhs 0)) + (lbl-superimpose + scs + (blank widest-scs 0))))))) + + (define (add-left-brace pict) + (let loop ([i 0]) + (define extender + (apply + vl-append + (for/list ([_ (in-range i)]) + (basic-text curly-bracket-extension (default-style))))) + (define left-brace + (vl-append (basic-text left-curly-bracket-upper-hook (default-style)) + extender + (basic-text left-curly-bracket-middle-piece (default-style)) + extender + (basic-text left-curly-bracket-lower-hook (default-style)))) + (cond + [(< (pict-height pict) (pict-height left-brace)) + (define top-bottom-diff (- (pict-height left-brace) + (pict-height pict))) + (inset (refocus (hc-append left-brace pict) pict) + (pict-width left-brace) + (/ top-bottom-diff 2) + 0 + (/ top-bottom-diff 2))] + [else (loop (+ i 1))]))) + + (define rhss (for/list ([eqn/contract (in-list eqns)]) + (cond + [(pict? eqn/contract) + 'contract] + [else + (define sc-info (list-ref eqn/contract 1)) + (cond + [(member 'or sc-info) + (build-brace-based-rhs + (cons (list-ref eqn/contract 2) + (reverse sc-info)))] + [else + (wrapper->pict (list-ref eqn/contract 2))])]))) + (define max-line-w/pre-sc (and compact-side-conditions? (for/fold ([biggest 0]) ([lhs/contract (in-list lhs/contracts)] @@ -1029,6 +1128,7 @@ (pict-width rhs) (pict-width =-pict) (* 2 sep)))])))) + (define scs (for/list ([eqn (in-list eqns)]) (cond [(pict? eqn) #f] @@ -1036,29 +1136,8 @@ (define scs (reverse (list-ref eqn 1))) (cond [(null? scs) #f] - [else - (define-values (fresh where/sc) (partition metafunc-extra-fresh? scs)) - (side-condition-pict - (foldl (λ (clause picts) - (foldr (λ (l ps) (cons (wrapper->pict l) ps)) - picts (metafunc-extra-fresh-vars clause))) - '() fresh) - (map (match-lambda - [(struct metafunc-extra-where (lhs rhs)) - (where-pict (wrapper->pict lhs) (wrapper->pict rhs))] - [(struct metafunc-extra-side-cond (expr)) - (wrapper->pict expr)]) - where/sc) - (cond - [vertical-side-conditions? - ;; maximize line breaks: - 0] - [compact-side-conditions? - ;; maximize line break as needed: - max-line-w/pre-sc] - [else - ;; no line breaks: - +inf.0]))])]))) + [(member 'or scs) #f] + [else (handle-single-side-condition scs)])]))) (case mode [(horizontal) (define (adjust-for-fills rows) diff --git a/pkgs/redex-pkgs/redex-test/redex/tests/bitmap-test.rkt b/pkgs/redex-pkgs/redex-test/redex/tests/bitmap-test.rkt index 120b958ff6..7a5a0d84b7 100644 --- a/pkgs/redex-pkgs/redex-test/redex/tests/bitmap-test.rkt +++ b/pkgs/redex-pkgs/redex-test/redex/tests/bitmap-test.rkt @@ -182,7 +182,15 @@ [(TL 2) (a ,(term-let ((x (term 1))) (term x)) beside - below)]) + below)] + [(TL any) + 3333333333 + (where 3 any) + or + 2 + (where 2 any) + or + 0]) ;; this tests that term-let is sucked away properly ;; when the metafunction is rendered diff --git a/pkgs/redex-pkgs/redex-test/redex/tests/bmps-macosx/metafunction-TL.png b/pkgs/redex-pkgs/redex-test/redex/tests/bmps-macosx/metafunction-TL.png index 38c3a3b1b3f444777e3f567ec98504fcc2e4bf80..4746e42812ca23767c1f45b49c9bff862abfc364 100644 GIT binary patch literal 11854 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� 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 bLg8nl-IBv-<0RkqiNh$!s7hB#nuq=`=_YL_ literal 6913 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 oFL%BQYT#q)Fia0)WE6!~g&Q diff --git a/pkgs/redex-pkgs/redex-test/redex/tests/bmps-macosx/metafunctions-multiple.png b/pkgs/redex-pkgs/redex-test/redex/tests/bmps-macosx/metafunctions-multiple.png index d89e0455e208b9cb230ede0052c248830046fe72..441595ee3d7c449e3c82a8bd73e0559c804196a6 100644 GIT binary patch literal 23494 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 z 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 LtDnm{r-UW|o<5mw diff --git a/pkgs/redex-pkgs/redex-test/redex/tests/tl-test.rkt b/pkgs/redex-pkgs/redex-test/redex/tests/tl-test.rkt index 3e94ca1d4f..9a5516d405 100644 --- a/pkgs/redex-pkgs/redex-test/redex/tests/tl-test.rkt +++ b/pkgs/redex-pkgs/redex-test/redex/tests/tl-test.rkt @@ -1305,6 +1305,24 @@ (test (term (f (a b c))) 3) (test (term (f (a b))) #f)) +(let () + ;; 'or' in metafunctions + (define-language L) + + (define-metafunction L + [(f any ...) + three + (where (any_1 any_2 any_3) (any ...)) + or + two + (where (any_1 any_2) (any ...)) + or + something-else]) + + (test (term (f a b c)) (term three)) + (test (term (f a b)) (term two)) + (test (term (f a)) (term something-else))) + ; ; ;