Boost logo

Boost :

Subject: Re: [boost] Potential Boost SAX library
From: Bjorn Reese (breese_at_[hidden])
Date: 2018-01-13 10:05:37


On 01/09/18 18:36, Oliver Adams via Boost wrote:

> I was wondering if a library I'm developing would be of value to the
> Boost community. It is basically an event-driven parsing/serialization
> library for common formats using a standard internal representation or
> simple pass-through conversions. Would anyone be interested in something
> like this being added to Boost?

There are two kinds of incremental parsers: push parsers (SAX) and pull
parsers (approximately StAX.) Briefly put, push parsers traverses the
input automatically and generates events for each token it finds,
whereas pull parsers traverses the input manually like an iterator
and the current token can be queried.

Pull parsers have some significant advantages over push parser:

   * It is straight-forward to implement a push parser on top of a pull
     parser. This involves a loop and a switch statement (see [1] for a
     complete example.) Going in the other direction involves the use of
     coroutines; most likely stateful coroutines.

   * Contextual parsing can be done directly, unlike push parsers where
     you have to maintain contextual state in the event handler.

   * Push parsers can be used directly in Boost.Serialization archives.

   * Pull parsers are composable. For instance, you could insert a URL
     pull parser directly into an HTTP pull parser.

For a pull parser framework see:

   https://github.com/breese/trial.protocol

The documentation is a bit old though.

[1]
http://breese.github.io/trial/protocol/trial_protocol/json/tutorial/push_parser.html


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk