Changeset 25590 in project


Ignore:
Timestamp:
11/28/11 09:45:33 (9 years ago)
Author:
Ivan Raikov
Message:

json-abnf: fixes to boolean parsing, using dotted pairs for object representation [thanks to Vok Vojwo]

Location:
release/4/json-abnf/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • release/4/json-abnf/trunk/json-abnf.scm

    r22944 r25590  
    8585
    8686(define (value?  x)    (or (string? x) (number? x) (boolean? x)
    87                            (vector? x) (list? x)))
     87                           (vector? x) (list? x) (pair? x)))
    8888
    8989(define consumed-values (abnf:consumed-objects value?))
     
    107107  (syntax-rules ()
    108108    ((_ p)      (abnf:bind consumed-values->vector  p))
     109    ))
     110
     111;; construct pairs from consumed values
     112(define consumed-values->pair
     113  ((abnf:consumed-objects-lift consumed-values)
     114   (lambda (l)
     115     (or (and (null? l) l)
     116         (cons (car l) (cadr l))))
     117   ))
     118
     119;; shortcut for (abnf:bind (consumed-values->pair ...) ... )
     120(define-syntax bind-consumed-values->pair
     121  (syntax-rules ()
     122    ((_ p)      (abnf:bind consumed-values->pair  p))
    109123    ))
    110124
     
    128142(define false
    129143  (abnf:bind
    130    (abnf:consumed-chars->list (lambda x #f))
     144   (abnf:consumed-chars->list (lambda x (list #f)))
    131145   (abnf:lit "false")))
    132146
    133147(define null
    134148  (abnf:bind
    135    (abnf:consumed-chars->list (lambda x '()))
     149   (abnf:consumed-chars->list (lambda x (list 'null)))
    136150   (abnf:lit "null")))
    137151
     
    204218
    205219(define p-member
    206   (bind-consumed-values->list
     220  (bind-consumed-values->pair
    207221   (abnf:concatenation
    208222    p-string
     
    213227
    214228(define object
    215   (bind-consumed-values->list 'object
     229  (bind-consumed-values->list
    216230    (abnf:concatenation
    217231     (abnf:drop-consumed begin-object)
  • release/4/json-abnf/trunk/json-abnf.setup

    r24685 r25590  
    1919
    2020  ;; Assoc list with properties for your extension:
    21   '((version 4.1)
     21  '((version 5.0)
    2222    ))
    2323
  • release/4/json-abnf/trunk/tests/run.scm

    r24685 r25590  
    1616#<<EOF
    1717["\n", "\u0040", "test!"]
     18EOF
     19#<<EOF
     20[false, true, null]
     21EOF
     22#<<EOF
     23{"str":"a","true":true,"false":false}
    1824EOF
    1925#<<EOF
     
    6167  `(
    6268    ,(list->vector (list))
    63     (object)
    64     ,(list->vector (list (list->vector (list '(object))) "" '(object)))
     69    ()
     70    ,(list->vector (list (list->vector (list '())) "" '()))
    6571    ,(list->vector (list (list->string (list #\newline)) (list->string (list #\@)) "test!"))
    66     (object
    67       ("Image"
    68        (object
    69         ("Width" 800)
    70         ("Height" 600)
    71         ("Title" "View from 15th Floor")
    72         ("Thumbnail"
    73          (object
    74           ("Url" "http://www.example.com/image/481989943")
    75           ("Height" 125)
    76           ("Width" "100")))
    77         ("IDs" #(116 943 234 38793)))))
    78     #((object ("precision" "zip")
    79                ("Latitude" 37.7668)
    80                ("Longitude" -122.3959)
    81                ("Address" "")
    82                ("City" "SAN FRANCISCO")
    83                ("State" "CA")
    84                ("Zip" "94107")
    85                ("Country" "US"))
    86        (object ("precision" "zip")
    87                ("Latitude" 37.371991)
    88                ("Longitude" -122.02602)
    89                ("Address" "")
    90                ("City" "SUNNYVALE")
    91                ("State" "CA")
    92                ("Zip" "94085")
    93                ("Country" "US")))
     72    ,(list->vector (list '(#f) '(#t) '(null)))
     73    (("str" . "a") ("true" . (#t)) ("false" . (#f)))
     74    (
     75      ("Image" .
     76       (
     77        ("Width"  . 800)
     78        ("Height" . 600)
     79        ("Title"  . "View from 15th Floor")
     80        ("Thumbnail" .
     81         (
     82          ("Url"    . "http://www.example.com/image/481989943")
     83          ("Height" . 125)
     84          ("Width"  . "100")))
     85        ("IDs" . #(116 943 234 38793)))))
     86    #(( ("precision" . "zip")
     87               ("Latitude"  . 37.7668)
     88               ("Longitude" . -122.3959)
     89               ("Address"   . "")
     90               ("City"      . "SAN FRANCISCO")
     91               ("State"     . "CA")
     92               ("Zip"       . "94107")
     93               ("Country"   . "US"))
     94       ( ("precision" . "zip")
     95               ("Latitude"  . 37.371991)
     96               ("Longitude" . -122.02602)
     97               ("Address"   . "")
     98               ("City"      . "SUNNYVALE")
     99               ("State"     . "CA")
     100               ("Zip"       . "94085")
     101               ("Country"   . "US")))
    94102    ))
    95103 
     
    97105(test-group "json test"
    98106            (for-each
    99              (lambda (in out) (test out (parser in)))
     107             (lambda (in out)
     108               (test out (parser in)))
    100109             inputs outputs))
    101110
Note: See TracChangeset for help on using the changeset viewer.