|  |  | @ -29,7 +29,7 @@ namespace Bk::Json | 
			
		
	
		
		
			
				
					
					|  |  |  |         lexer = Lexer(data); |  |  |  |         lexer = Lexer(data); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     std::shared_ptr<Json::Node> Parser::parse() 
 |  |  |  |     Pointer Parser::parse() 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         Token token; |  |  |  |         Token token; | 
			
		
	
		
		
			
				
					
					|  |  |  |         while (lexer.has_more_tokens()) { |  |  |  |         while (lexer.has_more_tokens()) { | 
			
		
	
	
		
		
			
				
					|  |  | @ -40,33 +40,33 @@ namespace Bk::Json | 
			
		
	
		
		
			
				
					
					|  |  |  |                 { |  |  |  |                 { | 
			
		
	
		
		
			
				
					
					|  |  |  |                     case TokenType::CURLY_OPEN: 
 |  |  |  |                     case TokenType::CURLY_OPEN: 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                     { |  |  |  |                     { | 
			
		
	
		
		
			
				
					
					|  |  |  |                         std::shared_ptr<Json::Node> parsed_object = parse_object(); |  |  |  |                         Pointer parsed_object = parse_object(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                         root = parsed_object; |  |  |  |                         root = parsed_object; | 
			
		
	
		
		
			
				
					
					|  |  |  |                         break; |  |  |  |                         break; | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |                     case TokenType::ARRAY_OPEN: 
 |  |  |  |                     case TokenType::ARRAY_OPEN: 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                     { |  |  |  |                     { | 
			
		
	
		
		
			
				
					
					|  |  |  |                         std::shared_ptr<Json::Node> parsed_list = parse_list(); |  |  |  |                         Pointer parsed_list = parse_list(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                         root = parsed_list; |  |  |  |                         root = parsed_list; | 
			
		
	
		
		
			
				
					
					|  |  |  |                         break; |  |  |  |                         break; | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                     case TokenType::STRING: 
 |  |  |  |                     case TokenType::STRING: 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                     { |  |  |  |                     { | 
			
		
	
		
		
			
				
					
					|  |  |  |                         std::shared_ptr<Json::Node> parsed_string = parse_string(); |  |  |  |                         Pointer parsed_string = parse_string(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                         root = parsed_string; |  |  |  |                         root = parsed_string; | 
			
		
	
		
		
			
				
					
					|  |  |  |                         break; |  |  |  |                         break; | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |                     case TokenType::NUMBER: 
 |  |  |  |                     case TokenType::NUMBER: 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                     { |  |  |  |                     { | 
			
		
	
		
		
			
				
					
					|  |  |  |                         std::shared_ptr<Json::Node> parsed_number = parse_number(); |  |  |  |                         Pointer parsed_number = parse_number(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                         root = parsed_number; |  |  |  |                         root = parsed_number; | 
			
		
	
		
		
			
				
					
					|  |  |  |                         break; |  |  |  |                         break; | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |                     
 |  |  |  |                     
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                     case TokenType::BOOLEAN: 
 |  |  |  |                     case TokenType::BOOLEAN: 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                     { |  |  |  |                     { | 
			
		
	
		
		
			
				
					
					|  |  |  |                         std::shared_ptr<Json::Node> parsed_boolean = parse_boolean(); |  |  |  |                         Pointer parsed_boolean = parse_boolean(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                         break; |  |  |  |                         break; | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |                 } | 
			
		
	
	
		
		
			
				
					|  |  | @ -74,7 +74,7 @@ namespace Bk::Json | 
			
		
	
		
		
			
				
					
					|  |  |  |             catch(std::logic_error& e) |  |  |  |             catch(std::logic_error& e) | 
			
		
	
		
		
			
				
					
					|  |  |  |             { |  |  |  |             { | 
			
		
	
		
		
			
				
					
					|  |  |  |                 BK_INFO(e.what()); |  |  |  |                 BK_INFO(e.what()); | 
			
		
	
		
		
			
				
					
					|  |  |  |                 auto node = std::shared_ptr<Json::Node>(); |  |  |  |                 auto node = Pointer(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                 node->set_null(); |  |  |  |                 node->set_null(); | 
			
		
	
		
		
			
				
					
					|  |  |  |                 root = node; |  |  |  |                 root = node; | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |                 break; | 
			
		
	
	
		
		
			
				
					|  |  | @ -83,9 +83,9 @@ namespace Bk::Json | 
			
		
	
		
		
			
				
					
					|  |  |  |         return root; |  |  |  |         return root; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     std::shared_ptr<Json::Node> Parser::parse_list() 
 |  |  |  |     Pointer Parser::parse_list() 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         std::shared_ptr<Json::Node> node = std::make_shared<Json::Node>(); |  |  |  |         Pointer node = Pointer(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         Json::List* list = new Json::List(); |  |  |  |         Json::List* list = new Json::List(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         bool has_completed = false; |  |  |  |         bool has_completed = false; | 
			
		
	
		
		
			
				
					
					|  |  |  |         Token next_token; |  |  |  |         Token next_token; | 
			
		
	
	
		
		
			
				
					|  |  | @ -103,7 +103,7 @@ namespace Bk::Json | 
			
		
	
		
		
			
				
					
					|  |  |  |                     has_completed = true; |  |  |  |                     has_completed = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |                     break; |  |  |  |                     break; | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |                 std::shared_ptr<Json::Node> node; |  |  |  |                 Pointer node; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                 switch (next_token.type) 
 |  |  |  |                 switch (next_token.type) 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 { |  |  |  |                 { | 
			
		
	
		
		
			
				
					
					|  |  |  |                     case TokenType::ARRAY_OPEN: 
 |  |  |  |                     case TokenType::ARRAY_OPEN: 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -143,10 +143,10 @@ namespace Bk::Json | 
			
		
	
		
		
			
				
					
					|  |  |  |         return node; |  |  |  |         return node; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     std::shared_ptr<Json::Node> Parser::parse_object() 
 |  |  |  |     Pointer Parser::parse_object() 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         std::string key = ""; |  |  |  |         std::string key = ""; | 
			
		
	
		
		
			
				
					
					|  |  |  |         std::shared_ptr<Json::Node> node = std::make_shared<Json::Node>(); |  |  |  |         Pointer node = Pointer(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         Json::Object *key_object_map = new Json::Object(); |  |  |  |         Json::Object *key_object_map = new Json::Object(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         bool has_completed = false; |  |  |  |         bool has_completed = false; | 
			
		
	
		
		
			
				
					
					|  |  |  |         bool no_key = true; |  |  |  |         bool no_key = true; | 
			
		
	
	
		
		
			
				
					|  |  | @ -171,7 +171,7 @@ namespace Bk::Json | 
			
		
	
		
		
			
				
					
					|  |  |  |                 next_token = lexer.get_token(); |  |  |  |                 next_token = lexer.get_token(); | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if (next_token.type == TokenType::COLON || next_token.type == TokenType::COMMA) |  |  |  |                 if (next_token.type == TokenType::COLON || next_token.type == TokenType::COMMA) | 
			
		
	
		
		
			
				
					
					|  |  |  |                     continue; |  |  |  |                     continue; | 
			
		
	
		
		
			
				
					
					|  |  |  |                 std::shared_ptr<Json::Node> node; |  |  |  |                 Pointer node; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                 switch (next_token.type) 
 |  |  |  |                 switch (next_token.type) 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 { |  |  |  |                 { | 
			
		
	
		
		
			
				
					
					|  |  |  |                     case TokenType::STRING: 
 |  |  |  |                     case TokenType::STRING: 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -223,36 +223,36 @@ namespace Bk::Json | 
			
		
	
		
		
			
				
					
					|  |  |  |         return node;    
 |  |  |  |         return node;    
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     std::shared_ptr<Json::Node> Parser::parse_string() 
 |  |  |  |     Pointer Parser::parse_string() 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         std::shared_ptr<Json::Node> node = std::make_shared<Json::Node>(); |  |  |  |         Pointer node = Pointer(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         Token token = lexer.roll_back_token(); |  |  |  |         Token token = lexer.roll_back_token(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         std::string *sValue = new std::string(token.value); |  |  |  |         std::string *sValue = new std::string(token.value); | 
			
		
	
		
		
			
				
					
					|  |  |  |         node->set_string(sValue); |  |  |  |         node->set_string(sValue); | 
			
		
	
		
		
			
				
					
					|  |  |  |         return node; |  |  |  |         return node; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     std::shared_ptr<Json::Node> Parser::parse_number() 
 |  |  |  |     Pointer Parser::parse_number() 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         std::shared_ptr<Json::Node> node = std::make_shared<Json::Node>(); |  |  |  |         Pointer node = Pointer(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         Token token = lexer.roll_back_token(); |  |  |  |         Token token = lexer.roll_back_token(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         float fValue = std::stof(token.value); |  |  |  |         float fValue = std::stof(token.value); | 
			
		
	
		
		
			
				
					
					|  |  |  |         node->set_float(fValue); |  |  |  |         node->set_float(fValue); | 
			
		
	
		
		
			
				
					
					|  |  |  |         return node; |  |  |  |         return node; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     std::shared_ptr<Json::Node> Parser::parse_boolean() 
 |  |  |  |     Pointer Parser::parse_boolean() 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         std::shared_ptr<Json::Node> node = std::make_shared<Json::Node>(); |  |  |  |         Pointer node = Pointer(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         Token token = lexer.roll_back_token(); |  |  |  |         Token token = lexer.roll_back_token(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         bool bValue = token.value == "True" ? true : false; |  |  |  |         bool bValue = token.value == "True" ? true : false; | 
			
		
	
		
		
			
				
					
					|  |  |  |         node->set_bool(bValue); |  |  |  |         node->set_bool(bValue); | 
			
		
	
		
		
			
				
					
					|  |  |  |         return node; |  |  |  |         return node; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     std::shared_ptr<Json::Node> Parser::parse_null() 
 |  |  |  |     Pointer Parser::parse_null() 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         std::shared_ptr<Json::Node> node = std::make_shared<Json::Node>(); |  |  |  |         Pointer node = Pointer(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         Token token = lexer.roll_back_token(); |  |  |  |         Token token = lexer.roll_back_token(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         node->set_null(); |  |  |  |         node->set_null(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         return node; |  |  |  |         return node; | 
			
		
	
	
		
		
			
				
					|  |  | 
 |