spirit/test/lex/regression_basic_lexer.cpp
Hartmut Kaiser b5a81660c3 Spirit: copyright fixes
[SVN r74246]
2011-09-05 22:32:29 +00:00

65 lines
1.7 KiB
C++

// Copyright (c) 2001-2011 Hartmut Kaiser
// Copyright (c) 2009 Pavel Baranov
//
// 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)
#include <boost/detail/lightweight_test.hpp>
#include <boost/spirit/include/lex_lexertl.hpp>
#include <iostream>
#include <string>
using namespace boost::spirit;
using namespace boost::spirit::lex;
typedef const char * base_iterator;
///////////////////////////////////////////////////////////////////////////////
// Token definition
///////////////////////////////////////////////////////////////////////////////
template <typename Lexer>
struct position_helper_tokens : lexer<Lexer>
{
position_helper_tokens()
{
// define tokens and associate them with the lexer
eol = "\n";
any = "[^\n]+";
// associate tokens with the lexer
this->self
= eol
| any
;
}
token_def<> any, eol;
};
int main()
{
// read input from the given file
std::string str ("test");
// token type
typedef lexertl::token<base_iterator, lex::omit, boost::mpl::false_> token_type;
// lexer type
typedef lexertl::actor_lexer<token_type> lexer_type;
// create the lexer object instance needed to invoke the lexical analysis
position_helper_tokens<lexer_type> position_helper_lexer;
// tokenize the given string, all generated tokens are discarded
base_iterator first = str.c_str();
base_iterator last = &first[str.size()];
for(lexer_type::iterator_type i = position_helper_lexer.begin(first, last);
i != position_helper_lexer.end() && (*i).is_valid(); i++ )
{
}
return boost::report_errors();
}