Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <boost/config/warning_disable.hpp>
- #include <boost/spirit/include/qi.hpp>
- namespace test {
- namespace qi = boost::spirit::qi;
- namespace ascii = boost::spirit::ascii;
- namespace alphabet = boost::spirit::ascii;
- template <typename Iterator, typename Skipper>
- struct Parser: qi::grammar<Iterator, std::string(), Skipper> {
- Parser()
- :Parser::base_type(areaPart_)
- {
- using qi::lexeme;
- using alphabet::char_;
- areaPart_ = lexeme[+(char_ - ' ') >> *(+char_(" ") >> +(char_ - ' '))]; // preserve inner spaces
- }
- qi::rule<Iterator, std::string(), Skipper> areaPart_;
- };
- } // namespace test
- int main(void) {
- using namespace test;
- typedef std::string::const_iterator InputIter;
- typedef boost::spirit::ascii::space_type SpaceSkipper;
- SpaceSkipper space;
- typedef Parser<InputIter, SpaceSkipper> CfgParser;
- CfgParser g;
- std::string areaPartStr = " Some words ";
- std::string areaPart;
- InputIter iter = areaPartStr.begin();
- InputIter end = areaPartStr.end();
- bool r= phrase_parse(iter, end, g, space, areaPart);
- if (r) {
- std::cout << "Area name: \"" << areaPart << '"' << std::endl;
- std::cout << "\n-------------------------\n";
- std::cout << "\n Stopped at \"" << std::string(iter, end) << "\"\n";
- } else {
- std::cout << "-------------------------\n";
- std::cout << "Parsing failed\n";
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment