diff --git a/beautiful-racket-lib/br/main.rkt b/beautiful-racket-lib/br/main.rkt index acddfe0..80b0a00 100644 --- a/beautiful-racket-lib/br/main.rkt +++ b/beautiful-racket-lib/br/main.rkt @@ -1,9 +1,9 @@ #lang racket/base -(require racket/provide racket/list racket/string racket/format racket/match racket/port +(require racket/provide racket/list racket/string racket/format racket/match racket/port racket/contract racket/function br/define br/syntax br/datum br/debug br/cond racket/class racket/vector br/reader-utils (for-syntax racket/base racket/syntax br/syntax br/debug br/define br/datum)) (provide (all-from-out racket/base) - (all-from-out racket/list racket/string racket/format racket/match racket/port + (all-from-out racket/list racket/string racket/format racket/match racket/port racket/contract racket/function br/syntax br/datum br/debug br/cond racket/class racket/vector br/define br/reader-utils) (for-syntax (all-from-out racket/base racket/syntax br/syntax br/debug br/datum)) (for-syntax caller-stx with-shared-id)) ; from br/define diff --git a/beautiful-racket/br/demo/jsonic-2.rkt b/beautiful-racket/br/demo/jsonic-2.rkt new file mode 100644 index 0000000..04418fd --- /dev/null +++ b/beautiful-racket/br/demo/jsonic-2.rkt @@ -0,0 +1,4 @@ +#lang br/quicklang +(module reader br/quicklang + (require (submod "jsonic-2/main.rkt" reader)) + (provide (all-from-out (submod "jsonic-2/main.rkt" reader)))) diff --git a/beautiful-racket/br/demo/jsonic-pro/color-lexer.rkt b/beautiful-racket/br/demo/jsonic-2/color-lexer.rkt similarity index 100% rename from beautiful-racket/br/demo/jsonic-pro/color-lexer.rkt rename to beautiful-racket/br/demo/jsonic-2/color-lexer.rkt diff --git a/beautiful-racket/br/demo/jsonic-2/expander.rkt b/beautiful-racket/br/demo/jsonic-2/expander.rkt new file mode 100644 index 0000000..d264559 --- /dev/null +++ b/beautiful-racket/br/demo/jsonic-2/expander.rkt @@ -0,0 +1,21 @@ +#lang br/quicklang +(require json) +(define-macro (js-module-begin PARSE-TREE) + #'(#%module-begin + (define result-string PARSE-TREE) + (define validated-jsexpr (string->jsexpr result-string)) + (display result-string))) +(provide (rename-out [js-module-begin #%module-begin])) + +(define-macro (jsonic-program SEXP-OR-JSON-STR ...) + #'(string-trim (string-append SEXP-OR-JSON-STR ...))) +(provide jsonic-program) + +(define-macro (json-char CHAR-STR) + #'CHAR-STR) +(provide json-char) + +(define-macro (s-exp SEXP-STR) + (with-pattern ([SEXP-DATUM (format-datum '~a #'SEXP-STR)]) + #'(jsexpr->string SEXP-DATUM))) +(provide s-exp) \ No newline at end of file diff --git a/beautiful-racket/br/demo/jsonic-pro/indenter.rkt b/beautiful-racket/br/demo/jsonic-2/indenter.rkt similarity index 100% rename from beautiful-racket/br/demo/jsonic-pro/indenter.rkt rename to beautiful-racket/br/demo/jsonic-2/indenter.rkt diff --git a/beautiful-racket/br/demo/jsonic-2/jsonic-2-test.rkt b/beautiful-racket/br/demo/jsonic-2/jsonic-2-test.rkt new file mode 100644 index 0000000..c154f53 --- /dev/null +++ b/beautiful-racket/br/demo/jsonic-2/jsonic-2-test.rkt @@ -0,0 +1,11 @@ +#lang br/demo/jsonic-2 +// a line comment +[ + @$ 'null $@, + @$ (* 6 7) $@, + @$ (= 2 (+ 1 1)) $@, + @$ (list "array" "of" "strings") $@, + @$ (hash 'key-1 'null + 'key-2 (even? 3) + 'key-3 (hash 'subkey 21)) $@ +] \ No newline at end of file diff --git a/beautiful-racket/br/demo/jsonic-pro/main.rkt b/beautiful-racket/br/demo/jsonic-2/main.rkt similarity index 72% rename from beautiful-racket/br/demo/jsonic-pro/main.rkt rename to beautiful-racket/br/demo/jsonic-2/main.rkt index f601270..93f4807 100644 --- a/beautiful-racket/br/demo/jsonic-pro/main.rkt +++ b/beautiful-racket/br/demo/jsonic-2/main.rkt @@ -1,10 +1,7 @@ #lang br/quicklang (module reader br - (require br/demo/jsonic/reader) - (provide (all-from-out br/demo/jsonic/reader))) - -(require br/demo/jsonic/expander) -(provide (all-from-out br/demo/jsonic/expander)) + (require "reader.rkt") + (provide read-syntax)) #| Demonstrate: diff --git a/beautiful-racket/br/demo/jsonic-2/parser.rkt b/beautiful-racket/br/demo/jsonic-2/parser.rkt new file mode 100644 index 0000000..2a282ba --- /dev/null +++ b/beautiful-racket/br/demo/jsonic-2/parser.rkt @@ -0,0 +1,4 @@ +#lang brag +jsonic-program: (s-exp | json-char)* +s-exp: SEXP-TOK +json-char: CHAR-TOK diff --git a/beautiful-racket/br/demo/jsonic-2/reader.rkt b/beautiful-racket/br/demo/jsonic-2/reader.rkt new file mode 100644 index 0000000..60f1361 --- /dev/null +++ b/beautiful-racket/br/demo/jsonic-2/reader.rkt @@ -0,0 +1,8 @@ +#lang br/quicklang +(require "tokenizer.rkt" "parser.rkt") +(define (read-syntax path port) + (define parse-tree (parse path (tokenize port))) + (define module-datum `(module jsonic-module br/demo/jsonic/expander + ,parse-tree)) + (datum->syntax #f module-datum)) +(provide read-syntax) \ No newline at end of file diff --git a/beautiful-racket/br/demo/jsonic-2/tokenizer.rkt b/beautiful-racket/br/demo/jsonic-2/tokenizer.rkt new file mode 100644 index 0000000..56e3d00 --- /dev/null +++ b/beautiful-racket/br/demo/jsonic-2/tokenizer.rkt @@ -0,0 +1,14 @@ +#lang br/quicklang +(require brag/support) +(define (tokenize port) + (define (next-token) + (define our-lexer + (lexer + [(eof) eof] + [(from/to "//" "\n") (next-token)] + [(from/to "@$" "$@") + (token 'SEXP-TOK (trim-ends "@$" lexeme "$@"))] + [any-char (token 'CHAR-TOK lexeme)])) + (our-lexer port)) + next-token) +(provide tokenize) \ No newline at end of file diff --git a/beautiful-racket/br/demo/jsonic-pro/toolbar.rkt b/beautiful-racket/br/demo/jsonic-2/toolbar.rkt similarity index 100% rename from beautiful-racket/br/demo/jsonic-pro/toolbar.rkt rename to beautiful-racket/br/demo/jsonic-2/toolbar.rkt diff --git a/beautiful-racket/br/demo/jsonic-pro.rkt b/beautiful-racket/br/demo/jsonic-pro.rkt deleted file mode 100644 index 2179e34..0000000 --- a/beautiful-racket/br/demo/jsonic-pro.rkt +++ /dev/null @@ -1,4 +0,0 @@ -#lang br/quicklang -(module reader br/quicklang - (require (submod "jsonic-pro/main.rkt" reader)) - (provide (all-from-out (submod "jsonic-pro/main.rkt" reader)))) diff --git a/beautiful-racket/br/demo/jsonic-pro/jsonic-test.rkt b/beautiful-racket/br/demo/jsonic-pro/jsonic-test.rkt deleted file mode 100644 index 076e00e..0000000 --- a/beautiful-racket/br/demo/jsonic-pro/jsonic-test.rkt +++ /dev/null @@ -1,13 +0,0 @@ -#lang br/demo/jsonic-pro -// a line comment -[ - @$ 'null $@, - @$ #f $@, - @$ #t $@, - @$ (* 6 7) $@, - @$ "string" $@, - @$ (list "array" "of" "strings") $@, - @$ (hash 'key-1 42 - 'key-2 "value" - 'key-3 (hash 'subkey 21)) $@ - ] \ No newline at end of file