Advertisement
Guest User

Untitled

a guest
Aug 15th, 2011
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <boost/spirit/include/qi.hpp>
  4.  
  5.  
  6.  
  7. namespace qi = boost::spirit::qi;
  8.  
  9. template < typename Iterator >
  10. struct Magic : qi::grammar<Iterator, std::string() > {
  11.     qi::rule<Iterator,std::string()> start;
  12.  
  13.     Magic() : Magic::base_type(start) {
  14.         using qi::char_;
  15.         start %= *char_(' ', '}');
  16.     }
  17. };
  18.  
  19. int main() {
  20.     using namespace std;
  21.  
  22.     // Analizowana linia
  23.     string input;
  24.     getline(cin,input);
  25.  
  26.     // Wczytany wynik
  27.     string result;
  28.  
  29.     // Poczatek wejscia
  30.     string::iterator it = input.begin();
  31.  
  32.     // Koniec wyjscia
  33.     string::iterator end = input.end();
  34.  
  35.     // Parser pozwalajacy na ciag znakow od ' ' do '}'
  36.     Magic<string::iterator> parser;
  37.  
  38.     // Odpalenie parsera na stringu 'input'
  39.     // i zapakowanie wczytyanych danych do 'result'
  40.     bool r = parse(it,end, parser,result);
  41.  
  42.     // Jezeli r == true (oznacza poprawne parsowanie)
  43.     // oraz wszystkie dane zostaly sprasowane
  44.     // to mamy poprawny string
  45.     if(r && it == end)
  46.         cout << "Poprawny string" << endl;
  47.     // wpp string zawiera niepoprawne znaki
  48.     else cout << "String zawiera niepoprawne dane" << endl;
  49.  
  50.     // Wypisanie wyniku
  51.     cout << "Wczytany string: " << endl;
  52.     cout << result << endl;
  53.  
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement