==========================================
recovers from top-level errors
==========================================
[}
---
(ERROR '}')

==========================================
recovers from unexpected tokens
==========================================
barf
---
(ERROR 'b')

==========================================
recovers from errors inside arrays
==========================================
[1, , 2]
---
(array
    (number)
    (ERROR ',')
    (number))

==========================================
recovers from errors inside objects
==========================================
{ "key1": 1, oops }
---
(object (string) (number) (ERROR 'o'))

==========================================
recovers from errors inside nested objects
==========================================
{ "key1": { "key2": 1, 2 }, [, "key3": 3 }
---
(object
    (string) (object (string) (number) (ERROR '2'))
    (ERROR '[')
    (string) (number))
