summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/spirit/test/lex/test_parser.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/spirit/test/lex/test_parser.hpp')
-rw-r--r--src/boost/libs/spirit/test/lex/test_parser.hpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/boost/libs/spirit/test/lex/test_parser.hpp b/src/boost/libs/spirit/test/lex/test_parser.hpp
new file mode 100644
index 00000000..6a23cb34
--- /dev/null
+++ b/src/boost/libs/spirit/test/lex/test_parser.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Hartmut Kaiser
+
+ Distributed under 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TEST_PARSER_SEP_24_2007_0558PM)
+#define BOOST_SPIRIT_TEST_PARSER_SEP_24_2007_0558PM
+
+#include <boost/spirit/include/qi_parse.hpp>
+#include <boost/spirit/include/qi_what.hpp>
+
+namespace spirit_test
+{
+ template <typename Char, typename Parser, typename Lexer>
+ inline bool test_parser(Char const* in, Parser const& p, Lexer& lex,
+ bool full_match = true)
+ {
+ // we don't care about the result of the "what" function.
+ // we only care that all parsers have it:
+ boost::spirit::qi::what(p);
+
+ std::string str (in);
+ std::string::iterator it_in = str.begin();
+ std::string::iterator end_in = str.end();
+
+ typedef typename Lexer::iterator_type iterator_type;
+
+ iterator_type iter = lex.begin(it_in, end_in);
+ iterator_type end = lex.end();
+
+ return boost::spirit::qi::parse(iter, end, p)
+ && (!full_match || (iter == end));
+ }
+
+ template <typename Char, typename Parser, typename Lexer, typename Skipper>
+ inline bool test_parser(Char const* in, Parser const& p, Lexer& lex,
+ Skipper const& s, bool full_match = true)
+ {
+ // we don't care about the result of the "what" function.
+ // we only care that all parsers have it:
+ boost::spirit::qi::what(p);
+
+ std::string str (in);
+ std::string::iterator it_in = str.begin();
+ std::string::iterator end_in = str.end();
+
+ typedef typename Lexer::iterator_type iterator_type;
+
+ iterator_type iter = lex.begin(it_in, end_in);
+ iterator_type end = lex.end();
+
+ return boost::spirit::qi::phrase_parse(iter, end, p, s)
+ && (!full_match || (iter == end));
+ }
+
+}
+
+#endif