summaryrefslogtreecommitdiff
path: root/src/json.bnf
diff options
context:
space:
mode:
Diffstat (limited to 'src/json.bnf')
-rw-r--r--src/json.bnf161
1 files changed, 161 insertions, 0 deletions
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"