Boost logo

Boost :

Subject: Re: [boost] [Boost-announce] [metaparse] Review period starts May 25th and ends June 7th
From: Edward Diener (eldiener_at_[hidden])
Date: 2015-05-19 23:23:31


On 5/19/2015 5:39 PM, Christophe Henry wrote:
> Dear all,
>
> The review of the Metaparse library starts next Monday, May 25th and ends
> June 7th. Metaparse was written by Abel Sinkovics.
>
> Metaparse is a parser generator library for template metaprograms.
> The purpose of this library is to support the creation of parsers that
> parse at compile time.
> This library is intended to be used for embedded domain specific language
> creation for C++ and can help libraries provide a better interface.
> It is similar to Boost.Spirit, however while parsers built with Spirit
> parse at run-time, parsers built with Metaparse parse at compile-time.
> It makes it possible for library authors to provide an interface that
> follows the common notation of the problem domain of the library.
> (eg. SQL queries, grammars, etc written in their common notation instead of
> similar-looking C++ expressions).
> For example there is a (yet incomplete) interface for Boost.Spirit that
> makes it possible to write
>
> MPLLIBS_REGEX("^[abcd][3-8]\\.foo$")
>
> instead of
>
> bos >> set[as_xpr('a')|'b'|'c'|'d'] >> range('3','8') >> '.' >> 'f' >>
> 'o' >> 'o' >> eos
>
> and make the parser built with Metaparse generate the latter expression
> from the former one.
>
> (It can be found here:
> https://github.com/istvans/mpllibs/tree/master/libs/xlxpressive)
>
> Since the library is based on template metaprogramming, the DSLs can be
> used for type validation as well.
> This is demonstrated by the type-safe printf implementation (
> http://abel.web.elte.hu/mpllibs/safe_printf/index.html).
> It type-checks the arguments of a printf call based on the format string
> and has zero runtime overhead compared to unchecked printf.
>
> Parsers can be constructed in a declarative manner and (even though this is
> template metaprogramming based) remain readable.
> The implementation reflects the grammar it parses (with additional elements
> for semantic actions).
> Even though the library requires the parser author to write template
> metaprograms, the development of parsers is well supported by tools like
> Metashell and MDB.
>
> An important aspect of parsers (built with this library or another one) is
> error reporting for invalid input.
> The library offers tools for the parser authors to be able to provide
> useful error messages in case of parsing errors.
> Here is an example error report by a parser built with Metaparse (the
> parser can be found in the Getting Started guide of the library):
>
> ..... x__________________PARSING_FAILED__________________x<1, 5,
> unpaired<1, 1, literal_expected<')'>>> ....
>
> It is an error report letting the developer know that a closing paren is
> missing at line 1, column 5 and the unclosed opening paren is in line 1,
> column 1.
>
>
> Metaparse can be downloaded from Github:
>
> https://github.com/sabel83/mpllibs/tree/master/mpllibs/metaparse
>
> And a very complete tutorial:
>
> http://abel.web.elte.hu/mpllibs/metaparse/getting_started.html

In the tutorial it states:

"This tutorial is long and therefore you might want to make shorter or
longer breaks while reading it. To make it easy for you to stop at a
certain point and continue later (or to start in the middle if you are
already familiar with the basics) Metaparse has a getting_started
directory in the examples. This contains the definitions for each
section of this tutorial."

There are no examples in Metaparse and there is no getting_started
directory.

> snipped...


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