# lib json.nas # 2021 ValKmjolnir var ( _j_eof, _j_lbrace, _j_rbrace, _j_lbrkt, _j_rbrkt, _j_comma, _j_colon, _j_str, _j_num, _j_id ) = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); var _j_content = [ "eof", "`{`", "`}`", "`[`", "`]`", "`,`", "`:`", "string", "number", "identifier" ]; var parse = func() { var text = ""; var line = 1; var text_size = 0; var ptr = 0; var token = { content: "", type: "" }; var init = func() { text = ""; line = 1; text_size = 0; ptr = 0; token = { content: "", type: "" }; } var isnum = func(c) { return '0'<=c and c<='9'; } var isid = func(c) { var tmp = c[0]; return ('a'[0]<=tmp and tmp<='z'[0]) or ('A'[0]<=tmp and tmp<='Z'[0]) or c=='_'; } var check = func() { var c = char(text[ptr]); return ( c=='{' or c=='}' or c=='[' or c==']' or c==',' or c==':' or c=='\"' or c=='\'' or isnum(c) or isid(c) ); } var get = func(str) { init(); if (!size(str)) { println("json::parse: empty string"); str = "[]"; } text = str; text_size = size(text); return; } var next = func() { while(ptr=text_size) { token.content = "eof"; token.type = _j_eof; return; } var c = char(text[ptr]); if (c=='{') { token.content = '{'; token.type = _j_lbrace; } elsif (c=='}') { token.content = '}'; token.type = _j_rbrace; } elsif (c=='[') { token.content = '['; token.type = _j_lbrkt; } elsif (c==']') { token.content = ']'; token.type = _j_rbrkt; } elsif (c==',') { token.content = ','; token.type = _j_comma; } elsif (c==':') { token.content = ':'; token.type = _j_colon; } elsif (c=='\"' or c=='\'') { var strbegin = c; var s = ""; ptr += 1; while(ptr