83 lines
3.6 KiB
Racket
83 lines
3.6 KiB
Racket
|
#lang racket
|
||
|
(require "semantics.rkt")
|
||
|
(provide greater-than
|
||
|
less-than
|
||
|
plus
|
||
|
minus
|
||
|
period
|
||
|
comma
|
||
|
colon
|
||
|
brackets
|
||
|
(rename-out [my-module-begin #%module-begin]))
|
||
|
|
||
|
;; The current-state is a parameter used by the
|
||
|
;; rest of this language.
|
||
|
(define current-state (make-parameter (new-state)))
|
||
|
|
||
|
;; Every module in this language will make sure that it
|
||
|
;; uses a fresh state.
|
||
|
(define-syntax-rule (my-module-begin body ...)
|
||
|
(#%plain-module-begin
|
||
|
(parameterize ([current-state (new-state)])
|
||
|
body ...)))
|
||
|
|
||
|
(define-syntax-rule (greater-than)
|
||
|
(increment-ptr (current-state)))
|
||
|
|
||
|
(define-syntax-rule (less-than)
|
||
|
(decrement-ptr (current-state)))
|
||
|
|
||
|
(define-syntax-rule (plus)
|
||
|
(increment-byte (current-state)))
|
||
|
|
||
|
(define-syntax-rule (minus)
|
||
|
(decrement-byte (current-state)))
|
||
|
|
||
|
(define-syntax-rule (period)
|
||
|
(write-byte-to-stdout (current-state)))
|
||
|
|
||
|
(define-syntax-rule (comma)
|
||
|
(read-byte-from-stdin (current-state)))
|
||
|
|
||
|
(define-syntax-rule (colon)
|
||
|
(write-number-to-stdout (current-state)))
|
||
|
|
||
|
(define-syntax-rule (brackets body ...)
|
||
|
(loop (current-state) body ...))
|
||
|
|
||
|
#|
|
||
|
(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)
|
||
|
(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)
|
||
|
(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)
|
||
|
(period)(minus)(minus)(minus)(period)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(period)(period)(plus)(plus)(plus)(period)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)
|
||
|
(minus)(plus)(plus)(plus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)
|
||
|
(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)
|
||
|
(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(plus)(plus)(plus)(plus)(plus)(plus)
|
||
|
(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(plus)(period)
|
||
|
(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)
|
||
|
(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)(comma)(period)(brackets(comma)(period))
|
||
|
|#
|
||
|
|
||
|
#|
|
||
|
;Hello World!
|
||
|
(plus)(plus)(plus)(plus)(plus) (plus)(plus)(plus)(plus)(plus)
|
||
|
(brackets
|
||
|
(greater-than) (plus)(plus)(plus)(plus)(plus) (plus)(plus)
|
||
|
(greater-than) (plus)(plus)(plus)(plus)(plus) (plus)(plus)
|
||
|
(plus)(plus)(plus) (greater-than) (plus)(plus)(plus)
|
||
|
(greater-than) (plus) (less-than)(less-than)(less-than)
|
||
|
(less-than) (minus))
|
||
|
(greater-than) (plus)(plus) (period)
|
||
|
(greater-than) (plus) (period)
|
||
|
(plus)(plus)(plus)(plus)(plus) (plus)(plus) (period)
|
||
|
(period) (plus)(plus)(plus) (period)
|
||
|
(greater-than) (plus)(plus) (period)
|
||
|
(less-than)(less-than) (plus)(plus)(plus)(plus)(plus)
|
||
|
(plus)(plus)(plus)(plus)(plus) (plus)(plus)(plus)(plus)(plus)
|
||
|
(period) (greater-than) (period)
|
||
|
(plus)(plus)(plus) (period)
|
||
|
(minus)(minus)(minus)(minus)(minus)(minus)(period)
|
||
|
(minus)(minus)(minus)(minus)(minus)(minus)(minus)(minus)
|
||
|
(period)(greater-than) (plus) (period) (greater-than) (period)
|
||
|
|#
|