#include <iostream>
#include <boost/spirit/core.hpp>

using namespace boost::spirit;

typedef
    alternative<alternative<alternative<alternative<space_parser,
    sequence<sequence<strlit<const char*>,
    kleene_star<difference<anychar_parser, chlit<char> > > >, chlit<char> >
    >, sequence<sequence<strlit<const char*>,
    kleene_star<difference<anychar_parser, strlit<const char*> > > >,
    strlit<const char*> > >, sequence<sequence<strlit<const char*>,
    kleene_star<difference<anychar_parser, chlit<char> > > >, chlit<char> >
    >, sequence<sequence<strlit<const char*>,
    kleene_star<difference<anychar_parser, chlit<char> > > >, chlit<char> >
    >
rule_t;

struct skip_grammar : public grammar<skip_grammar>
{
    template <typename ScannerT>
    struct definition
    {
        definition(skip_grammar const& /*self*/)
        : skip(
                space_p
                |   "//" >> *(anychar_p - '\n') >> '\n'     // C++ comment
                |   "/*" >> *(anychar_p - "*/") >> "*/"     // C comment
                |   "#line" >> *(anychar_p - '\n') >> '\n'  // added for correctly
                                                            // handling preprocessed
                |   "#pragma" >> *(anychar_p - '\n') >> '\n'// files from Intel V5.0.1
                                                            // on W2K
        )
        {
        }

        rule_t skip;

        rule_t const&
        start() const { return skip; }
    };
};

int
main()
{
    skip_grammar g;
    bool success = parse(
        "/*this is a comment*/\n//this is a c++ comment\n\n",
        *g).full;
    assert(success);
    std::cout << "SUCCESS!!!\n";
    return 0;
}
