file_parser.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 90 行
CPP
90 行
/*============================================================================= Copyright (c) 2002 Jeff Westfahl http://spirit.sourceforge.net/ Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)=============================================================================*//////////////////////////////////////////////////////////////////////////////////// A parser that echoes a file// See the "File Iterator" chapter in the User's Guide.//// [ JMW 8/05/2002 ]/////////////////////////////////////////////////////////////////////////////////#include <boost/spirit/include/classic_core.hpp>#include <boost/spirit/include/classic_file_iterator.hpp>#include <iostream>///////////////////////////////////////////////////////////////////////////////using namespace BOOST_SPIRIT_CLASSIC_NS;//////////////////////////////////////////////////////////////////////////////// Types//////////////////////////////////////////////////////////////////////////////typedef char char_t;typedef file_iterator<char_t> iterator_t;typedef scanner<iterator_t> scanner_t;typedef rule<scanner_t> rule_t;//////////////////////////////////////////////////////////////////////////////// Actions//////////////////////////////////////////////////////////////////////////////void echo(iterator_t first, iterator_t const& last){ while (first != last) std::cout << *first++;}//////////////////////////////////////////////////////////////////////////////// Main program//////////////////////////////////////////////////////////////////////////////intmain(int argc, char* argv[]){ if (2 > argc) { std::cout << "Must specify a filename!\n"; return -1; } // Create a file iterator for this file iterator_t first(argv[1]); if (!first) { std::cout << "Unable to open file!\n"; return -1; } // Create an EOF iterator iterator_t last = first.make_end(); // A simple rule rule_t r = *(anychar_p); // Parse parse_info <iterator_t> info = parse( first, last, r[&echo] ); // This really shouldn't fail... if (info.full) std::cout << "Parse succeeded!\n"; else std::cout << "Parse failed!\n"; return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?