diff --git a/beautiful-racket/br/demo/jsonic/jsonic-test.rkt b/beautiful-racket/br/demo/jsonic/jsonic-test.rkt index 868a5ed..618d16d 100644 --- a/beautiful-racket/br/demo/jsonic/jsonic-test.rkt +++ b/beautiful-racket/br/demo/jsonic/jsonic-test.rkt @@ -1,3 +1,4 @@ #lang br/demo/jsonic -{"foo": @#(+ 4 2)#} \ No newline at end of file +{"foo": @(+ 4 (+ 4 2)), + "bar" : ")"} \ No newline at end of file diff --git a/beautiful-racket/br/demo/jsonic/parser.rkt b/beautiful-racket/br/demo/jsonic/parser.rkt index b5cb4df..c30f2ec 100644 --- a/beautiful-racket/br/demo/jsonic/parser.rkt +++ b/beautiful-racket/br/demo/jsonic/parser.rkt @@ -14,6 +14,5 @@ number: NUMBER kvpair: STRING /":" value -s-val: "@" ("[" STRING "]" | "{" STRING "}" | "#" STRING "#" ) - +s-val: S-EXP \ No newline at end of file diff --git a/beautiful-racket/br/demo/jsonic/reader.rkt b/beautiful-racket/br/demo/jsonic/reader.rkt index 25c7c6a..fc7dfbe 100644 --- a/beautiful-racket/br/demo/jsonic/reader.rkt +++ b/beautiful-racket/br/demo/jsonic/reader.rkt @@ -16,11 +16,11 @@ [(eof) eof] [(or whitespace (seq "//" (complement (seq any-string "\n" any-string)) "\n")) (next-token)] - [(char-set ",:[]{}@#") lexeme] + [(char-set ",:[]{}") lexeme] + [(seq "@" "(" any-string ")") (token 'S-EXP (string-trim lexeme "@"))] [(seq (repetition 0 1 "-") (+ numeric) (repetition 0 1 (seq "." (* numeric)))) (token 'NUMBER lexeme)] ;; Q: what is grammar for a JS number? - [(seq "\"" (complement (seq any-string "\"" any-string)) "\"") (token 'STRING (string-trim lexeme "\""))] - [any-char lexeme])) + [(seq "\"" (complement (seq any-string "\"" any-string)) "\"") (token 'STRING (string-trim lexeme "\""))])) (our-lexer port)) next-token) @@ -29,8 +29,3 @@ (define token-producer (tokenize ip)) (for/list ([token (in-producer token-producer eof)]) token)) - -(test-tokenize #<