void jx_PrintAuthorInfo() { puts("Do you want to see the detail infomation about the program(Y/N):"); char ch = jx_getchar((short)1); while((ch!='y') && (ch!= 'n')) { puts("Invalid Input,Please Input Again!"); ch = jx_getchar((short)1); } if(ch == 'y') { #ifdef _windows_ system("notepad.exe README.txt"); #endif #ifdef _linux_ system("vim README.txt"); #endif } }
static int jx_scan_string_char( struct jx_parser *s ) { int c = jx_getchar(s); if(c==EOF) { return EOF; } else if(c=='\"') { return 0; } else if(c=='\\') { c = jx_getchar(s); switch(c) { case 'b': return '\b'; case 'f': return '\f'; case 'n': return '\n'; case 'r': return '\r'; case 't': return '\t'; case 'u': return jx_scan_unicode(s); default: return c; } } else { return c; } }
static int jx_scan_unicode( struct jx_parser *s ) { int i; char str[5]; for(i=0;i<4;i++) { str[i] = jx_getchar(s); } str[4] = 0; int uc; if(sscanf(str,"%x",&uc)) { if(uc<=0x7f) { // only accept basic ascii characters return uc; } else { jx_parse_error(s,"unsupported unicode escape string"); return -1; } } else { jx_parse_error(s,"invalid unicode escape string"); return -1; } }
static jx_token_t jx_scan( struct jx_parser *s ) { int c; if(s->putback_token_valid) { s->putback_token_valid = 0; return s->putback_token; } retry: c = jx_getchar(s); if(isspace(c)) { goto retry; } else if(c==EOF) { return JX_TOKEN_EOF; } else if(c=='{') { return JX_TOKEN_LBRACE; } else if(c=='}') { return JX_TOKEN_RBRACE; } else if(c=='[') { return JX_TOKEN_LBRACKET; } else if(c==']') { return JX_TOKEN_RBRACKET; } else if(c==',') { return JX_TOKEN_COMMA; } else if(c==':') { return JX_TOKEN_COLON; } else if(c=='\"') { int i; for(i=0;i<MAX_TOKEN_SIZE;i++) { int n = jx_scan_string_char(s); if(n==EOF) { return JX_TOKEN_ERROR; } else if(n==0) { s->token[i] = n; return JX_TOKEN_STRING; } else { s->token[i] = n; } } jx_parse_error(s,"string constant too long"); return JX_TOKEN_ERROR; } else if(strchr("+-0123456789.",c)) { s->token[0] = c; int i; for(i=1;i<MAX_TOKEN_SIZE;i++) { c = jx_getchar(s); if(strchr("0123456789.-+eE",c)) { s->token[i] = c; } else { s->token[i] = 0; jx_ungetchar(s,c); char *endptr; s->integer_value = strtoll(s->token,&endptr,10); if(!*endptr) return JX_TOKEN_INTEGER; s->double_value = strtod(s->token,&endptr); if(!*endptr) return JX_TOKEN_DOUBLE; jx_parse_error(s,"invalid number format"); return JX_TOKEN_ERROR; } } jx_parse_error(s,"integer constant too long"); return JX_TOKEN_ERROR; } else if(isalpha(c) || c=='_') { s->token[0] = c; int i; for(i=1;i<MAX_TOKEN_SIZE;i++) { c = jx_getchar(s); if(isalnum(c) || c=='_') { s->token[i] = c; } else { jx_ungetchar(s,c); s->token[i] = 0; if(!strcmp(s->token,"true")) { return JX_TOKEN_TRUE; } else if(!strcmp(s->token,"false")) { return JX_TOKEN_FALSE; } else if(!strcmp(s->token,"null")) { return JX_TOKEN_NULL; } else { return JX_TOKEN_SYMBOL; } } } jx_parse_error(s,"symbol too long"); return JX_TOKEN_ERROR; } else { s->token[0] = c; s->token[1] = 0; return JX_TOKEN_ERROR; } }