Boost logo

Boost Users :

Subject: Re: [Boost-users] [wave] Dummy lexer
From: Hartmut Kaiser (hartmut.kaiser_at_[hidden])
Date: 2010-11-20 18:08:15


> Hi,
> Is it possible to use wave only for the following?
> - Macros
> - Conditional inclusion/exclusion
> - #include handling

What else is a preprocessor supposed to do?

> In other words, it is possible to use wave with a dummy lexer? The idea is
> to use wave to generate a string representation after preprocessing a
> file; the resulting string can then be passed to a custom spirit V2.2+
> grammar.

The tokens returned from Wave's iterators hold the string representation of
the tokens. That means you can simply concatenate these to get the output as
a string:

    context_type ctx (input.begin(), input.end(), filename);

    context_type::iterator_type first = ctx.begin();
    context_type::iterator_type last = ctx.end();

    std::string result;
    while (first != last) {
        result += (*first).get_value();
        ++first;
    }

Is that what you need?

> One could write a lexer with the tiny subset of C++ tokens that is used in
> my grammar, but that seems overkill for a small grammar (which is
> currently well- tested and performs quite well). The application is very
> similar to the C++- like config file structure supported by property_tree.
>
> The closest I have been able to come using components out of the box is to
> use the cpplexer with the following non-default features (compared to the
> quick- start example):
> - preserve comments
> - disable whitespace insertion

That's what you probably want to set anyways.

> If a dummy lexer is already available that works, where can it be found?

None that I know of.

Regards Hartmut
---------------
http://boost-spirit.com


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net