delete duplicate
parent
f9a6abdf42
commit
b689315686
@ -1,2 +0,0 @@
|
|||||||
#lang s-exp br-bf/expander
|
|
||||||
(bf-program (op "+") (op "+") (op "+") (op "+") (op "+") (op "+") (op "+") (loop "[" (op ">") (op "+") (op "+") (op "+") (op "+") (op "+") (op "<") (op "-") "]") (op ">") (op "."))
|
|
@ -1,2 +0,0 @@
|
|||||||
#lang br-bf
|
|
||||||
+++++++[>+++++<-]>.
|
|
@ -1,23 +0,0 @@
|
|||||||
#lang br
|
|
||||||
(provide #%module-begin #%top-interaction bf-program op loop)
|
|
||||||
|
|
||||||
(define #'(bf-program <op-or-loop> ...)
|
|
||||||
#'(begin <op-or-loop> ...))
|
|
||||||
|
|
||||||
(define-cases #'op
|
|
||||||
[#'(_ ">") #'(move-pointer 1)]
|
|
||||||
[#'(_ "<") #'(move-pointer -1)]
|
|
||||||
[#'(_ "+") #'(set-pointer-byte! (add1 (get-pointer-byte)))]
|
|
||||||
[#'(_ "-") #'(set-pointer-byte! (sub1 (get-pointer-byte)))]
|
|
||||||
[#'(_ ".") #'(write-byte (get-pointer-byte))]
|
|
||||||
[#'(_ ",") #'(set-pointer-byte! (read-byte))])
|
|
||||||
|
|
||||||
(define #'(loop "[" <op-or-loop> ... "]")
|
|
||||||
#'(until (zero? (get-pointer-byte))
|
|
||||||
<op-or-loop> ...))
|
|
||||||
|
|
||||||
(define bf-vector (make-vector 1000 0))
|
|
||||||
(define bf-pointer 0)
|
|
||||||
(define (get-pointer-byte) (vector-ref bf-vector bf-pointer))
|
|
||||||
(define (set-pointer-byte! val) (vector-set! bf-vector bf-pointer val))
|
|
||||||
(define (move-pointer how-far) (set! bf-pointer (+ bf-pointer how-far)))
|
|
@ -1,12 +0,0 @@
|
|||||||
#lang br-bf
|
|
||||||
+++++++++++
|
|
||||||
>+>>>>++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
>++++++++++++++++++++++++++++++++<<<<<<[>[>>>>>>+>
|
|
||||||
+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[-
|
|
||||||
<-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<<
|
|
||||||
-]>>[-]]<<]>>>[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]
|
|
||||||
>[<<+>>[-]]<<<<<<<]>>>>>[+++++++++++++++++++++++++
|
|
||||||
+++++++++++++++++++++++.[-]]++++++++++<[->-<]>++++
|
|
||||||
++++++++++++++++++++++++++++++++++++++++++++.[-]<<
|
|
||||||
<<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<<
|
|
||||||
[-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-]
|
|
@ -1,6 +0,0 @@
|
|||||||
#lang br-bf
|
|
||||||
++++++[>++++++++++++<-]>.
|
|
||||||
>++++++++++[>++++++++++<-]>+.
|
|
||||||
+++++++..+++.>++++[>+++++++++++<-]>.
|
|
||||||
<+++[>----<-]>.<<<<<+++[>+++++<-]>.
|
|
||||||
>>.+++.------.--------.>>+.
|
|
@ -1,3 +0,0 @@
|
|||||||
#lang info
|
|
||||||
|
|
||||||
(define compile-omit-paths 'all)
|
|
@ -1,12 +0,0 @@
|
|||||||
#lang br
|
|
||||||
|
|
||||||
(module reader br
|
|
||||||
(require "tokenizer.rkt" "parser.rkt" syntax/strip-context)
|
|
||||||
(provide read-syntax)
|
|
||||||
(define (read-syntax src-path src-port)
|
|
||||||
(define parsed-stx (parse src-path (tokenize src-port)))
|
|
||||||
(define new-ctxt-stx (datum->syntax #f 'new-ctxt))
|
|
||||||
(inject-syntax ([#'src-stx (replace-context new-ctxt-stx parsed-stx)])
|
|
||||||
#'(module bf-interpreter br-bf/expander
|
|
||||||
src-stx))))
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
#lang racket
|
|
||||||
(require "tokenizer.rkt" "parser.rkt" ragg/support)
|
|
||||||
|
|
||||||
(syntax->datum (parse (tokenize (open-input-string "[+-]>"))))
|
|
@ -1,20 +0,0 @@
|
|||||||
#lang ragg
|
|
||||||
;; use uppercase TOKEN-IDENTIFIERS for classes of tokens
|
|
||||||
;; too numerous to indicate individually
|
|
||||||
;; (e.g., numbers, strings)
|
|
||||||
|
|
||||||
bf-program : (op | loop)*
|
|
||||||
op : ">" | "<" | "+" | "-" | "." | ","
|
|
||||||
loop : "[" (op | loop)* "]"
|
|
||||||
|
|
||||||
|
|
||||||
;; Alternate ways of specifying grammar
|
|
||||||
;; bf-program : op*
|
|
||||||
;; op : ">" | "<" | "+" | "-" | "." | "," | loop
|
|
||||||
;; loop : "[" op* "]"
|
|
||||||
|
|
||||||
;; bf-program : expr*
|
|
||||||
;; expr : op | loop
|
|
||||||
;; op : ">" | "<" | "+" | "-" | "." | ","
|
|
||||||
;; loop : "[" bf-program "]"
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
|||||||
#lang ragg
|
|
||||||
|
|
||||||
<expr> : ">"
|
|
||||||
| "<"
|
|
||||||
| "+"
|
|
||||||
| "-"
|
|
||||||
| "."
|
|
||||||
| ","
|
|
||||||
| <loop>
|
|
||||||
<loop> : "["<expr>*"]"
|
|
@ -1,15 +0,0 @@
|
|||||||
#lang racket/base
|
|
||||||
(require parser-tools/lex ragg/support)
|
|
||||||
(provide tokenize)
|
|
||||||
|
|
||||||
(define (tokenize ip)
|
|
||||||
(port-count-lines! ip)
|
|
||||||
|
|
||||||
(define lex
|
|
||||||
(lexer
|
|
||||||
[(char-set "><-.,+[]") lexeme]
|
|
||||||
[whitespace (token 'white #:skip? #t)]
|
|
||||||
[(eof) (void)]))
|
|
||||||
|
|
||||||
(define next-token-func (λ _ (lex ip)))
|
|
||||||
next-token-func)
|
|
Loading…
Reference in New Issue