Skip to content

Commit

Permalink
add symbol table demo file
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelballantyne committed Mar 8, 2024
1 parent 01490b4 commit cf1da6e
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions demos/symbol-tables.rkt
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#lang racket

(module lang racket
(require "../main.rkt")
(provide my-define my-ref Number List)

(begin-for-syntax
(define-persistent-symbol-table types))

(syntax-spec
(nonterminal type
Number
(List t:type))

(binding-class my-var)

(host-interface/definition
(my-define x:my-var t:type)
#:binding (export x)
#:lhs [(symbol-table-set! types #'x (syntax->datum #'t))
#'x]
#:rhs [#'7])

(host-interface/expression
(my-ref x:my-var t:type)
(when (not (equal? (symbol-table-ref types #'x) (syntax->datum #'t)))
(raise-syntax-error #f "type error" #'x))
#'x)))

(module def racket
(require (submod ".." lang))
(provide x)
(my-define x Number)
;; =>
#;(begin
(define-syntax x (syntax-spec-binding my-var))
(define x^ 7)))

(module ref racket
(require (submod ".." lang) (rename-in (submod ".." def) [x y]))
(my-ref y (List Number))
;; =>
#;x^)

(require 'ref)

#;(
(my-define x t)
->
(begin
(define x^ 7)
(begin-for-syntax
(free-id-table-set! ids #'x #'x^)))

)

0 comments on commit cf1da6e

Please sign in to comment.