6 //#include "utf8_string.h"
10 // これはあくまで抽象なので、定義に依存させる。
18 class CUTF8InputStream;
21 namespace utf8_string {
35 lexerのlex内で、数々の条件分岐を行わなければならない場合に、
36 それぞれのsublexerからの結果、追加で返されるsublexerを、
37 次の文字における判定として利用することにしておく。
38 このようにすることで、インターフェースを完全に統一しながら、
39 sublexerからsublexerを返すようにしていくだけで、
42 これは完全にインターフェースのみを提供する。
47 virtual ~ISubLexer() {}
50 // strは前回のsublexが返した文字列であり、前のsublexによって更新される。
51 // streamは文字通りストリームとなる。sublex中で文字の取得などを
52 // 自由に行う必要があるために渡している。
53 virtual smart_ptr<ISubLexer> lex(const utakata::utf8_string::CUTF8Char& ch,
54 const utakata::utf8_string::CUTF8String& str,
55 smart_ptr<utakata::utf8::CUTF8InputStream>& stream) = 0;
57 // 作成したILexemeを返す。lexの結果を返さない場合に利用される。
58 // これだけは前方参照のみでなんとか乗り切る必要がある。
59 virtual smart_ptr<utakata::lexeme::ILexeme> getLexeme() = 0;
67 #endif /* _SUBLEXER_H_ */