From 1181bdfed10442de0e68eaa916262eedde07d017 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 7 Apr 2016 12:42:28 -0700 Subject: [PATCH] br-bf start --- br-bf/main.rkt | 14 ++++++++++++++ br-bf/parser.rkt | 10 ++++++++++ br-bf/reader.rkt | 10 ++++++++++ br-bf/tokenizer.rkt | 24 ++++++++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 br-bf/main.rkt create mode 100644 br-bf/parser.rkt create mode 100644 br-bf/reader.rkt create mode 100644 br-bf/tokenizer.rkt diff --git a/br-bf/main.rkt b/br-bf/main.rkt new file mode 100644 index 0000000..4e95b69 --- /dev/null +++ b/br-bf/main.rkt @@ -0,0 +1,14 @@ +#lang br + + +(module reader syntax/module-reader + #:language 'br-bf + #:read bf-read + #:read-syntax bf-read-syntax + + (require "tokenizer.rkt" "parser.rkt") + (define (bf-read in) + (syntax->datum (bf-read-syntax #f in))) + + (define (bf-read-syntax src ip) + (list (parse src (tokenize ip))))) diff --git a/br-bf/parser.rkt b/br-bf/parser.rkt new file mode 100644 index 0000000..b80844d --- /dev/null +++ b/br-bf/parser.rkt @@ -0,0 +1,10 @@ +#lang ragg + + : ">" + | "<" + | "+" + | "-" + | "." + | "," + | + : "["*"]" \ No newline at end of file diff --git a/br-bf/reader.rkt b/br-bf/reader.rkt new file mode 100644 index 0000000..b80844d --- /dev/null +++ b/br-bf/reader.rkt @@ -0,0 +1,10 @@ +#lang ragg + + : ">" + | "<" + | "+" + | "-" + | "." + | "," + | + : "["*"]" \ No newline at end of file diff --git a/br-bf/tokenizer.rkt b/br-bf/tokenizer.rkt new file mode 100644 index 0000000..d68b7f7 --- /dev/null +++ b/br-bf/tokenizer.rkt @@ -0,0 +1,24 @@ +#lang racket/base +(require parser-tools/lex ragg/support) +(provide tokenize) + +(define (tokenize ip) + (port-count-lines! ip) + + (define my-lexer + (lexer-src-pos + [(repetition 1 +inf.0 numeric) + (token 'INTEGER (string->number lexeme))] + [upper-case + (token 'STRING lexeme)] + ["b" + (token 'STRING " ")] + [";" + (token ";" lexeme)] + [whitespace + (token 'WHITESPACE lexeme #:skip? #t)] + [(eof) + (void)])) + + (define (next-token) (my-lexer ip)) + next-token) \ No newline at end of file