Thank you for your comment

Beau­tiful Racket / tuto­rials

jsonic/parser.rkt
#lang brag
1
#lang brag
copy to clipboard
jsonic/parser.rkt
#lang brag
jsonic-program :
1
2
#lang brag
jsonic-program :
copy to clipboard
jsonic/parser.rkt
#lang brag
jsonic-program : (jsonic-char | jsonic-sexp)*
1
2
#lang brag
jsonic-program : (jsonic-char | jsonic-sexp)*
copy to clipboard
jsonic/parser.rkt
#lang brag
jsonic-program : (jsonic-char | jsonic-sexp)*
jsonic-char :
jsonic-sexp :
1
2
3
4
#lang brag
jsonic-program : (jsonic-char | jsonic-sexp)*
jsonic-char    :
jsonic-sexp    :
copy to clipboard
jsonic/parser.rkt
#lang brag
jsonic-program : (jsonic-char | jsonic-sexp)*
jsonic-char : CHAR-TOK
jsonic-sexp : SEXP-TOK
1
2
3
4
#lang brag
jsonic-program : (jsonic-char | jsonic-sexp)*
jsonic-char    : CHAR-TOK
jsonic-sexp    : SEXP-TOK
copy to clipboard
jsonic-parser-test.rkt
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)
1
2
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)
copy to clipboard
jsonic-parser-test.rkt
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)

(parse-to-datum (apply-tokenizer-maker make-tokenizer "// line commment\n"))
1
2
3
4
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)

(parse-to-datum (apply-tokenizer-maker make-tokenizer "// line commment\n"))
copy to clipboard
jsonic-parser-test.rkt
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)

(parse-to-datum (apply-tokenizer-maker make-tokenizer "@$ 42 $@"))
1
2
3
4
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)

(parse-to-datum (apply-tokenizer-maker make-tokenizer "@$ 42 $@"))
copy to clipboard
jsonic-parser-test.rkt
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)

(parse-to-datum (apply-tokenizer-maker make-tokenizer "hi"))
1
2
3
4
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)

(parse-to-datum (apply-tokenizer-maker make-tokenizer "hi"))
copy to clipboard
jsonic-parser-test.rkt
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)

(parse-to-datum (apply-tokenizer-maker make-tokenizer "hi\n// comment\n@$ 42 $@"))
1
2
3
4
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)

(parse-to-datum (apply-tokenizer-maker make-tokenizer "hi\n// comment\n@$ 42 $@"))
copy to clipboard
jsonic-parser-test.rkt
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)

(parse-to-datum (apply-tokenizer-maker make-tokenizer #<<DEREK
"hi"
// comment
@$ 42 $@
DEREK
))
1
2
3
4
5
6
7
8
9
#lang br
(require jsonic/parser jsonic/tokenizer brag/support)

(parse-to-datum (apply-tokenizer-maker make-tokenizer #<<DEREK
"hi"
// comment
@$ 42 $@
DEREK
))
copy to clipboard
jsonic/main.rkt
#lang br/quicklang
(module reader br
  (require "reader.rkt")
  (provide read-syntax))
1
2
3
4
#lang br/quicklang
(module reader br
  (require "reader.rkt")
  (provide read-syntax))
copy to clipboard
jsonic/reader.rkt
#lang br/quicklang
(require "tokenizer.rkt" "parser.rkt")

(define (read-syntax path port)
  (define parse-tree (parse path (make-tokenizer port)))
  (define module-datum `(module jsonic-module jsonic/expander
                          ,parse-tree))
  (datum->syntax #f module-datum))
(provide read-syntax)
1
2
3
4
5
6
7
8
9
#lang br/quicklang
(require "tokenizer.rkt" "parser.rkt")

(define (read-syntax path port)
  (define parse-tree (parse path (make-tokenizer port)))
  (define module-datum `(module jsonic-module jsonic/expander
                          ,parse-tree))
  (datum->syntax #f module-datum))
(provide read-syntax)
copy to clipboard
jsonic/tokenizer.rkt
#lang br/quicklang
(require brag/support)

(define (make-tokenizer port)
  (define (next-token)
    (define jsonic-lexer
      (lexer
       [(from/to "//" "\n") (next-token)]
       [(from/to "@$" "$@")
        (token 'SEXP-TOK (trim-ends "@$" lexeme "$@"))]
       [any-char (token 'CHAR-TOK lexeme)]))
    (jsonic-lexer port))
  next-token)
(provide make-tokenizer)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#lang br/quicklang
(require brag/support)

(define (make-tokenizer port)
  (define (next-token)
    (define jsonic-lexer
      (lexer
       [(from/to "//" "\n") (next-token)]
       [(from/to "@$" "$@")
        (token 'SEXP-TOK (trim-ends "@$" lexeme "$@"))]
       [any-char (token 'CHAR-TOK lexeme)]))
    (jsonic-lexer port))  
  next-token)
(provide make-tokenizer)
copy to clipboard
jsonic/parser.rkt
#lang brag
jsonic-program : (jsonic-char | jsonic-sexp)*
jsonic-char : CHAR-TOK
jsonic-sexp : SEXP-TOK
1
2
3
4
#lang brag
jsonic-program : (jsonic-char | jsonic-sexp)*
jsonic-char    : CHAR-TOK
jsonic-sexp    : SEXP-TOK
copy to clipboard
← prev next →