#lang racket ;; printing s-exps as DCS and TDCS, plus examples of what DCS and TDCS look like (define (dcs l) (cond ((pair? l) (begin (display ".") (dcs (car l)) (dcs (cdr l)))) ((null? l) (display "0:")) ((symbol? l) (display (string-length (symbol->string l))) (display ":") (display l)))) (define (tdcs l) (cond ((pair? l) (begin (display ".") (tdcs (car l)) (tdcs (cdr l)))) ((null? l) (display "Z0:")) ((symbol? l) (display "A") (display (string-length (symbol->string l))) (display ":") (display l)) ((string? l) (display "S") (display (string-length l)) (display ":") (display l)) )) (dcs '(function T get_x () (body (return (const 3))))) (newline) ;; .8:function.1:T.5:get_x.0:..4:body..6:return..5:const.0:0:0:0: (tdcs '(function T get_x () (body (return (const 3))))) (newline) ;; .A8:function.A1:T.A5:get_x.Z0:..A4:body..A6:return..A5:const.Z0:Z0:Z0:Z0: (tdcs '(var-decl string (foo ""))) (newline) ;; .A8:var-decl.A6:string..A3:foo.S0:Z0:Z0: