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