OSDN Git Service

069564e4ed200e74fc7a315497c4fadb48e75a82
[simplecms/utakata.git] / src / lexer / boolean_lexer.cpp
1 #include <algorithm>
2
3 #include "src/encoding_reader.h"
4 #include "src/exception_macro.h"
5 #include "src/lexeme.h"
6 #include "src/lexer/boolean_lexer.h"
7 #include "src/lexer/term_lexer.h"
8 #include "src/lexer/term_checker.h"
9 #include "src/unicode.h"
10
11 namespace lexer = utakata::lexer;
12 namespace term = utakata::lexer::term;
13 namespace unicode = utakata::unicode;
14 namespace reader = utakata::reader;
15
16 // 宣言のコメントを参照してください。
17 lexer::Lexeme* lexer::BooleanLexer::Lex(reader::EncodingReader* reader) {
18
19   lexer::TermLexer<term::Boolean> boolean;
20   if (!boolean.CheckToken(reader)) {
21     return NULL;
22   }
23
24   unicode::UniString str(unicode::Convert(
25       reader->Read(boolean.ReadToken(reader))));
26
27   lexer::TermLexer<term::Delimiter> std_delimiter;
28   if (!reader->IsEof() && !std_delimiter.CheckToken(reader)) {
29     unicode::UniString except_message("not boolean delimiters : ");
30     except_message.Append(str);
31     THROW_EXCEPTION_(lexer::LexException, except_message);
32   }
33
34   return new lexer::Lexeme(str, lexer::Lexeme::kBoolean);
35 }