Ping.

Paolo

Il mer 7 gen 2026, 09:48 Paolo Bonzini <[email protected]> ha scritto:

> This rewrites the json-parser to use a push parser aka state machine.
> While push parsers are inherently more complex than recursive descent,
> the grammar for JSON is simple enough that the parser remains readable.
> There is therefore no need to use e.g. QEMU coroutines.
>
> Unlike the suggestion in commit 62815d85aed ("json: Redesign the callback
> to consume JSON values", 2018-08-24), I kept the json-streamer concept.
> It helps in handling input limits, it performs error recovery, and it
> converts the token-at-a-time push interface to callbacks---all things
> that are more easily done in a separate layer to keep the parser clean.
> However, there is no need anymore for it to store partial JSON objects
> in tokenized form.
>
> Another benefit is that QEMU can report the first parsing error
> immediately, without waiting for delimiters to be balanced.
>
> On top of the benefits intrinsic in the push architecture, it so happens
> that it's really easy to add a location to JSON parsing errors now, so
> do that as well.
>
> Paolo
>
>
> Paolo Bonzini (5):
>   json-parser: pass around lookahead token, constify
>   json-parser: replace with a push parser
>   json-streamer: remove token queue
>   json-streamer: do not heap-allocate JSONToken
>   json-parser: add location to JSON parsing errors
>
>  include/qobject/json-parser.h |  12 +-
>  qobject/json-parser-int.h     |  13 +-
>  qobject/json-lexer.c          |  11 +-
>  qobject/json-parser.c         | 493 ++++++++++++++++------------------
>  qobject/json-streamer.c       | 107 ++++----
>  5 files changed, 310 insertions(+), 326 deletions(-)
>
> --
> 2.52.0
>

Reply via email to