You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
4.7 KiB
C++
168 lines
4.7 KiB
C++
// Copyright (C) 2003 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#ifndef DLIB_TOKENIZER_KERNEl_C_
|
|
#define DLIB_TOKENIZER_KERNEl_C_
|
|
|
|
#include "tokenizer_kernel_abstract.h"
|
|
#include "../assert.h"
|
|
#include <string>
|
|
#include <iostream>
|
|
|
|
namespace dlib
|
|
{
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
class tokenizer_kernel_c : public tokenizer
|
|
{
|
|
|
|
public:
|
|
std::istream& get_stream (
|
|
) const;
|
|
|
|
void get_token (
|
|
int& type,
|
|
std::string& token
|
|
);
|
|
|
|
void set_identifier_token (
|
|
const std::string& head,
|
|
const std::string& body
|
|
);
|
|
|
|
int peek_type (
|
|
) const;
|
|
|
|
const std::string& peek_token (
|
|
) const;
|
|
};
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
inline void swap (
|
|
tokenizer_kernel_c<tokenizer>& a,
|
|
tokenizer_kernel_c<tokenizer>& b
|
|
) { a.swap(b); }
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------------------
|
|
// member function definitions
|
|
// ----------------------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
void tokenizer_kernel_c<tokenizer>::
|
|
set_identifier_token (
|
|
const std::string& head,
|
|
const std::string& body
|
|
)
|
|
{
|
|
using namespace std;
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT( head.find_first_of(" \r\t\n0123456789") == string::npos &&
|
|
body.find_first_of(" \r\t\n") == string::npos ,
|
|
"\tvoid tokenizer::set_identifier_token()"
|
|
<< "\n\tyou can't define the IDENTIFIER token this way."
|
|
<< "\n\thead: " << head
|
|
<< "\n\tbody: " << body
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
tokenizer::set_identifier_token(head,body);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
std::istream& tokenizer_kernel_c<tokenizer>::
|
|
get_stream (
|
|
) const
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT( this->stream_is_set() == true,
|
|
"\tstd::istream& tokenizer::get_stream()"
|
|
<< "\n\tyou must set a stream for this object before you can get it"
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
return tokenizer::get_stream();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
int tokenizer_kernel_c<tokenizer>::
|
|
peek_type (
|
|
) const
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT( this->stream_is_set() == true,
|
|
"\tint tokenizer::peek_type()"
|
|
<< "\n\tyou must set a stream for this object before you peek at what it contains"
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
return tokenizer::peek_type();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
const std::string& tokenizer_kernel_c<tokenizer>::
|
|
peek_token (
|
|
) const
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT( this->stream_is_set() == true,
|
|
"\tint tokenizer::peek_token()"
|
|
<< "\n\tyou must set a stream for this object before you peek at what it contains"
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
return tokenizer::peek_token();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
void tokenizer_kernel_c<tokenizer>::
|
|
get_token (
|
|
int& type,
|
|
std::string& token
|
|
)
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT( this->stream_is_set() == true,
|
|
"\tvoid tokenizer::get_token()"
|
|
<< "\n\tyou must set a stream for this object before you can get tokens from it."
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
tokenizer::get_token(type,token);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
#endif // DLIB_TOKENIZER_KERNEl_C_
|
|
|
|
|