2021-12-10 12:00

In the previous article Jevko has been defined as follows:

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

This grammar is technically ambiguous. This ambiguity can be removed by allowing Primitive to be empty:

`Primitive = *Symbol`

and then redefining `Value`

and `Subvalue`

as
follows:

```
Value = *Subvalue Primitive
Subvalue = Primitive "[" Value "]"
```

Which removes the ambiguity, leaving us with the following grammar:

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

This is the correct interpretation of the original grammar.

An equivalent grammar can be written in 2 lines:

```
Value = *(*Symbol "[" Value "]") *Symbol
Symbol = %x0-5a / "\" %x5b-5d / %x5e-d7ff / %xe000-10ffff
```