-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgjson.cpp
56 lines (44 loc) · 1.23 KB
/
gjson.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "gjson.h"
#include "token.h"
#include "json.h"
#include "json_lexer.h"
#include <chrono>
void* JsonAlloc(void* (*allocProc)(size_t));
void* Json(void*, int, gjson::Token, gjson::Statement* statement);
void* JsonFree(void*, void(*freeProc)(void*));
namespace gjson {
Value::value_ptr ParseJson(std::istream& is)
{
void* shellParser = JsonAlloc(malloc);
JsonLexer lexer(is);
//lexer.token.sv = nullptr;
auto code = lexer.lex(is);
gjson::Statement state;
while(code > 0)
{
/*
std::cout << code <<std::endl;
switch(code)
{
case STRING:
std::wcout << "\t" << *lexer.token.sv << std::endl;
break;
case FLOAT:
std::cout << "\t" << lexer.token.fv << std::endl;
break;
case INTEGER:
std::cout << "\t" << lexer.token.iv << std::endl;
break;
default:
break;
}
*/
Json(shellParser, code, lexer.token, &state);
//lexer.token.sv = nullptr;
code = lexer.lex();
}
Json(shellParser, 0, lexer.token, &state);
JsonFree(shellParser, free);
return std::move(state.value);
}
}