|
| 1 | +;; -*- mode: text; coding: utf-8; indent-tabs-mode: nil; -*- |
| 2 | +;; JSON grammar in augmented Backus-Naur form |
| 3 | + |
| 4 | +json = element |
| 5 | + |
| 6 | +value = object / array / string / number / "true" / "false" / "null" |
| 7 | + |
| 8 | +object = "{" *WS "}" / "{" 1*member "}" |
| 9 | + |
| 10 | +member = *WS string *WS ":" element |
| 11 | + |
| 12 | +array = "[" *WS "]" / "[" 1*element "]" |
| 13 | + |
| 14 | +element = *WS value *WS |
| 15 | + |
| 16 | +string = DQUOTE *CHARACTER DQUOTE |
| 17 | + |
| 18 | +CHARACTER = %x20 / %x21 / %x23-5b / % x5d-ff |
| 19 | + |
| 20 | +escape = DQUOTE ; " |
| 21 | +escape =/ REVERSE_SOLIDUS ; \ |
| 22 | +escape =/ SOLIDUS ; / |
| 23 | +escape =/ LATIN_SMALL_LETTER_B ; b |
| 24 | +escape =/ LATIN_SMALL_LETTER_F ; f |
| 25 | +escape =/ LATIN_SMALL_LETTER_N ; n |
| 26 | +escape =/ LATIN_SMALL_LETTER_R ; r |
| 27 | +escape =/ LATIN_SMALL_LETTER_T ; t |
| 28 | +escape =/ LATIN_SMALL_LETTER_U 4HEX ; uABCD |
| 29 | + |
| 30 | +HEX = DIGIT / %x41-46 / %x61-66 |
| 31 | + |
| 32 | +number = integer [fraction] [exponent] |
| 33 | + |
| 34 | +integer = DIGIT |
| 35 | +integer =/ ONENINE *DIGIT |
| 36 | +integer =/ HYPHEN_MINUS DIGIT |
| 37 | +integer =/ HYPHEN_MINUS ONENINE *DIGIT |
| 38 | + |
| 39 | +fraction = FULL_STOP 1*DIGIT |
| 40 | + |
| 41 | +exponent = EXP [SGN] 1*DIGIT |
| 42 | + |
| 43 | +ONENINE = %x31-39 |
| 44 | + |
| 45 | +EXP = LATIN_CAPITAL_LETTER_E / LATIN_SMALL_LETTER_E |
| 46 | + |
| 47 | +SGN = PLUS_SIGN / HYPHEN_MINUS |
| 48 | + |
| 49 | +WS = HTAB / LF / CR / SP |
| 50 | + |
| 51 | +; Aux. def. for readability |
| 52 | +PLUS_SIGN = %x2B ; + |
| 53 | +HYPHEN_MINUS = %x2D ; - |
| 54 | +FULL_STOP = %x2E ; . |
| 55 | +SOLIDUS = %x2F ; / |
| 56 | +LATIN_CAPITAL_LETTER_E = %x45 ; E |
| 57 | +LATIN_SMALL_LETTER_B = %x62 ; b |
| 58 | +LATIN_SMALL_LETTER_E = %x65 ; e |
| 59 | +LATIN_SMALL_LETTER_F = %x66 ; f |
| 60 | +LATIN_SMALL_LETTER_N = %x6E ; n |
| 61 | +LATIN_SMALL_LETTER_R = %x72 ; r |
| 62 | +LATIN_SMALL_LETTER_T = %x74 ; t |
| 63 | +LATIN_SMALL_LETTER_U = %x75 ; u |
| 64 | +REVERSE_SOLIDUS = %x5C ; \ |
| 65 | + |
| 66 | +; Core rules from ABNF |
| 67 | +HTAB = %x09 ; horizontal tabulation |
| 68 | +LF = %x0a ; line feed |
| 69 | +CR = %x0d ; carriage return |
| 70 | +SP = %x20 ; space |
| 71 | +DQUOTE = %x22 ; quotation mark |
| 72 | +DIGIT = %x30-39 ; 0, ..., 9 |
0 commit comments