blob: 7525bd9556feb19de16724381a6f86a9cbf5072e [file] [log] [blame]
/*==============================================================================
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;
}