📄 rvmegacoauthparse.c
字号:
28,5,
17,2,2,1,6,7,8,2,2,2,7,
9,7,
10,8,11,5,
2,2,1,17,9,29,2,2,2,29,
12,10,
13,11,
8,9,8,12,14,
10,13,15,6,
8,9,8,14,16,
17,15,
8,9,8,16,18,
19,17,20,
8,9,8,18,21,
22,19,
11,23,23,1,11,11,20,24,23,23,23,
8,9,8,21,25,
10,10,10,22,
15,15,1,16,15,15,
1,1,1,1,1,24,
8,9,8,25,26,
8,9,8,26,27,
8,9,8,27,7,
};
static const unsigned char ag_sbt[] = {
0, 12, 28, 34, 39, 52, 54, 65, 67, 71, 81, 83, 85, 90,
94, 99, 101, 106, 109, 114, 116, 127, 132, 136, 142, 148, 153, 158,
163
};
static const unsigned char ag_sbe[] = {
5, 24, 31, 36, 50, 53, 58, 66, 68, 75, 82, 84, 88, 91,
97, 100, 104, 107, 112, 115, 122, 130, 135, 139, 147, 151, 156, 161, 163
};
static const unsigned char ag_fl[] = {
1,10,1,1,1,1,1,10,1,1,3,2,1,1,1,2,1,0,1,1,1,1,1,1,1,2,0,1,3,3
};
static const unsigned char ag_ptt[] = {
0, 1, 13, 13, 3, 5, 7, 14, 17, 17, 8, 8, 23, 23, 24, 24, 9, 25,
25, 2, 30, 30, 30, 30, 31, 31, 32, 32, 22, 4
};
static void ag_ra(PCB_DECL)
{
switch(ag_rpx[(PCB).ag_ap]) {
case 1: ag_rp_1(PCB_POINTER, V(3,unsigned int), V(5,unsigned int)); break;
case 2: V(0,unsigned int) = ag_rp_2(PCB_POINTER, V(0,unsigned int)); break;
case 3: V(0,unsigned int) = ag_rp_3(PCB_POINTER, V(0,unsigned int)); break;
case 4: V(0,unsigned int) = ag_rp_4(PCB_POINTER, V(2,unsigned int), V(3,unsigned int), V(4,unsigned int), V(5,unsigned int), V(6,unsigned int), V(7,unsigned int), V(8,unsigned int), V(9,unsigned int)); break;
case 5: V(0,unsigned int) = ag_rp_5(PCB_POINTER, V(0,int)); break;
case 6: V(0,unsigned int) = ag_rp_6(PCB_POINTER, V(0,int)); break;
case 7: ag_rp_7(PCB_POINTER, V(2,int)); break;
case 8: ag_rp_8(PCB_POINTER, V(1,int)); break;
}
(PCB).la_ptr = (PCB).pointer;
}
#define TOKEN_NAMES megacoauth_token_names
const char *const megacoauth_token_names[38] = {
"authenticationHeader",
"authenticationHeader",
"LWSP",
"AuthToken",
"EQUAL",
"SecurityParmIndex",
"COLON",
"SequenceNum",
"AuthData",
"SEP",
"SafeChar",
"\"AUTHENTICATION\"",
"\"AU\"",
"",
"fixedHexInt",
"'0'",
"'x'",
"hexDigit",
"DIGIT",
"HEXLET",
"HEXDIG",
"MYWSP",
"COMMENT",
"",
"",
"",
"';'",
"RestChar",
"WSP",
"DQUOTE",
"",
"",
"",
"EOL",
"'='",
"",
"",
"",
};
#ifndef MISSING_FORMAT
#define MISSING_FORMAT "Missing %s"
#endif
#ifndef UNEXPECTED_FORMAT
#define UNEXPECTED_FORMAT "Unexpected %s"
#endif
#ifndef UNNAMED_TOKEN
#define UNNAMED_TOKEN "input"
#endif
static void ag_diagnose(PCB_DECL) {
int ag_snd = (PCB).sn;
int ag_k = ag_sbt[ag_snd];
if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) {
sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
}
else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8
&& (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1
&& *TOKEN_NAMES[ag_tstt[ag_k]]) {
sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
}
else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) {
sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]);
}
else if (isprint(INPUT_CODE((*(PCB).pointer))) && INPUT_CODE((*(PCB).pointer)) != '\\') {
char buf[20];
sprintf(buf, "\'%c\'", (char) INPUT_CODE((*(PCB).pointer)));
sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf);
}
else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN);
(PCB).error_message = (PCB).ag_msg;
}
static int ag_action_1_r_proc(PCB_DECL);
static int ag_action_2_r_proc(PCB_DECL);
static int ag_action_3_r_proc(PCB_DECL);
static int ag_action_4_r_proc(PCB_DECL);
static int ag_action_1_s_proc(PCB_DECL);
static int ag_action_3_s_proc(PCB_DECL);
static int ag_action_1_proc(PCB_DECL);
static int ag_action_2_proc(PCB_DECL);
static int ag_action_3_proc(PCB_DECL);
static int ag_action_4_proc(PCB_DECL);
static int ag_action_5_proc(PCB_DECL);
static int ag_action_6_proc(PCB_DECL);
static int ag_action_7_proc(PCB_DECL);
static int ag_action_8_proc(PCB_DECL);
static int ag_action_9_proc(PCB_DECL);
static int ag_action_10_proc(PCB_DECL);
static int ag_action_11_proc(PCB_DECL);
static int ag_action_8_proc(PCB_DECL);
static int (*const ag_r_procs_scan[])(PCB_DECL) = {
ag_action_1_r_proc,
ag_action_2_r_proc,
ag_action_3_r_proc,
ag_action_4_r_proc
};
static int (*const ag_s_procs_scan[])(PCB_DECL) = {
ag_action_1_s_proc,
ag_action_2_r_proc,
ag_action_3_s_proc,
ag_action_4_r_proc
};
static int (*const ag_gt_procs_scan[])(PCB_DECL) = {
ag_action_1_proc,
ag_action_2_proc,
ag_action_3_proc,
ag_action_4_proc,
ag_action_5_proc,
ag_action_6_proc,
ag_action_7_proc,
ag_action_8_proc,
ag_action_9_proc,
ag_action_10_proc,
ag_action_11_proc,
ag_action_8_proc
};
static int ag_action_10_proc(PCB_DECL) {
int ag_t = (PCB).token_number;
(PCB).btsx = 0, (PCB).drt = -1;
do {
ag_track(PCB_POINTER);
(PCB).token_number = (megacoauth_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
(PCB).la_ptr++;
if (ag_key_index[(PCB).sn]) {
unsigned ag_k = ag_key_index[(PCB).sn];
int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
while (ag_key_ch[ag_k] < ag_ch) ag_k++;
if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word((PCB_TYPE *)PCB_POINTER, ag_k);
}
} while ((PCB).token_number == (megacoauth_token_type) ag_t);
(PCB).la_ptr = (PCB).pointer;
return 1;
}
static int ag_action_11_proc(PCB_DECL) {
int ag_t = (PCB).token_number;
(PCB).btsx = 0, (PCB).drt = -1;
do {
(*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
(PCB).ssx--;
ag_track(PCB_POINTER);
ag_ra(PCB_POINTER);
if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
(PCB).ssx++;
(PCB).token_number = (megacoauth_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
(PCB).la_ptr++;
if (ag_key_index[(PCB).sn]) {
unsigned ag_k = ag_key_index[(PCB).sn];
int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
while (ag_key_ch[ag_k] < ag_ch) ag_k++;
if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word((PCB_TYPE *)PCB_POINTER, ag_k);
}
}
while ((PCB).token_number == (megacoauth_token_type) ag_t);
(PCB).la_ptr = (PCB).pointer;
return 1;
}
static int ag_action_3_r_proc(PCB_DECL) {
int ag_sd = ag_fl[(PCB).ag_ap] - 1;
if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
(PCB).btsx = 0, (PCB).drt = -1;
(PCB).reduction_token = (megacoauth_token_type) ag_ptt[(PCB).ag_ap];
ag_ra(PCB_POINTER);
return (PCB).exit_flag == AG_RUNNING_CODE;
}
static int ag_action_3_s_proc(PCB_DECL) {
int ag_sd = ag_fl[(PCB).ag_ap] - 1;
if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
(PCB).btsx = 0, (PCB).drt = -1;
(PCB).reduction_token = (megacoauth_token_type) ag_ptt[(PCB).ag_ap];
ag_ra(PCB_POINTER);
return (PCB).exit_flag == AG_RUNNING_CODE;;
}
static int ag_action_4_r_proc(PCB_DECL) {
int ag_sd = ag_fl[(PCB).ag_ap] - 1;
if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
(PCB).reduction_token = (megacoauth_token_type) ag_ptt[(PCB).ag_ap];
return 1;
}
static int ag_action_2_proc(PCB_DECL) {
(PCB).btsx = 0, (PCB).drt = -1;
if ((PCB).ssx >= 128) {
(PCB).exit_flag = AG_STACK_ERROR_CODE;
PARSER_STACK_OVERFLOW;
}
(*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
(PCB).ss[(PCB).ssx] = (PCB).sn;
(PCB).ssx++;
(PCB).sn = (PCB).ag_ap;
ag_track(PCB_POINTER);
return 0;
}
static int ag_action_9_proc(PCB_DECL) {
if ((PCB).drt == -1) {
(PCB).drt=(PCB).token_number;
(PCB).dssx=(PCB).ssx;
(PCB).dsn=(PCB).sn;
}
ag_prot(PCB_POINTER);
(PCB).vs[(PCB).ssx] = ag_null_value;
(PCB).ss[(PCB).ssx] = (PCB).sn;
(PCB).ssx++;
(PCB).sn = (PCB).ag_ap;
(PCB).la_ptr = (PCB).pointer;
return (PCB).exit_flag == AG_RUNNING_CODE;
}
static int ag_action_2_r_proc(PCB_DECL) {
(PCB).ssx++;
(PCB).sn = (PCB).ag_ap;
return 0;
}
static int ag_action_7_proc(PCB_DECL) {
--(PCB).ssx;
(PCB).la_ptr = (PCB).pointer;
(PCB).exit_flag = AG_SUCCESS_CODE;
return 0;
}
static int ag_action_1_proc(PCB_DECL) {
ag_track(PCB_POINTER);
(PCB).exit_flag = AG_SUCCESS_CODE;
return 0;
}
static int ag_action_1_r_proc(PCB_DECL) {
(PCB).exit_flag = AG_SUCCESS_CODE;
return 0;
}
static int ag_action_1_s_proc(PCB_DECL) {
(PCB).exit_flag = AG_SUCCESS_CODE;
return 0;
}
static int ag_action_4_proc(PCB_DECL) {
int ag_sd = ag_fl[(PCB).ag_ap] - 1;
(PCB).reduction_token = (megacoauth_token_type) ag_ptt[(PCB).ag_ap];
(PCB).btsx = 0, (PCB).drt = -1;
(*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
else (PCB).ss[(PCB).ssx] = (PCB).sn;
ag_track(PCB_POINTER);
while ((PCB).exit_flag == AG_RUNNING_CODE) {
unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
do {
unsigned ag_tx = (ag_t1 + ag_t2)/2;
if (ag_tstt[ag_tx] < (const unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
else ag_t2 = ag_tx;
} while (ag_t1 < ag_t2);
(PCB).ag_ap = ag_pstt[ag_t1];
if ((ag_s_procs_scan[ag_astt[ag_t1]])(PCB_POINTER) == 0) break;
}
return 0;
}
static int ag_action_3_proc(PCB_DECL) {
int ag_sd = ag_fl[(PCB).ag_ap] - 1;
(PCB).btsx = 0, (PCB).drt = -1;
(*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
else (PCB).ss[(PCB).ssx] = (PCB).sn;
ag_track(PCB_POINTER);
(PCB).reduction_token = (megacoauth_token_type) ag_ptt[(PCB).ag_ap];
ag_ra(PCB_POINTER);
while ((PCB).exit_flag == AG_RUNNING_CODE) {
unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
do {
unsigned ag_tx = (ag_t1 + ag_t2)/2;
if (ag_tstt[ag_tx] < (const unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
else ag_t2 = ag_tx;
} while (ag_t1 < ag_t2);
(PCB).ag_ap = ag_pstt[ag_t1];
if ((ag_s_procs_scan[ag_astt[ag_t1]])(PCB_POINTER) == 0) break;
}
return 0;
}
static int ag_action_8_proc(PCB_DECL) {
ag_undo(PCB_POINTER);
(PCB).la_ptr = (PCB).pointer;
(PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
ag_diagnose(PCB_POINTER);
SYNTAX_ERROR;
{(PCB).la_ptr = (PCB).pointer + 1; ag_track(PCB_POINTER);}
return (PCB).exit_flag == AG_RUNNING_CODE;
}
static int ag_action_5_proc(PCB_DECL) {
int ag_sd = ag_fl[(PCB).ag_ap];
(PCB).btsx = 0, (PCB).drt = -1;
if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
else {
(PCB).ss[(PCB).ssx] = (PCB).sn;
}
(PCB).la_ptr = (PCB).pointer;
(PCB).reduction_token = (megacoauth_token_type) ag_ptt[(PCB).ag_ap];
ag_ra(PCB_POINTER);
while ((PCB).exit_flag == AG_RUNNING_CODE) {
unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
do {
unsigned ag_tx = (ag_t1 + ag_t2)/2;
if (ag_tstt[ag_tx] < (const unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
else ag_t2 = ag_tx;
} while (ag_t1 < ag_t2);
(PCB).ag_ap = ag_pstt[ag_t1];
if ((ag_r_procs_scan[ag_astt[ag_t1]])(PCB_POINTER) == 0) break;
}
return (PCB).exit_flag == AG_RUNNING_CODE;
}
static int ag_action_6_proc(PCB_DECL) {
int ag_sd = ag_fl[(PCB).ag_ap];
(PCB).reduction_token = (megacoauth_token_type) ag_ptt[(PCB).ag_ap];
if ((PCB).drt == -1) {
(PCB).drt=(PCB).token_number;
(PCB).dssx=(PCB).ssx;
(PCB).dsn=(PCB).sn;
}
if (ag_sd) {
(PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
}
else {
ag_prot(PCB_POINTER);
(PCB).vs[(PCB).ssx] = ag_null_value;
(PCB).ss[(PCB).ssx] = (PCB).sn;
}
(PCB).la_ptr = (PCB).pointer;
while ((PCB).exit_flag == AG_RUNNING_CODE) {
unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
do {
unsigned ag_tx = (ag_t1 + ag_t2)/2;
if (ag_tstt[ag_tx] < (const unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
else ag_t2 = ag_tx;
} while (ag_t1 < ag_t2);
(PCB).ag_ap = ag_pstt[ag_t1];
if ((ag_r_procs_scan[ag_astt[ag_t1]])(PCB_POINTER) == 0) break;
}
return (PCB).exit_flag == AG_RUNNING_CODE;
}
void init_megacoauth(megacoauth_pcb_type *PCB_POINTER) {
(PCB).la_ptr = (PCB).pointer;
(PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
(PCB).exit_flag = AG_RUNNING_CODE;
(PCB).line = FIRST_LINE;
(PCB).column = FIRST_COLUMN;
(PCB).btsx = 0, (PCB).drt = -1;
}
void megacoauth(megacoauth_pcb_type *PCB_POINTER) {
init_megacoauth(PCB_POINTER);
(PCB).exit_flag = AG_RUNNING_CODE;
while ((PCB).exit_flag == AG_RUNNING_CODE) {
unsigned ag_t1 = ag_sbt[(PCB).sn];
if (ag_tstt[ag_t1]) {
unsigned ag_t2 = ag_sbe[(PCB).sn] - 1;
(PCB).token_number = (megacoauth_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
(PCB).la_ptr++;
if (ag_key_index[(PCB).sn]) {
unsigned ag_k = ag_key_index[(PCB).sn];
int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
while (ag_key_ch[ag_k] < ag_ch) ag_k++;
if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word((PCB_TYPE *)PCB_POINTER, ag_k);
}
do {
unsigned ag_tx = (ag_t1 + ag_t2)/2;
if (ag_tstt[ag_tx] > (const unsigned char)(PCB).token_number)
ag_t1 = ag_tx + 1;
else ag_t2 = ag_tx;
} while (ag_t1 < ag_t2);
if (ag_tstt[ag_t1] != (const unsigned char)(PCB).token_number)
ag_t1 = ag_sbe[(PCB).sn];
}
(PCB).ag_ap = ag_pstt[ag_t1];
(ag_gt_procs_scan[ag_astt[ag_t1]])((PCB_TYPE *)PCB_POINTER);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -