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"
11 namespace lexer = utakata::lexer;
12 namespace term = utakata::lexer::term;
13 namespace unicode = utakata::unicode;
14 namespace reader = utakata::reader;
17 lexer::Lexeme* lexer::BooleanLexer::Lex(reader::EncodingReader* reader) {
19 lexer::TermLexer<term::Boolean> boolean;
20 if (!boolean.CheckToken(reader)) {
24 unicode::UniString str(unicode::Convert(
25 reader->Read(boolean.ReadToken(reader))));
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);
34 return new lexer::Lexeme(str, lexer::Lexeme::kBoolean);