# lib json.nas # 2021 ValKmjolnir var JSON=func() { 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 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