#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
typedef struct
{
char* s;
int len;
} token_t;
int scan_tok(char* in_txt, token_t* out_buf, int* out_tok_len)
{
unsigned eqcls[256] = {
0,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535282,1568535282,1568535294,1568535294,1568535282,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535282,1568535294,1568535126,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1566438142,1568535284,1566438140,1568516862,1568535166,
1563092730,1563125496,1563125496,1563125496,1563125496,1563125496,1563125496,1563125496,
1563125496,1563125496,1568535284,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535038,1568535038,1568535038,1568535038,1568001534,1568535038,1568535038,
1568535038,1568535038,1568535038,1568535038,1568535038,1568535038,1568535038,1568535038,
1568535038,1568535038,1568535038,1568535038,1568535038,1568535038,1568535038,1568535038,
1568535038,1568535038,1568535038,1568535284,1568535150,1568535284,1568535294,1568535294,
1568535294,1560146430,1568534910,1568535038,1568535038,762695166,1568534910,1568535038,
1568535038,1568535038,1568535038,1568535038,1266545150,1568535038,1568534910,1568535038,
1568535038,1568535038,1560146302,1434317310,1568534910,1526591934,1568535038,1568535038,
1568535038,1568535038,1568535038,1568535284,1568535294,1568535284,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,
1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294,1568535294
};
unsigned tbl[] = {
98304, 98304, 475265, 483457, 246281, 509213, 247458, 247718,
248763, 98304, 483457, 246541, 246281, 98304, 246281, 246801,
246281, 98304, 246804, 102400, 98304, 246807, 102400, 98304,
246810, 102400, 98304, 246281, 102400, 98304, 509213, 247978,
248497, 467073, 98304, 247978, 248497, 467073, 98304, 247458,
509213, 102400, 98304, 248237, 102400, 98304, 248237, 248497,
467073, 98304, 247989, 247989, 102400, 98304, 247992, 102400,
98304, 247992, 467073, 98304, 249022, 102400, 98304, 249281,
102400, 98304, 483457, 249541, 102400, 98304, 483457, 102400
};
char* p = in_txt;
char* s = p;
token_t* ptk = out_buf;
int state = 491649;
do
{
unsigned cls = eqcls[(unsigned char)(*p)];
cls = (cls >> ((state >> 7) & 31)) & (state >> 16);
state = tbl[ (state & 127) + cls ];
p += (state >> 14) & 1;
ptk->s = s;
ptk->len = p-s;
ptk += (state >> 13) & 1;
s += (p-s) & (UINT_MAX + ((state >> 15) & 1));
}while( (state & 127) > 0);
*out_tok_len = ptk - out_buf;
/* error flag */
if ( (state>>12) & 1 )
return 0;
return 1;
}
int main(void)
{
char* test1 = "\n { \"this is \\\\ \\\"test json\" : -0.12345e-5, \"test key1\": [true, false, null, tulse\
, 0,1,2,8,9, 13, 2345, 30004.0, 300004.2134003, \
]\n }";
token_t buf[512];
int buf_len = 0;
int ret = 0;
memset(buf
, 0x00, sizeof(buf
));
ret = scan_tok(test1, buf, &buf_len);
if(ret == 0)
{
}
for(int i=0; i < buf_len; i++)
{
printf("%.*s\n", buf
[i
].
len, buf
[i
].
s); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bGltaXRzLmg+Cgp0eXBlZGVmIHN0cnVjdCAKewogICAgY2hhciogczsKICAgIGludCBsZW47Cn0gdG9rZW5fdDsKCmludCBzY2FuX3RvayhjaGFyKiBpbl90eHQsIHRva2VuX3QqIG91dF9idWYsIGludCogb3V0X3Rva19sZW4pCnsKICAgIHVuc2lnbmVkIGVxY2xzWzI1Nl0gPSB7CiAgICAgICAgICAgICAgIDAsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwKICAgICAgICAxNTY4NTM1Mjk0LDE1Njg1MzUyODIsMTU2ODUzNTI4MiwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI4MiwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsCiAgICAgICAgMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LAogICAgICAgIDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwKICAgICAgICAxNTY4NTM1MjgyLDE1Njg1MzUyOTQsMTU2ODUzNTEyNiwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsCiAgICAgICAgMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2NjQzODE0MiwxNTY4NTM1Mjg0LDE1NjY0MzgxNDAsMTU2ODUxNjg2MiwxNTY4NTM1MTY2LAogICAgICAgIDE1NjMwOTI3MzAsMTU2MzEyNTQ5NiwxNTYzMTI1NDk2LDE1NjMxMjU0OTYsMTU2MzEyNTQ5NiwxNTYzMTI1NDk2LDE1NjMxMjU0OTYsMTU2MzEyNTQ5NiwKICAgICAgICAxNTYzMTI1NDk2LDE1NjMxMjU0OTYsMTU2ODUzNTI4NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsCiAgICAgICAgMTU2ODUzNTI5NCwxNTY4NTM1MDM4LDE1Njg1MzUwMzgsMTU2ODUzNTAzOCwxNTY4NTM1MDM4LDE1NjgwMDE1MzQsMTU2ODUzNTAzOCwxNTY4NTM1MDM4LAogICAgICAgIDE1Njg1MzUwMzgsMTU2ODUzNTAzOCwxNTY4NTM1MDM4LDE1Njg1MzUwMzgsMTU2ODUzNTAzOCwxNTY4NTM1MDM4LDE1Njg1MzUwMzgsMTU2ODUzNTAzOCwKICAgICAgICAxNTY4NTM1MDM4LDE1Njg1MzUwMzgsMTU2ODUzNTAzOCwxNTY4NTM1MDM4LDE1Njg1MzUwMzgsMTU2ODUzNTAzOCwxNTY4NTM1MDM4LDE1Njg1MzUwMzgsCiAgICAgICAgMTU2ODUzNTAzOCwxNTY4NTM1MDM4LDE1Njg1MzUwMzgsMTU2ODUzNTI4NCwxNTY4NTM1MTUwLDE1Njg1MzUyODQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LAogICAgICAgIDE1Njg1MzUyOTQsMTU2MDE0NjQzMCwxNTY4NTM0OTEwLDE1Njg1MzUwMzgsMTU2ODUzNTAzOCw3NjI2OTUxNjYsMTU2ODUzNDkxMCwxNTY4NTM1MDM4LAogICAgICAgIDE1Njg1MzUwMzgsMTU2ODUzNTAzOCwxNTY4NTM1MDM4LDE1Njg1MzUwMzgsMTI2NjU0NTE1MCwxNTY4NTM1MDM4LDE1Njg1MzQ5MTAsMTU2ODUzNTAzOCwKICAgICAgICAxNTY4NTM1MDM4LDE1Njg1MzUwMzgsMTU2MDE0NjMwMiwxNDM0MzE3MzEwLDE1Njg1MzQ5MTAsMTUyNjU5MTkzNCwxNTY4NTM1MDM4LDE1Njg1MzUwMzgsCiAgICAgICAgMTU2ODUzNTAzOCwxNTY4NTM1MDM4LDE1Njg1MzUwMzgsMTU2ODUzNTI4NCwxNTY4NTM1Mjk0LDE1Njg1MzUyODQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LAogICAgICAgIDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwKICAgICAgICAxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsCiAgICAgICAgMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LAogICAgICAgIDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwKICAgICAgICAxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsCiAgICAgICAgMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LAogICAgICAgIDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwKICAgICAgICAxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsCiAgICAgICAgMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LAogICAgICAgIDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwKICAgICAgICAxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsCiAgICAgICAgMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LAogICAgICAgIDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwKICAgICAgICAxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsCiAgICAgICAgMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LAogICAgICAgIDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NCwxNTY4NTM1Mjk0LDE1Njg1MzUyOTQsMTU2ODUzNTI5NAogICAgfTsKICAgIHVuc2lnbmVkIHRibFtdID0gewogICAgICAgICAgIDk4MzA0LCAgIDk4MzA0LCAgNDc1MjY1LCAgNDgzNDU3LCAgMjQ2MjgxLCAgNTA5MjEzLCAgMjQ3NDU4LCAgMjQ3NzE4LAogICAgICAgICAgMjQ4NzYzLCAgIDk4MzA0LCAgNDgzNDU3LCAgMjQ2NTQxLCAgMjQ2MjgxLCAgIDk4MzA0LCAgMjQ2MjgxLCAgMjQ2ODAxLAogICAgICAgICAgMjQ2MjgxLCAgIDk4MzA0LCAgMjQ2ODA0LCAgMTAyNDAwLCAgIDk4MzA0LCAgMjQ2ODA3LCAgMTAyNDAwLCAgIDk4MzA0LAogICAgICAgICAgMjQ2ODEwLCAgMTAyNDAwLCAgIDk4MzA0LCAgMjQ2MjgxLCAgMTAyNDAwLCAgIDk4MzA0LCAgNTA5MjEzLCAgMjQ3OTc4LAogICAgICAgICAgMjQ4NDk3LCAgNDY3MDczLCAgIDk4MzA0LCAgMjQ3OTc4LCAgMjQ4NDk3LCAgNDY3MDczLCAgIDk4MzA0LCAgMjQ3NDU4LAogICAgICAgICAgNTA5MjEzLCAgMTAyNDAwLCAgIDk4MzA0LCAgMjQ4MjM3LCAgMTAyNDAwLCAgIDk4MzA0LCAgMjQ4MjM3LCAgMjQ4NDk3LAogICAgICAgICAgNDY3MDczLCAgIDk4MzA0LCAgMjQ3OTg5LCAgMjQ3OTg5LCAgMTAyNDAwLCAgIDk4MzA0LCAgMjQ3OTkyLCAgMTAyNDAwLAogICAgICAgICAgIDk4MzA0LCAgMjQ3OTkyLCAgNDY3MDczLCAgIDk4MzA0LCAgMjQ5MDIyLCAgMTAyNDAwLCAgIDk4MzA0LCAgMjQ5MjgxLAogICAgICAgICAgMTAyNDAwLCAgIDk4MzA0LCAgNDgzNDU3LCAgMjQ5NTQxLCAgMTAyNDAwLCAgIDk4MzA0LCAgNDgzNDU3LCAgMTAyNDAwCiAgICB9OwogICAgY2hhciogcCA9IGluX3R4dDsKICAgIGNoYXIqIHMgPSBwOwogICAgdG9rZW5fdCogcHRrID0gb3V0X2J1ZjsKICAgIGludCBzdGF0ZSA9IDQ5MTY0OTsKICAgIGRvCiAgICB7CiAgICAgICAgdW5zaWduZWQgY2xzID0gZXFjbHNbKHVuc2lnbmVkIGNoYXIpKCpwKV07CiAgICAgICAgY2xzID0gKGNscyA+PiAoKHN0YXRlID4+IDcpICYgMzEpKSAmIChzdGF0ZSA+PiAxNik7CiAgICAgICAgc3RhdGUgPSB0YmxbIChzdGF0ZSAmIDEyNykgKyBjbHMgXTsKICAgICAgICBwICs9IChzdGF0ZSA+PiAxNCkgJiAxOwogICAgICAgIHB0ay0+cyA9IHM7CiAgICAgICAgcHRrLT5sZW4gPSBwLXM7CiAgICAgICAgcHRrICs9IChzdGF0ZSA+PiAxMykgJiAxOwogICAgICAgIHMgKz0gKHAtcykgJiAoVUlOVF9NQVggKyAoKHN0YXRlID4+IDE1KSAmIDEpKTsKICAgIH13aGlsZSggKHN0YXRlICYgMTI3KSA+IDApOwoKICAgICpvdXRfdG9rX2xlbiA9IHB0ayAtIG91dF9idWY7CgogICAgLyogZXJyb3IgZmxhZyAqLwogICAgaWYgKCAoc3RhdGU+PjEyKSAmIDEgKQogICAgICAgIHJldHVybiAwOwoKICAgIHJldHVybiAxOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgICBjaGFyKiB0ZXN0MSA9ICJcbiB7IFwidGhpcyBpcyBcXFxcIFxcXCJ0ZXN0IGpzb25cIiAgOiAtMC4xMjM0NWUtNSwgXCJ0ZXN0IGtleTFcIjogW3RydWUsIGZhbHNlLCBudWxsLCB0dWxzZVwKICAgICAsIDAsMSwyLDgsOSwgMTMsIDIzNDUsICAzMDAwNC4wLCAzMDAwMDQuMjEzNDAwMywgXAogICAgXVxuIH0iOwogICAgdG9rZW5fdCBidWZbNTEyXTsKICAgIGludCBidWZfbGVuID0gMDsKICAgIGludCByZXQgPSAwOwoKICAgIG1lbXNldChidWYsIDB4MDAsIHNpemVvZihidWYpKTsKCiAgICByZXQgPSBzY2FuX3Rvayh0ZXN0MSwgYnVmLCAmYnVmX2xlbik7CgogICAgaWYocmV0ID09IDApCiAgICB7CiAgICAgICAgcHJpbnRmKCJ0b2tlbiBlcnJvciIpOwogICAgICAgIGV4aXQoMSk7CiAgICB9CgogICAgZm9yKGludCBpPTA7IGkgPCBidWZfbGVuOyBpKyspCiAgICB7CiAgICAgICAgcHJpbnRmKCIlLipzXG4iLCBidWZbaV0ubGVuLCBidWZbaV0ucyk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=