OSDN Git Service

delimiter.h/cppを、term_lexer、term_checkerとしてテンプレートを利用するように分離した。
[simplecms/utakata.git] / src / lexer / inner_hex_lexer.h
1 // Scheme構文における文字を判定するためのLexerです。
2 // ここで定義されるLexerは、IPartOfLexerから派生しており、以下の条件
3 // をもってLexerDispatcherからディスパッチします。
4 // :検索対象文字列の先頭 = #\ の場合:
5 #ifndef _UTAKATA_SRC_LEXER_INNER_HEX_LEXER_H_
6 #define _UTAKATA_SRC_LEXER_INNER_HEX_LEXER_H_
7
8 namespace utakata {
9 namespace unicode {
10 class UniString;
11 class UniChar;
12 };
13
14 namespace lexer {
15 // Scheme構文におけるHexValueに該当する文字列であるかどうかを検査し、
16 // 字句として切り出します。
17 class InnerHexValueLexer {
18  public:
19
20   InnerHexValueLexer() {}
21   virtual ~InnerHexValueLexer() {}
22
23   // 受け取った文字列すべてが0-9a-fA-Fの範囲内であり、かつ16進数として
24   // 変換した値が、Schemeで基底されている範囲外ではない場合、resultに
25   // 文字列の16進数変換後の値を設定し、trueを返します。
26   // 16進数の文字列の範囲外である場合、falseが返されます。
27   // 変換後の値が、Unicodeの範囲外である場合、例外が送出されます。
28   virtual bool Lex(const unicode::UniString& str, unsigned int* result);
29  private:
30
31   // 渡したunicodeの数値表現を返します。渡される値は、0-9a-fA-Fの
32   // 範囲内であることが想定されています。
33   int ConvertHexValueFromUnicode(const unicode::UniChar& code);
34 };
35 }
36 }
37
38 #endif /* _UTAKATA_SRC_LEXER_INNER_HEX_LEXER_H_ */