resume in lexing comments
parent
12438d2900
commit
a3f434c551
@ -0,0 +1,4 @@
|
||||
#lang br/quicklang
|
||||
(module reader br/quicklang
|
||||
(require "jsonic/reader.rkt")
|
||||
(provide (all-from-out "jsonic/reader.rkt")))
|
@ -0,0 +1,7 @@
|
||||
#lang br/quicklang
|
||||
|
||||
(define-macro (jsonic-mb PARSE-TREE)
|
||||
#'(#%module-begin
|
||||
'PARSE-TREE))
|
||||
(provide (rename-out [jsonic-mb #%module-begin]))
|
||||
|
@ -0,0 +1,3 @@
|
||||
#lang br/demo/jsonic
|
||||
|
||||
{"id": "file"}
|
@ -0,0 +1,19 @@
|
||||
#lang brag
|
||||
|
||||
jsonic-program: value*
|
||||
|
||||
value: array | object | string | number
|
||||
|
||||
object: "{" [kvpair ("," kvpair)*] "}"
|
||||
|
||||
array: "[" [value ("," value)*] "]"
|
||||
|
||||
string: STRING
|
||||
|
||||
number: NUMBER
|
||||
|
||||
kvpair: STRING ":" value
|
||||
|
||||
s-val: "@" ("[" STRING "]" | "{" STRING "}" | "#" STRING "#" )
|
||||
|
||||
|
@ -0,0 +1,35 @@
|
||||
#lang at-exp br/quicklang
|
||||
(require "parser.rkt")
|
||||
|
||||
(define (read-syntax path port)
|
||||
(define parse-tree (parse path (tokenize port)))
|
||||
(define module-datum `(module bf-mod br/demo/jsonic/expander
|
||||
,parse-tree))
|
||||
(datum->syntax #f module-datum))
|
||||
(provide read-syntax)
|
||||
|
||||
(require parser-tools/lex parser-tools/lex-sre brag/support)
|
||||
(define (tokenize port)
|
||||
(define (next-token)
|
||||
(define our-lexer
|
||||
(lexer
|
||||
[(eof) eof]
|
||||
[(seq (* "\n") (* whitespace) "//" any-string (* "\n")) (next-token)]
|
||||
[whitespace (next-token)]
|
||||
[(char-set ",:[]{}") lexeme]
|
||||
[(seq (* "-") (+ (or numeric "."))) (token 'NUMBER lexeme)] ;; Q: what is grammar for a JS number?
|
||||
[(seq "\"" (complement (seq any-string "\"" any-string)) "\"") (token 'STRING (string-trim lexeme "\""))]))
|
||||
(our-lexer port))
|
||||
next-token)
|
||||
|
||||
(define (test-tokenize str)
|
||||
(define ip (open-input-string str))
|
||||
(define token-producer (tokenize ip))
|
||||
(for/list ([token (in-producer token-producer eof)])
|
||||
token))
|
||||
|
||||
(module+ main
|
||||
(test-tokenize @string-append{
|
||||
{"id": "file"
|
||||
// yeah baby
|
||||
}}))
|
Loading…
Reference in New Issue