DrDr changes based on emails after Check Up
svn: r16369
This commit is contained in:
parent
194e496e13
commit
4333342fce
|
@ -1,143 +0,0 @@
|
||||||
|
|
||||||
(module browse-deriv mzscheme
|
|
||||||
(require mzlib/class
|
|
||||||
mzlib/plt-match
|
|
||||||
mzlib/unit
|
|
||||||
mred
|
|
||||||
framework
|
|
||||||
mrlib/hierlist)
|
|
||||||
(require "../model/deriv.ss")
|
|
||||||
(provide (all-defined))
|
|
||||||
|
|
||||||
(define-signature browser^ (make-browser))
|
|
||||||
|
|
||||||
(define-signature node^
|
|
||||||
(;; type Node
|
|
||||||
|
|
||||||
;; node-children : Node -> (list-of Node)
|
|
||||||
node-children
|
|
||||||
|
|
||||||
;; node-summary-string : Node -> string
|
|
||||||
node-summary-string
|
|
||||||
|
|
||||||
;; node-display : Node text% -> void
|
|
||||||
node-display
|
|
||||||
))
|
|
||||||
|
|
||||||
(define deriv@
|
|
||||||
(unit
|
|
||||||
(import)
|
|
||||||
(export node^)
|
|
||||||
|
|
||||||
;; Node = (union Derivation Transformation)
|
|
||||||
|
|
||||||
;; node-children
|
|
||||||
(define (node-children node)
|
|
||||||
(match node
|
|
||||||
[(AnyQ mrule (e1 e2 tx next))
|
|
||||||
(list tx next)]
|
|
||||||
[(AnyQ transformation (e1 e2 rs me1 me2 locals))
|
|
||||||
null]
|
|
||||||
[(AnyQ p:define-syntaxes (e1 e2 rs rhs))
|
|
||||||
(list rhs)]
|
|
||||||
[(AnyQ p:define-values (e1 e2 rs rhs))
|
|
||||||
(list rhs)]
|
|
||||||
[(AnyQ p:if (e1 e2 rs full? test then else))
|
|
||||||
(if full?
|
|
||||||
(list test then else)
|
|
||||||
(list test then))]
|
|
||||||
[(AnyQ p:wcm (e1 e2 rs key value body))
|
|
||||||
(list key value body)]
|
|
||||||
[(AnyQ p:set! (e1 e2 rs id-rs rhs))
|
|
||||||
(list rhs)]
|
|
||||||
[(AnyQ p:set!-macro (e1 e2 rs deriv))
|
|
||||||
(list deriv)]
|
|
||||||
[(AnyQ p:begin (e1 e2 rs (AnyQ lderiv (es1 es2 derivs))))
|
|
||||||
derivs]
|
|
||||||
[(AnyQ p:begin0 (e1 e2 rs first (AnyQ lderiv (es1 es2 derivs))))
|
|
||||||
(cons first derivs)]))
|
|
||||||
|
|
||||||
|
|
||||||
;; node-summary-string
|
|
||||||
(define (node-summary-string node)
|
|
||||||
(match node
|
|
||||||
[($ pderiv e1 e2 prule)
|
|
||||||
"PDeriv"]
|
|
||||||
[($ mderiv e1 e2 mrule next)
|
|
||||||
"MDeriv"]
|
|
||||||
|
|
||||||
[($ mrule e1 e2 rs me1 me2 locals)
|
|
||||||
"MRule"]
|
|
||||||
[($ prule e1 e2 rs)
|
|
||||||
"PRule"]))
|
|
||||||
|
|
||||||
;; node-display
|
|
||||||
(define (node-display node text)
|
|
||||||
'...)
|
|
||||||
))
|
|
||||||
|
|
||||||
(define browser@
|
|
||||||
(unit
|
|
||||||
(import node^)
|
|
||||||
(export browser^)
|
|
||||||
|
|
||||||
(define callback-hierlist%
|
|
||||||
(class hierarchical-list%
|
|
||||||
(init-field callback)
|
|
||||||
(define/override (on-select i)
|
|
||||||
(callback i))
|
|
||||||
(super-new)))
|
|
||||||
|
|
||||||
(define browser%
|
|
||||||
(class object%
|
|
||||||
(init-field node)
|
|
||||||
(super-new)
|
|
||||||
|
|
||||||
(define frame (new frame% (label "Derivation browser") (min-width 400) (min-height 400)))
|
|
||||||
(define hpanel (new panel:horizontal-dragable% (parent frame)))
|
|
||||||
(define treeview (new callback-hierlist% (parent hpanel)
|
|
||||||
(callback (lambda (i) (on-item-select i)))))
|
|
||||||
(define details (new text%))
|
|
||||||
(define details-view (new editor-canvas% (parent hpanel) (editor details)))
|
|
||||||
|
|
||||||
(define current-node #f)
|
|
||||||
(define node=>item (make-hash-table))
|
|
||||||
(define item=>node (make-hash-table))
|
|
||||||
|
|
||||||
(define/private (init-tree)
|
|
||||||
(let loop ([node node] [parent treeview])
|
|
||||||
(let ([children (node-children node)])
|
|
||||||
(let ([item (if (pair? children)
|
|
||||||
(send parent new-list)
|
|
||||||
(send parent new-item))])
|
|
||||||
(hash-table-put! node=>item node item)
|
|
||||||
(hash-table-put! item=>node item node)
|
|
||||||
(send (send item get-editor)
|
|
||||||
insert (node-summary-string node))
|
|
||||||
(for-each (lambda (c) (loop c item)) children)
|
|
||||||
(when (pair? children) (send item open))))))
|
|
||||||
|
|
||||||
(define/private (on-item-select item)
|
|
||||||
(let ([node (hash-table-get item=>node item (lambda () #f))])
|
|
||||||
(unless (eq? node current-node)
|
|
||||||
(send details erase))
|
|
||||||
(when node
|
|
||||||
(node-display node details))))
|
|
||||||
|
|
||||||
(init-tree)
|
|
||||||
(send frame show #t)
|
|
||||||
(void)))
|
|
||||||
|
|
||||||
(define (make-browser node)
|
|
||||||
(new browser% (node node)))))
|
|
||||||
|
|
||||||
|
|
||||||
(define app@
|
|
||||||
(compound-unit
|
|
||||||
(import)
|
|
||||||
(link [((NODE node^)) deriv@]
|
|
||||||
[((BROWSER browser^)) browser@ NODE])
|
|
||||||
(export BROWSER)))
|
|
||||||
|
|
||||||
(define-values/invoke-unit app@ (export browser^))
|
|
||||||
)
|
|
|
@ -1,109 +0,0 @@
|
||||||
|
|
||||||
(module deriv-show mzscheme
|
|
||||||
(require texpict/mrpict
|
|
||||||
texpict/utils
|
|
||||||
mzlib/match
|
|
||||||
mzlib/pretty
|
|
||||||
mzlib/class
|
|
||||||
mred)
|
|
||||||
(require "../model/deriv.ss")
|
|
||||||
|
|
||||||
(define code-size 12)
|
|
||||||
|
|
||||||
(define (draw deriv)
|
|
||||||
(define (redraw canvas dc)
|
|
||||||
(draw-pict the-pict dc 10 10))
|
|
||||||
(define f (new frame% (label "Derivation") (width 200) (height 200)))
|
|
||||||
(define c (new canvas%
|
|
||||||
(parent f)
|
|
||||||
(style '(hscroll vscroll))
|
|
||||||
(paint-callback redraw)))
|
|
||||||
(define _ (dc-for-text-size (new bitmap-dc%)))
|
|
||||||
(define the-pict (show deriv))
|
|
||||||
(send c init-auto-scrollbars 1000 1000 0.0 0.0)
|
|
||||||
(send f show #t))
|
|
||||||
|
|
||||||
;; code : syntax -> pict
|
|
||||||
(define (code stx)
|
|
||||||
(let ([out (open-output-string)])
|
|
||||||
(print (syntax-object->datum stx) out)
|
|
||||||
(text (get-output-string out) null code-size)))
|
|
||||||
|
|
||||||
;; show : Derivation -> pict
|
|
||||||
(define (show deriv)
|
|
||||||
(match deriv
|
|
||||||
[($ pderiv e1 e2 p)
|
|
||||||
(VJ (show-prule p)
|
|
||||||
(J e1 e2))]
|
|
||||||
[($ mderiv e1 e2 mrule next)
|
|
||||||
(let ([top (A (show-mrule mrule) (show next))]
|
|
||||||
[bottom (J e1 e2)])
|
|
||||||
(vc-append 5
|
|
||||||
top
|
|
||||||
(hline (max (pict-width top) (pict-width bottom)) 1)
|
|
||||||
bottom))]))
|
|
||||||
|
|
||||||
(define (VJ top bottom)
|
|
||||||
(color-frame
|
|
||||||
(if top
|
|
||||||
(vc-append 5
|
|
||||||
top
|
|
||||||
(hline (max (pict-width top) (pict-width bottom)) 1)
|
|
||||||
bottom)
|
|
||||||
(vc-append (hline (pict-width bottom) 1)
|
|
||||||
bottom))
|
|
||||||
"gray"))
|
|
||||||
|
|
||||||
(define (show-mrule rule)
|
|
||||||
(match rule
|
|
||||||
[($ mrule e1 e2 _ _ resolves locals)
|
|
||||||
(hb-append (code e1) (text " -> " null code-size) (code e2))]))
|
|
||||||
|
|
||||||
(define (J e1 e2)
|
|
||||||
(colorize (hb-append (code e1) (text " => " null code-size) (code e2)) "blue"))
|
|
||||||
(define (A . args)
|
|
||||||
(apply hb-append 10 args))
|
|
||||||
|
|
||||||
(define (show-prule pr)
|
|
||||||
(match pr
|
|
||||||
[($ p:define-values e1 e2 rs rhs)
|
|
||||||
(show rhs)]
|
|
||||||
[($ p:define-syntaxes e1 e2 rs rhs)
|
|
||||||
(show rhs)]
|
|
||||||
[($ p:if e1 e2 rs full? test then else)
|
|
||||||
(if full?
|
|
||||||
(A (show test) (show then) (show else))
|
|
||||||
(A (show test) (show then)))]
|
|
||||||
[($ p:wcm e1 e2 rs key value body)
|
|
||||||
(A (show key) (show value) (show body))]
|
|
||||||
[($ p:set! _ _ _ _ rhs)
|
|
||||||
(show rhs)]
|
|
||||||
[($ p:set!-macro _ _ _ inner)
|
|
||||||
(show inner)]
|
|
||||||
[($ p:begin _ _ _ lderiv)
|
|
||||||
(show-lderiv lderiv)]
|
|
||||||
[($ p:begin0 _ _ _ deriv0 lderiv)
|
|
||||||
(A (show deriv0) (show-lderiv lderiv))]
|
|
||||||
[($ p:#%app _ _ _ lderiv)
|
|
||||||
(show-lderiv lderiv)]
|
|
||||||
[($ p:lambda _ _ _ renames body)
|
|
||||||
(show-bderiv body)]
|
|
||||||
;; case-lambda
|
|
||||||
;; let-values
|
|
||||||
;; let*-values
|
|
||||||
;; letrec-values
|
|
||||||
;; letrec-syntaxes+values
|
|
||||||
[($ prule e1 e2 rs)
|
|
||||||
#f #;(text "" null code-size)]))
|
|
||||||
|
|
||||||
(define (show-lderiv ld)
|
|
||||||
(match ld
|
|
||||||
[($ lderiv es1 es2 derivs)
|
|
||||||
(vc-append 5
|
|
||||||
(apply A (map show derivs))
|
|
||||||
(J es1 es2))]))
|
|
||||||
|
|
||||||
(define (show-bderiv bd)
|
|
||||||
(colorize (text "block" null code-size) "red"))
|
|
||||||
|
|
||||||
)
|
|
Loading…
Reference in New Issue
Block a user