12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*==============================================================================
- Copyright (c) 2006 Tobias Schwinger
- 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)
- ==============================================================================*/
- //------------------------------------------------------------------------------
- // This example demonstrates the opaque rule parser.
- // See boost/spirit/include/rule_parser.hpp for details.
- //------------------------------------------------------------------------------
- #include <iostream>
- #include <boost/typeof/typeof.hpp>
- #include <boost/spirit/include/classic_core.hpp>
- #include <boost/spirit/include/classic_typeof.hpp>
- #include <boost/spirit/include/classic_rule_parser.hpp>
- #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
- namespace my_project { namespace my_grammar {
- using namespace BOOST_SPIRIT_CLASSIC_NS;
- #define BOOST_SPIRIT__NAMESPACE (2,(my_project,my_grammar))
- BOOST_SPIRIT_OPAQUE_RULE_PARSER(word,
- (1,( ((char const *),str) )),
- -,
- lexeme_d[ str >> +space_p ]
- )
- BOOST_SPIRIT_OPAQUE_RULE_PARSER(main,
- -,-,
- *( word("dup") | word("swap") | word("drop") | word("rot") | word("tuck") )
- )
- #undef BOOST_SPIRIT__NAMESPACE
- } } // namespace my_project::my_grammar
- int main()
- {
- std::string str;
- while (std::getline(std::cin, str))
- {
- if (str.empty())
- break;
- str += '\n';
- if (BOOST_SPIRIT_CLASSIC_NS::parse(str.c_str(), my_project::my_grammar::main).full)
- std::cout << "\nOK." << std::endl;
- else
- std::cout << "\nERROR." << std::endl;
- }
- return 0;
- }
|