The below formal grammar in ABNF describes Data Jevko well enough to build or generate
a parser for it.

```
Value = List / Keyed / Primitive / Emptiness
List = 1*(Blanks Subvalue) Blanks
Keyed = 1*(Blanks Key Blanks Subvalue) Blanks
Primitive = 1*Symbol
Emptiness = ""
Subvalue = "[" Value "]"
Key = Nonblank [*Symbol Nonblank]
Blanks = *(%x20 / %x0a / %x0d / %x09) ; (1)
Symbol = Escape / %x0-5a / %x5e-d7ff / %xe000-10ffff ; (2)
Nonblank = Escape / %x21-5a / %x5e-d7ff / %xe000-10ffff ; (3)
Escape = "\" ("\" / "[" / "]")
```

Lines that end with a number in parentheses are explained below:

`Blanks`

means zero or more occurences of space, newline,
carriage return, or horizontal tab (” ” / `\n`

/
`\r`

/ `\t`

).
`Symbol`

means an `Escape`

sequence or any
Unicode code point except `[`

/ `]`

/
`\`

.
`Nonblank`

means `Symbol`

minus control
characters and space.

## Jevko as a strict superset

To show that the above grammar is a strict subset of Jevko, we can
simply change `Value`

to be:

`Value = *(Subvalue / Primitive)`

The whole grammar then reduces to:

```
Value = *(Subvalue / Primitive)
Primitive = 1*Symbol
Subvalue = "[" Value "]"
Symbol = Escape / %x0-5a / %x5e-d7ff / %xe000-10ffff
Escape = "\" ("\" / "[" / "]")
```

which is equivalent to Jevko.