Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 40s
lib/maude/pretty.sx — mau/term->maude renders internal prefix terms back in Maude mixfix syntax driven by op forms; mau/red->maude / mau/rew->maude reduce-then-render. Output now reads as idiomatic Maude. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
83 lines
2.3 KiB
Plaintext
83 lines
2.3 KiB
Plaintext
;; lib/maude/pretty.sx — mixfix surface-syntax printer.
|
|
;;
|
|
;; term->str renders the internal prefix form (`_+_(s_(X), 0)`); this renders
|
|
;; terms back in Maude mixfix surface syntax (`((s X) + 0)`), driven by the
|
|
;; operator forms in the module signature. Fully parenthesised — unambiguous
|
|
;; rather than minimal. Constants and unknown ops fall back to prefix form.
|
|
|
|
(define
|
|
mau/render-forms
|
|
(fn
|
|
(m)
|
|
(let
|
|
((tbl {}))
|
|
(for-each
|
|
(fn
|
|
(op)
|
|
(dict-set! tbl (get op :name) (mau/op-form (get op :name))))
|
|
(mau/module-ops m))
|
|
tbl)))
|
|
|
|
(define
|
|
mau/render-args
|
|
(fn
|
|
(forms args)
|
|
(cond
|
|
((empty? args) "")
|
|
((empty? (rest args)) (mau/render-term forms (first args)))
|
|
(else
|
|
(str
|
|
(mau/render-term forms (first args))
|
|
", "
|
|
(mau/render-args forms (rest args)))))))
|
|
|
|
(define
|
|
mau/render-term
|
|
(fn
|
|
(forms t)
|
|
(cond
|
|
((mau/var? t) (mau/vname t))
|
|
((mau/app? t)
|
|
(let
|
|
((form (get forms (mau/op t))) (args (mau/args t)))
|
|
(cond
|
|
((empty? args) (mau/op t))
|
|
((and form (= (get form :kind) "infix") (= (len args) 2))
|
|
(str
|
|
"("
|
|
(mau/render-term forms (nth args 0))
|
|
" "
|
|
(get form :token)
|
|
" "
|
|
(mau/render-term forms (nth args 1))
|
|
")"))
|
|
((and form (= (get form :kind) "prefix") (= (len args) 1))
|
|
(str
|
|
"("
|
|
(get form :token)
|
|
" "
|
|
(mau/render-term forms (first args))
|
|
")"))
|
|
((and form (= (get form :kind) "postfix") (= (len args) 1))
|
|
(str
|
|
"("
|
|
(mau/render-term forms (first args))
|
|
" "
|
|
(get form :token)
|
|
")"))
|
|
(else (str (mau/op t) "(" (mau/render-args forms args) ")")))))
|
|
(else (str t)))))
|
|
|
|
(define
|
|
mau/term->maude
|
|
(fn (m t) (mau/render-term (mau/render-forms m) t)))
|
|
|
|
;; reduce / rewrite then render in surface syntax
|
|
(define
|
|
mau/red->maude
|
|
(fn (m src) (mau/term->maude m (mau/creduce-term m src))))
|
|
|
|
(define
|
|
mau/rew->maude
|
|
(fn (m src) (mau/term->maude m (mau/rewrite-term m src))))
|