#lib json.nas import("lib.nas"); var JSON=func(){ var ( j_eof, j_lbrace, j_rbrace, j_lbracket, j_rbracket, 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 content={}; var init=func(){ line=1; text_size=0; ptr=0; content={}; token={content:'',type:''}; text=''; } 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=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)) die("empty string"); text=split('',str); text_size=size(text); return; } var next=func() { while(ptr=text_size) { token.content="eof"; token.type=j_eof; return; } var c=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_lbracket; } elsif(c==']') { token.content=']'; token.type=j_rbracket; } 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