From eb007d554251456a2a508849edf91b15aab1333e Mon Sep 17 00:00:00 2001 From: JSDurand Date: Mon, 31 Jan 2022 15:59:11 +0800 Subject: cnp: save point Now we need to implement predicates, in order to have practical applications. --- src/json.bnf | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 src/json.bnf (limited to 'src/json.bnf') diff --git a/src/json.bnf b/src/json.bnf new file mode 100644 index 0000000..c1b5440 --- /dev/null +++ b/src/json.bnf @@ -0,0 +1,161 @@ +[unescaped]: \ -!\#-\[\]-%x10FFFF + +-- + +JSON-text: ws value ws + +begin-array: ws "[" ws + +begin-object: ws "{" ws + +end-array: ws "]" ws + +end-object: ws "}" ws + +name-separator: ws ":" ws + +value-separator: ws "," ws + +ws: whitespace ws +ws: + +whitespace: " " +whitespace: "\t" +whitespace: "\n" +whitespace: "\r" + +value: false +value: null +value: true +value: object +value: array +value: number +value: string + +false = "false" + +null = "null" + +true = "true" + +object: begin-object members end-object + +members: +members: member more-member + +more-member: value-separator member more-member +more-member: + +member: string name-separator value + +array: begin-array array-elements end-array + +array-elements: +array-elements: value more-elements + +more-elements: value-separator value more-elements +more-elements: + +number: minus-or-not int frac-or-not exp-or-not + +minus-or-not: minus +minus-or-not: + +frac-or-not: frac +frac-or-not: + +exp-or-not: exp +exp-or-not: + +decimal-point: "." + +digit1-9: "1" +digit1-9: "2" +digit1-9: "3" +digit1-9: "4" +digit1-9: "5" +digit1-9: "6" +digit1-9: "7" +digit1-9: "8" +digit1-9: "9" + +e: "e" +e: "E" + +exp: e minus-or-plus-or-none DIGITS + +minus-or-plus-or-none: minus +minus-or-plus-or-none: plus +minus-or-plus-or-none: + +frac: decimal-point DIGITS + +int: zero +int: digit1-9 +int: digit1-9 DIGITS + +minus: "-" +plus: "+" +zero: "0" + +DIGIT: "0" +DIGIT: "1" +DIGIT: "2" +DIGIT: "3" +DIGIT: "4" +DIGIT: "5" +DIGIT: "6" +DIGIT: "7" +DIGIT: "8" +DIGIT: "9" + +DIGITS: DIGIT DIGITS +DIGITS: DIGIT + +string: quotation-mark chars quotation-mark + +chars: char chars +chars: + +char: [unescaped] +char: escape "\"" +char: escape "\\" +char: escape "/" +char: escape "b" +char: escape "f" +char: escape "n" +char: escape "r" +char: escape "t" +char: escape "u" 4HEXDIG + +escape: "\\" + +quotation-mark: "\"" + +4HEXDIG: HEXDIG HEXDIG HEXDIG HEXDIG + +HEXDIG: DIGIT +HEXDIG: letter_a +HEXDIG: letter_b +HEXDIG: letter_c +HEXDIG: letter_d +HEXDIG: letter_e +HEXDIG: letter_F + +letter_a: "a" +letter_a: "A" + +letter_b: "b" +letter_b: "B" + +letter_c: "c" +letter_c: "C" + +letter_d: "d" +letter_d: "D" + +letter_e: "e" +letter_e: "E" + +letter_f: "f" +letter_f: "F" -- cgit v1.2.3-18-g5258