00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "Tokenizer.h"
00025
00026
00027 int ptbFlexLexer::yylex() { return 0; }
00028
00029 namespace Parser {
00030
00031 char const* Scanner::TypeName[] = { "Eof",
00032 "Word",
00033 "Abbrev",
00034 "Date",
00035 "Number",
00036 "Phone",
00037 "Tag",
00038 "Url",
00039 "Punct"
00040 };
00041
00042 void Scanner::Token::serialize(std::ostream& stream)
00043 {
00044 stream << "<token type='" <<
00045 TypeName[((int)this->type)%9] <<
00046 "' text='" << this->text << "' />";
00047 }
00048
00049 Tokenizer::Tokenizer(std::istream* is, char const* lang) :
00050 stream(*is)
00051 {
00052 scanner.switch_streams(&stream, 0);
00053 }
00054
00055 Scanner::Token const* Tokenizer::Current()
00056 {
00057 return &token;
00058 }
00059
00060 bool Tokenizer::MoveNext()
00061 {
00062 token = scanner.scan();
00063 return token.type != Scanner::Eof;
00064 }
00065
00066 void Tokenizer::Reset() {
00067 stream.seekg(0);
00068 scanner.switch_streams(&stream, 0);
00069 }
00070
00071 }