Thank you for your comment

Beau­tiful Racket / racket school 2019

  1. zip-code : digit{5} ["-" digit{4}]
    digit : "0" | "1" | "2" | "3" | "4"
          | "5" | "6" | "7" | "8" | "9"
    1
    2
    3
    zip-code : digit{5} ["-" digit{4}]
    digit : "0" | "1" | "2" | "3" | "4"
          | "5" | "6" | "7" | "8" | "9"
    
    copy to clipboard
    zip-code : beginning [middle] end
    beginning : digit digit
    middle : end "-" digit
    end : beginning digit
    digit : number | zero
    number : odd | even
    odd : "1" | "3" | "5" | "7" | "9"
    even : "2" | "4" | "6" | "8"
    zero : "0"
    1
    2
    3
    4
    5
    6
    7
    8
    9
    zip-code : beginning [middle] end
    beginning : digit digit
    middle : end "-" digit
    end : beginning digit
    digit : number | zero
    number : odd | even
    odd : "1" | "3" | "5" | "7" | "9"
    even : "2" | "4" | "6" | "8"
    zero : "0"
    
    copy to clipboard
  2. #lang brag
    zip-code : digit{5} ["-" digit{4}]
    digit : "0" | "1" | "2" | "3" | "4"
          | "5" | "6" | "7" | "8" | "9"
    1
    2
    3
    4
    #lang brag
    zip-code : digit{5} ["-" digit{4}]
    digit : "0" | "1" | "2" | "3" | "4"
          | "5" | "6" | "7" | "8" | "9"
    
    copy to clipboard
    (parse-to-datum "01234-5678")
    1
    (parse-to-datum "01234-5678")
    
    copy to clipboard
  3. '(zip-code (digit "0") (digit "1") (digit "2") (digit "3") (digit "4") "-" (digit "5") (digit "6") (digit "7") (digit "8"))
    1
    '(zip-code (digit "0") (digit "1") (digit "2") (digit "3") (digit "4") "-" (digit "5") (digit "6") (digit "7") (digit "8"))
    
    copy to clipboard
  4. #lang brag
    zip-code : @digit{5} [/"-" digit{4}] ; splice and cut
    digit : "0" | "1" | "2" | "3" | "4"
          | "5" | "6" | "7" | "8" | "9"
    1
    2
    3
    4
    #lang brag
    zip-code : @digit{5} [/"-" digit{4}] ; splice and cut
    digit : "0" | "1" | "2" | "3" | "4"
          | "5" | "6" | "7" | "8" | "9"
    
    copy to clipboard
    (parse-to-datum "01234-5678")
    1
    (parse-to-datum "01234-5678")
    
    copy to clipboard
    '(zip-code "0" "1" "2" "3" "4" (digit "5") (digit "6") (digit "7") (digit "8"))
    1
    '(zip-code "0" "1" "2" "3" "4" (digit "5") (digit "6") (digit "7") (digit "8"))
    
    copy to clipboard
  5. #lang brag
    foo : "x" bar
    bar : foo
    1
    2
    3
    #lang brag
    foo : "x" bar
    bar : foo
    
    copy to clipboard
  6. #lang brag
    top : foo | bar
    foo : "x"
    bar : "x"
    1
    2
    3
    4
    #lang brag
    top : foo | bar
    foo : "x"
    bar : "x"
    
    copy to clipboard
tacogram/test.rkt
#lang tacogram
##$%#$%#$#$#$$##$%#$%#$#$#$$##$%#$#$#$%#$$##$#$#$%#$%%$#%#$%#$#$%%$##$#$%%#$%%$##$#$%%#$%%$#%%%%#$%%$##$#$#$#$#$%#$$#%%%#$%%%$#%%%%#$%%$##$%#$#$%%%$##$#$%%#$%%$##$#$%#$#$%%$##$%#$#$#$%#$$##$%#$%#$#$#$$##$#$#$%#$%#$$#%%#$%#$%#$$##$#$#$#$#$%#$$#%#$#$#$%%#$$##$#$#$#$#$%#$$##$#$#$%#$%#$$##$%#$%#$%#$$##$#$#$#$#$%#$$##$%#$#$%%#$$##$#$#$#$#$%#$$##$#$#$%#$%#$$#%#$%%#$%#$$##$#$#$#$#$%#$$##$#$#$%%%%$#%#$#$%#$%#$$#%#$#$%#$%#$$#%#$#$%#$%#$$
1
2
#lang tacogram
##$%#$%#$#$#$$##$%#$%#$#$#$$##$%#$#$#$%#$$##$#$#$%#$%%$#%#$%#$#$%%$##$#$%%#$%%$##$#$%%#$%%$#%%%%#$%%$##$#$#$#$#$%#$$#%%%#$%%%$#%%%%#$%%$##$%#$#$%%%$##$#$%%#$%%$##$#$%#$#$%%$##$%#$#$#$%#$$##$%#$%#$#$#$$##$#$#$%#$%#$$#%%#$%#$%#$$##$#$#$#$#$%#$$#%#$#$#$%%#$$##$#$#$#$#$%#$$##$#$#$%#$%#$$##$%#$%#$%#$$##$#$#$#$#$%#$$##$%#$#$%%#$$##$#$#$#$#$%#$$##$#$#$%#$%#$$#%#$%%#$%#$$##$#$#$#$#$%#$$##$#$#$%%%%$#%#$#$%#$%#$$#%#$#$%#$%#$$#%#$#$%#$%#$$
copy to clipboard
tacogram/main.rkt
#lang br/quicklang
(require "grammar.rkt")

(module+ reader
  (provide read-syntax))

(define (tokenize ip)
  (for/list ([tok (in-port read-char ip)])
    tok))

(define (parse src toks)
  (define parse-tree-datum (parse-to-datum toks))
  (for/list ([leaf (in-list (cdr parse-tree-datum))])
    (integer->char
     (for/sum ([val (in-list (cdr leaf))]
               [power (in-naturals)]
               #:when (equal? val '(taco)))
       (expt 2 power)))))

(define (read-syntax src ip)
  (define toks (tokenize ip))
  (define parse-tree (parse src toks))
  (strip-context
   (with-syntax ([PT parse-tree])
     #'(module tacogram-mod tacogram
         PT))))

(define-macro (mb PT)
  #'(#%module-begin
     (display (list->string 'PT))))
(provide (rename-out [mb #%module-begin]))
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#lang br/quicklang
(require "grammar.rkt")

(module+ reader
  (provide read-syntax))

(define (tokenize ip)
  (for/list ([tok (in-port read-char ip)])
    tok))

(define (parse src toks)
  (define parse-tree-datum (parse-to-datum toks))
  (for/list ([leaf (in-list (cdr parse-tree-datum))])
    (integer->char
     (for/sum ([val (in-list (cdr leaf))]
               [power (in-naturals)]
               #:when (equal? val '(taco)))
       (expt 2 power)))))

(define (read-syntax src ip)
  (define toks (tokenize ip))
  (define parse-tree (parse src toks))
  (strip-context
   (with-syntax ([PT parse-tree])
     #'(module tacogram-mod tacogram
         PT))))

(define-macro (mb PT)
  #'(#%module-begin
     (display (list->string 'PT))))
(provide (rename-out [mb #%module-begin]))
copy to clipboard
tacogram/grammar.rkt
#lang brag

;; ···
1
2
3
#lang brag

;; ···
copy to clipboard
← prev next →