1 // Scheme字句構文中において、<token>に該当する字句を解析して返却する
3 // <token>に一致する字句構文は以下の通りです。
4 // <token> - <identifier> | <boolean> | <number>
5 // | <character> | <string>
6 // | ( | ) | [ | ] | #( | #vu8( | ' | ` | , | ,@ | .
7 // | #' | #` | #, | #,@
8 // 非終端記号については、それぞれに対応したLexerによって解析が行われます。
9 #ifndef _UTAKATA_SRC_LEXER_LEXEME_LEXER_H_
10 #define _UTAKATA_SRC_LEXER_LEXEME_LEXER_H_
15 #include "src/lexer/lexer_interface.h"
29 class LexemeTermBinderBase;
34 // Scheme字句構文における<token>中の終端記号に該当する字句を解析して返却する機能を
36 class LexemeLexer : public IPartOfLexer {
39 // 内部で利用するTermBinderを定義します。
42 // TermBinder内部の各TermBinderをdeleteします。
45 // readerの先頭から、<token>に一致する字句を解析して、それぞれのToken
47 // <token>に一致する構文が存在しない場合、NULLが返却されます。
48 // 返却された有効なTokenは、利用する側に解体責任が発生します。
49 virtual akebono::smart_ptr<lexer::Token> Lex(reader::EncodingReader* reader);
53 // readerの先頭から、<token>中の終端記号にマッチするかどうかをチェック
55 // それぞれに一致しない場合、NULLを返却します。
56 akebono::smart_ptr<lexer::Token> LexTermOfLexeme(reader::EncodingReader* reader);
58 // 内部で利用されるTermBinder群です。コンストラクタで初期化されます。
59 std::vector<lexer::detail::LexemeTermBinderBase*> term_binders_;
62 class LexemeLexerFactory : public ILexerCreator {
63 // LexemeLexerをIPartOfLexerとして生成するファクトリです。
65 LexemeLexerFactory() {}
66 virtual ~LexemeLexerFactory() {}
68 // ChractorLexerを新たに割り当てて返します。
69 // 返されたインスタンスは、取得側で開放する必要があります。
70 virtual IPartOfLexer* Create() const {return new LexemeLexer();}
75 #endif /* _UTAKATA_SRC_LEXER_LEXEME_LEXER_H_ */