Mercurial > ~dholland > hg > ag > index.cgi
view tests/agcl/parsifal/good/ss-fp.cpp @ 11:3aa0f5a02342
Remove unused variable; fix what it was supposed to be doing.
(and document it a bit for the next time through here)
author | David A. Holland |
---|---|
date | Tue, 31 May 2022 00:54:12 -0400 |
parents | 13d2b8934445 |
children |
line wrap: on
line source
/* Copyright 1992, Jerome T. Holland See the file COPYING for license and usage terms. */ #include "ssd.h" #include "kb.h" #include "num.h" /* * AnaGram, A System for Syntax Directed Programming * File generated by: ... * * AnaGram Parsing Engine * Copyright 1993-2002 Parsifal Software. All Rights Reserved. * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef SS-FP_H #include "ss-fp.h" #endif #ifndef SS-FP_H #error Mismatched header file #endif #include <stdio.h> #define RULE_CONTEXT (&((PCB).cs[(PCB).ssx])) #define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx]) #define CONTEXT ((PCB).cs[(PCB).ssx]) /* Line -, ss-fp.syn */ fp_pcb_type *fp_pcb; #define PCB (*fp_pcb) #define CELL_NAME_REQUEST 255 #define INPUT_LINE_REQUEST 254 #define BLOCK_REQUEST 253 #define SYNTAX_ERROR #define PARSER_STACK_OVERFLOW static int cell_refs; static int error_flag; static number bound_variable[26]; static number xvalue; number num(double x) { number n; n.error = 0; n.truth = 1; n.v = x; return n; } void init_bv(void) { int i; for (i = 0; i < 26; i++) bound_variable[i].error = 1; } double round(double x) { long n = x+.5; return n; } double trunc(double x) { long n = x; return n; } double sqr(double x) { return x*x; } double pow10d(double x) { long n = x; return pow10d(n); } number cell_value(pair<int> loc) { number x; cell_pointer cp; int save_ef = error_flag; cell_refs++; cp = ss[loc.row][loc.col]; if (cp == NULL) { x.truth = 1; x.v = 0; return x; } if (cp->type == text) { x.error = 1; x.truth = 0; return x; } if (cp->type == formula) { if ((inserted_columns || inserted_rows)); else if (recalc_flag) { if (cp->recalc == recalc_count) eval(cp); if (cp->recalc & 1) circular_flag = 1; } } x.error = cp->error; x.truth = 1; x.v = cp->value; return x; } void eval(cell_pointer cp) { fp_pcb_type pcb, *save_pcb = fp_pcb; fp_pcb = &pcb; cell_refs = 0; PCB.pointer = (unsigned char *) &cp->text; cp->recalc += recalc_flag; error_flag = 0; fp(); cp->recalc += recalc_flag; if (PCB.exit_flag != 1) {cp->type = text; cp->error = 1; return;} else if (cell_refs == 0) cp->type = value; else cp->type = formula; { cp->error = xvalue.error; cp->value = xvalue.v; } fp_pcb = save_pcb; } number evalx(char *xs) { fp_pcb_type pcb, *save_pcb = fp_pcb; number x; fp_pcb = &pcb; PCB.pointer = (unsigned char *) xs; error_flag = 0; fp(); fp_pcb = save_pcb; return xvalue; } pair<int> id_cell(int row, int col) { pair<int> goto_cell = {0,0}; if (row >= MAXROWS || col >= MAXCOLS) { PCB.exit_flag = 5; return goto_cell; } if (inserted_rows && row >= new_row) row += inserted_rows; goto_cell.row = row; goto_cell.col = col; if (inserted_columns == 0 && inserted_rows == 0) return goto_cell; sprintf((char *)icnptr,"%d",row+1); icnptr += strlen((char *)icnptr); icoptr = PCB.pointer; return goto_cell; } int matherr(struct exception *e) { error_flag++; e->retval = 0; return 1; } number apply(double(*f)(double), number n) { number r; if (n.error) return n; error_flag = 0; r.v = f(n.v); r.error = error_flag != 0; return r; } number pow(number x, number n) { number r; r.error = x.error || n.error; if (r.error) return r; r.v = pow(x.v, n.v); return r; } void parse_block(void) { int flag; fp_pcb_type pcb; fp_pcb = &pcb; PCB.pointer = (unsigned char *) text_buffer; text_buffer[0] = BLOCK_REQUEST; fp(); flag = PCB.exit_flag != 1 || first_cell.row > last_cell.row || first_cell.col > last_cell.col || last_cell.row > MAXROWS || last_cell.col > MAXCOLS; if (flag) { kb_pcb.reduction_token = kb_bad_block_token; display_message(&bad_block_message); set_cursor(text_cursor); } else _setcursortype(_NOCURSOR); } void parse_cell_name(void) { int flag; fp_pcb_type pcb; fp_pcb = &pcb; PCB.pointer = (unsigned char *) text_buffer; text_buffer[0] = CELL_NAME_REQUEST; fp(); flag = PCB.exit_flag != 1 || goto_cell.row > MAXROWS || goto_cell.col > MAXCOLS; if (flag) { kb_pcb.reduction_token = kb_bad_cell_name_token; display_message(&bad_cell_message); set_cursor(text_cursor); } else _setcursortype(_NOCURSOR); } int rel_column_id(int a, int b) { int cn = 26*a + b; int nidc = a?2:1; int n; unsigned char case_bit = 0; char *cp; if (inserted_columns == 0 && inserted_rows == 0) return cn; if (cn >= new_column) cn += inserted_columns; n = (PCB.pointer - icoptr) - nidc; memmove((char *)icnptr, (char *)icoptr, n); icnptr += n; cp = (char *)PCB.pointer; while (nidc--) case_bit |= *--cp; case_bit &= 0x20; cp = column_label(cn,case_bit); strcpy((char *)icnptr,cp); icnptr += strlen(cp); return cn; } void relabel_formula(cell_pointer cp) { fp_pcb_type pcb, *save_pcb = fp_pcb; fp_pcb = &pcb; icoptr = PCB.pointer = (unsigned char *) &cp->text; icnptr = (unsigned char *) relabel_buf; fp(); assert(PCB.exit_flag == 1); strcpy((char *)icnptr, (char *)icoptr); cp = (cell_descriptor *) realloc(cp, sizeof(cell_descriptor) + strlen(relabel_buf)); assert(cp); strcpy(cp->text, relabel_buf); fp_pcb = save_pcb; } void scan_input_line(void) { fp_pcb_type pcb, *save_pcb = fp_pcb; fp_pcb = &pcb; PCB.pointer = (unsigned char *) text_buffer; text_buffer[0] = INPUT_LINE_REQUEST; fp(); fp_pcb = save_pcb; } void set_column_width(void) { int n; char *tb = text_buffer + 1; int flag; highlight_off(); for (n = 0; *tb;) n = 10*n + *tb++ - '0'; flag = n < 3 || n > 75; if (flag) { kb_pcb.reduction_token = kb_column_width_request_token; display_message(&bad_cw_message); beep(); set_cursor(text_cursor); return; } _setcursortype(_NOCURSOR); if (ac.scc.col + n > 81) move_data_left(); cols[ac.ssc.col].width = n; display_column_guide(); update_screen(); highlight_on(); } void stuff_cell(pair<int> loc) { char *tb = (char *) fp_pcb->pointer; cell_pointer cp = (cell_descriptor *) realloc( ss[loc.row][loc.col], sizeof(cell_descriptor) + strlen(tb)); assert(cp); if (loc.row > max_row) max_row = loc.row; if (loc.col > max_col) max_col = loc.col; strcpy(cp->text, tb); ss[loc.row][loc.col] = cp; cp->recalc = recalc_count; eval(cp); } void stuff_format(format_code f,pair<int> first,pair<int> last){ int i,j; for (i=first.row;i<=last.row;i++) for (j=first.col;j<=last.col;j++) { fmt[i][j] = f; } if (last.row > fmt_max_row) fmt_max_row = last.row; if (last.col > fmt_max_col) fmt_max_col = last.col; } number sum_cells(pair<int> first,pair<int> last){ pair<int> cp; number sum; sum.error = sum.truth = 1; sum.v = 0; for (cp.row = first.row; cp.row <= last.row; cp.row++) for (cp.col = first.col; cp.col <= last.col; cp.col++) { number cv = cell_value(cp); if (cv.error) return sum; sum.v += cv.v; } sum.error = 0; return sum; } number summation(char *xb, char *xf, int bv, number f, number s, number l) { number sum; int k; char *xs; number delta; int n; sum.error = f.error + s.error + l.error; sum.v = 0; if (sum.error) return sum; k = (int) (xf - xb); xs = (char *) malloc(k+1); memmove(xs,xb,k); xs[k] = 0; delta = s-f; if (delta.v == 0) { sum.error = 1; return sum; } n = ((l-f+delta)/delta).v + .5; while (n--) { bound_variable[bv] = f; sum = sum + evalx(xs); if (sum.error) break; f = f+delta; } bound_variable[bv].error = 1; free(xs); return sum; } #ifndef CONVERT_CASE static const char agCaseTable[31] = { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }; static int agConvertCase(int c) { if (c >= 'a' && c <= 'z') return c ^= 0x20; if (c >= 0xe0 && c < 0xff) c ^= agCaseTable[c-0xe0]; return c; } #define CONVERT_CASE(c) agConvertCase(c) #endif #ifndef TAB_SPACING #define TAB_SPACING 8 #endif static void ag_rp_1(pair<int> cp) { /* Line -, ss-fp.syn */ goto_cell = cp; } static void ag_rp_2(number x) { /* Line -, ss-fp.syn */ xvalue = x; } static void ag_rp_3(pair<int> f, pair<int> l) { /* Line -, ss-fp.syn */ first_cell=f, last_cell = l; } static void ag_rp_4(pair<int> loc) { /* Line -, ss-fp.syn */ stuff_cell(loc); } static void ag_rp_5(pair<int> f, pair<int> l, format_code fmt) { /* Line -, ss-fp.syn */ stuff_format(fmt,f,l); } static format_code ag_rp_6(int a, int c, int n) { /* Line -, ss-fp.syn */ format_code f; f.alignment = a; f.conversion =c; f.decimals = n; f.flag = 0; return f; } static int ag_rp_7(void) { /* Line -, ss-fp.syn */ return 0; } static int ag_rp_8(void) { /* Line -, ss-fp.syn */ return 1; } static int ag_rp_9(void) { /* Line -, ss-fp.syn */ return 2; } static int ag_rp_10(void) { /* Line -, ss-fp.syn */ return 0; } static int ag_rp_11(void) { /* Line -, ss-fp.syn */ return 1; } static int ag_rp_12(void) { /* Line -, ss-fp.syn */ return 2; } static pair<int> ag_rp_13(int col, int row) { /* Line -, ss-fp.syn */ return id_cell(row-1,col); } static int ag_rp_14(int a, int b) { /* Line -, ss-fp.syn */ return rel_column_id(a-'A'+1, b-'A'); } static int ag_rp_15(int a) { /* Line -, ss-fp.syn */ return rel_column_id(0, a-'A'); } static int ag_rp_16(int d) { /* Line -, ss-fp.syn */ return d-'0'; } static int ag_rp_17(int n, int d) { /* Line -, ss-fp.syn */ return 10*n + d-'0'; } static number ag_rp_18(number x, number c, number y) { /* Line -, ss-fp.syn */ number z; switch (c.tv){ case 0: z = y; break; case 1: z = x; break; case 2: z.error = 1; } return z; } static number ag_rp_19(number x, number y) { /* Line -, ss-fp.syn */ return x||y; } static number ag_rp_20(number x, number y) { /* Line -, ss-fp.syn */ return x&&y; } static number ag_rp_21(number x) { /* Line -, ss-fp.syn */ return x; } static number ag_rp_22(number x) { /* Line -, ss-fp.syn */ return !x; } static number ag_rp_23(number x, number y) { /* Line -, ss-fp.syn */ return x<y; } static number ag_rp_24(number x, number y) { /* Line -, ss-fp.syn */ return x>y; } static number ag_rp_25(number x, number y) { /* Line -, ss-fp.syn */ return x<=y; } static number ag_rp_26(number x, number y) { /* Line -, ss-fp.syn */ return x>=y; } static number ag_rp_27(number x, number y) { /* Line -, ss-fp.syn */ return x==y; } static number ag_rp_28(number x, number y) { /* Line -, ss-fp.syn */ return x!=y; } static number ag_rp_29(number x, number y) { /* Line -, ss-fp.syn */ return x+y; } static number ag_rp_30(number x, number y) { /* Line -, ss-fp.syn */ return x-y; } static number ag_rp_31(number x, number y) { /* Line -, ss-fp.syn */ return x+y; } static number ag_rp_32(number x, number y) { /* Line -, ss-fp.syn */ return x-y; } static number ag_rp_33(number x, number y) { /* Line -, ss-fp.syn */ return x*y; } static number ag_rp_34(function_name f, number y) { /* Line -, ss-fp.syn */ return apply(f,y); } static number ag_rp_35(number x, function_name f, number y) { /* Line -, ss-fp.syn */ return x*apply(f,y); } static number ag_rp_36(number x, number n) { /* Line -, ss-fp.syn */ return pow(x,n); } static number ag_rp_37(number x) { /* Line -, ss-fp.syn */ return -x; } static number ag_rp_38(number x, number y) { /* Line -, ss-fp.syn */ return x/y; } static number ag_rp_39(number x, number y) { /* Line -, ss-fp.syn */ return x*y; } static number ag_rp_40(number x, number y) { /* Line -, ss-fp.syn */ return x*y; } static number ag_rp_41(pair<int> cp) { /* Line -, ss-fp.syn */ return cell_value(cp); } static number ag_rp_42(void) { /* Line -, ss-fp.syn */ return num(M_PI); } static number ag_rp_43(pair<int> first, pair<int> last) { /* Line -, ss-fp.syn */ return sum_cells(first,last); } static number ag_rp_44(int k) { /* Line -, ss-fp.syn */ return bound_variable[k-'A']; } static number ag_rp_45(char * xb, char * xf, int k, number f, number s, number l) { /* Line -, ss-fp.syn */ return summation(xb,xf,k-'A', f, s, l); } static char * ag_rp_46(void) { /* Line -, ss-fp.syn */ return (char *)PCB.pointer; } static char * ag_rp_47(void) { /* Line -, ss-fp.syn */ return (char *)PCB.pointer; } static number ag_rp_48(number x) { /* Line -, ss-fp.syn */ return x; } static function_name ag_rp_49(void) { /* Line -, ss-fp.syn */ return fabs; } static function_name ag_rp_50(void) { /* Line -, ss-fp.syn */ return acos; } static function_name ag_rp_51(void) { /* Line -, ss-fp.syn */ return asin; } static function_name ag_rp_52(void) { /* Line -, ss-fp.syn */ return atan; } static function_name ag_rp_53(void) { /* Line -, ss-fp.syn */ return cosh; } static function_name ag_rp_54(void) { /* Line -, ss-fp.syn */ return cos; } static function_name ag_rp_55(void) { /* Line -, ss-fp.syn */ return exp; } static function_name ag_rp_56(void) { /* Line -, ss-fp.syn */ return log10; } static function_name ag_rp_57(void) { /* Line -, ss-fp.syn */ return log; } static function_name ag_rp_58(void) { /* Line -, ss-fp.syn */ return pow10d; } static function_name ag_rp_59(void) { /* Line -, ss-fp.syn */ return round; } static function_name ag_rp_60(void) { /* Line -, ss-fp.syn */ return sinh; } static function_name ag_rp_61(void) { /* Line -, ss-fp.syn */ return sin; } static function_name ag_rp_62(void) { /* Line -, ss-fp.syn */ return sqr; } static function_name ag_rp_63(void) { /* Line -, ss-fp.syn */ return sqrt; } static function_name ag_rp_64(void) { /* Line -, ss-fp.syn */ return tanh; } static function_name ag_rp_65(void) { /* Line -, ss-fp.syn */ return tan; } static function_name ag_rp_66(void) { /* Line -, ss-fp.syn */ return trunc; } static number ag_rp_67(double x) { /* Line -, ss-fp.syn */ return num(x); } static number ag_rp_68(double x, double y) { /* Line -, ss-fp.syn */ return num(x+y); } static number ag_rp_69(double x) { /* Line -, ss-fp.syn */ return num(x); } static double ag_rp_70(int d) { /* Line -, ss-fp.syn */ return d-'0'; } static double ag_rp_71(double n, int d) { /* Line -, ss-fp.syn */ return 10*n+d-'0'; } static double ag_rp_72(int d) { /* Line -, ss-fp.syn */ return (d-'0')/10.; } static double ag_rp_73(int d, double f) { /* Line -, ss-fp.syn */ return (d-'0'+f)/10.; } #ifndef AG_TRACE_FILE_NAME #define AG_TRACE_FILE_NAME "ss-fp.etr" #endif static void ag_trace_error(void) { FILE *ag_file = fopen(AG_TRACE_FILE_NAME, "w"); int i; if (ag_file == NULL) return; fprintf(ag_file, "%d\n", (PCB).ssx); for (i = 0; i < (PCB).ssx; i++) fprintf(ag_file, "%d\n", (PCB).ss[i]); fprintf(ag_file, "%d\n", (PCB).sn); fprintf(ag_file, "%d\n", (PCB).token_number); fclose(ag_file); } #define READ_COUNTS ss-fp_read_counts() #define WRITE_COUNTS ss-fp_write_counts() unsigned ss-fp_nrc[183]; void ss-fp_read_counts(void) { FILE *ag_file = fopen("ss-fp.nrc", "r"); int i; if (ag_file) { long ag_file_id; fscanf(ag_file, "%ld", &ag_file_id); if (ag_file_id == 0L) { for (i = 0; i < 183; i++) fscanf(ag_file,"%u", &(ss-fp_nrc[i])); fclose(ag_file); return; } } for (i = 0; i < 183; i++) ss-fp_nrc[i] = 0; } void ss-fp_write_counts(void) { FILE *ag_file = fopen("ss-fp.nrc", "w"); int i; if (ag_file == NULL) return; fprintf(ag_file, "%ld\n", 0L); for (i = 0; i < 183; i++) fprintf(ag_file,"%u\n", ss-fp_nrc[i]); fclose(ag_file); } #undef V #define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i])) #undef VS #define VS(i) (PCB).vs[(PCB).ssx + i] #ifndef GET_CONTEXT #define GET_CONTEXT CONTEXT = (PCB).input_context #endif typedef enum { ag_action_1, ag_action_2, ag_action_3, ag_action_4, ag_action_5, ag_action_6, ag_action_7, ag_action_8, ag_action_9, ag_action_10, ag_action_11, ag_action_12 } ag_parser_action; #ifndef NULL_VALUE_INITIALIZER #define NULL_VALUE_INITIALIZER = { 0 } #endif static ss-fp_vs_type const ag_null_value NULL_VALUE_INITIALIZER; static const unsigned char ag_rpx[] = { 0, 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0, 18, 0, 19, 0, 20, 0, 21, 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, 0, 29, 30, 0, 31, 32, 0, 33, 0, 34, 35, 0, 36, 37, 0, 38, 0, 39, 0, 0, 0, 40, 0, 41, 0, 42, 43, 44, 45, 46, 47, 0, 0, 0, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 67, 68, 69, 70, 71, 72, 73 }; static const unsigned char ag_key_itt[] = { 0 }; static const unsigned short ag_key_pt[] = { 0 }; static const unsigned char ag_key_ch[] = { 0, 66, 67, 83, 84,255, 72,255, 83,255, 79,255, 49,255, 71,255, 79,255, 72,255, 78,255, 84,255, 82,255, 73, 81,255, 72,255, 78,255, 65, 82,255, 65, 67, 69, 76, 80, 82, 83, 84,255, 66, 67, 83, 84,255, 72,255, 83,255, 79,255, 49,255, 71,255, 79,255, 72,255, 78,255, 84,255, 82,255, 73, 81, 255, 72,255, 78,255, 65, 82,255, 33, 46, 60, 61, 62, 65, 67, 69, 76, 80, 82, 83, 84,255, 33, 46, 60, 61, 62,255, 33, 60, 61, 62,255, 46,255 }; static const unsigned char ag_key_act[] = { 0,3,3,3,3,4,0,4,1,4,2,4,3,4,1,4,2,4,0,4,1,4,0,4,1,4,2,2,4,0,4,1,4,2,3, 4,2,2,3,2,3,3,2,2,4,3,3,3,3,4,0,4,1,4,2,4,3,4,1,4,2,4,0,4,1,4,0,4,1,4, 2,2,4,0,4,1,4,2,3,4,3,3,3,3,3,2,2,3,2,3,3,2,2,4,3,3,3,3,3,4,3,3,3,3,4, 3,4 }; static const unsigned char ag_key_parm[] = { 0,145,146,147,148, 0,149, 0,150, 0, 0, 0,152, 0,153, 0, 0, 0, 156, 0,157, 0,159, 0,158, 0, 0, 0, 0,160, 0,161, 0, 0,162, 0, 0, 0,151, 0,154,155, 0, 0, 0,145,146,147,148, 0,149, 0,150, 0, 0, 0,152, 0,153, 0, 0, 0,156, 0,157, 0,159, 0,158, 0, 0, 0, 0,160, 0,161, 0, 0,162, 0,137,143,134,136,135, 0, 0,151, 0,154, 155, 0, 0, 0,137,143,134,136,135, 0,137,134,136,135, 0,143, 0 }; static const unsigned char ag_key_jmp[] = { 0, 0, 2, 5, 8, 0, 0, 0, 6, 0, 8, 0, 14, 0, 12, 0, 14, 0, 0, 0, 18, 0, 0, 0, 22, 0, 20, 24, 0, 0, 0, 29, 0, 31, 26, 0, 1, 10, 11, 16, 16, 21, 26, 33, 0, 41, 43, 46, 49, 0, 0, 0, 50, 0, 52, 0, 55, 0, 56, 0, 58, 0, 0, 0, 62, 0, 0, 0, 66, 0, 64, 68, 0, 0, 0, 73, 0, 75, 67, 0, 30, 32, 35, 37, 39, 45, 54, 52, 60, 57, 62, 70, 77, 0, 71, 73, 76, 78, 80, 0, 82, 84, 86, 88, 0, 90, 0 }; static const unsigned char ag_key_index[] = { 36, 80, 36, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 36, 0, 80, 80, 36, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 80, 80, 80, 80, 0, 0, 94, 36, 80, 0, 36, 94, 0, 100, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 0, 0, 0, 0, 0, 94, 0, 36, 36, 36, 36, 36, 36, 36, 36, 0, 36, 36, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 94, 94, 0,100, 0, 36,100, 0, 0, 0, 0, 0, 36, 0, 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,100, 0, 36, 36, 36, 36, 36, 36, 0, 0, 36,100,100,100,100,100,100, 0, 0, 0, 0, 36, 36, 0, 36, 36, 0, 0,105, 0, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const unsigned char ag_key_ends[] = { 83,0, 79,83,0, 73,78,0, 65,78,0, 88,80,0, 48,0, 79,87,49,48,0, 79,85,78,68,0, 85,78,67,0, 61,0, 46,46,0, 61,0, 61,0, 61,0, 83,0, 79,83,0, 73,78,0, 65,78,0, 88,80,0, 48,0, 79,87,49,48,0, 79,85,78,68,0, 85,78,67,0, 61,0, 46,46,0, 61,0, 61,0, 61,0, 61,0, 61,0, 61,0, 61,0, 46,46,0, }; #define AG_TCV(x) ag_tcv[(x)] static const unsigned char ag_tcv[] = { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,131, 0, 0, 0, 0,128, 0,130,129,140,138,119,139,116,114,164,125,125,125,125,125, 125,125,125,125,117,126,132,113,133, 0,115,120,165,163,118,165,123,124, 165,165,165,165,121,165,165,165,165,165,122,165,165,165,165,165,165,165, 165, 0, 0, 0,141, 0, 0,120,165,163,118,165,123,124,165,165,165,165, 121,165,165,165,165,165,122,165,165,165,165,165,165,165,165, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,110, 0, 0, 0, 0,142,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,110,109 }; #ifndef SYNTAX_ERROR #define SYNTAX_ERROR fprintf(stderr,"%s\n", (PCB).error_message) #endif #ifndef PARSER_STACK_OVERFLOW #define PARSER_STACK_OVERFLOW {fprintf(stderr, \ "\nParser stack overflow\n");} #endif #ifndef REDUCTION_TOKEN_ERROR #define REDUCTION_TOKEN_ERROR {fprintf(stderr, \ "\nReduction token error\n");} #endif #ifndef INPUT_CODE #define INPUT_CODE(T) (T) #endif typedef enum {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key, ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words; static void ag_get_key_word(int ag_k) { int ag_save = (int) ((PCB).la_ptr - (PCB).pointer); const unsigned char *ag_p; int ag_ch; while (1) { switch (ag_key_act[ag_k]) { case ag_cf_end_key: { const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k]; do { if ((ag_ch = *sp++) == 0) { int ag_k1 = ag_key_parm[ag_k]; int ag_k2 = ag_key_pt[ag_k1]; if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail; (PCB).token_number = (ss-fp_token_type) ag_key_pt[ag_k1 + 1]; return; } } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch); goto ag_fail; } case ag_end_key: { const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k]; do { if ((ag_ch = *sp++) == 0) { (PCB).token_number = (ss-fp_token_type) ag_key_parm[ag_k]; return; } } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch); } case ag_no_match_key: ag_fail: (PCB).la_ptr = (PCB).pointer + ag_save; return; case ag_cf_set_key: { int ag_k1 = ag_key_parm[ag_k]; int ag_k2 = ag_key_pt[ag_k1]; ag_k = ag_key_jmp[ag_k]; if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break; ag_save = (int) ((PCB).la_ptr - (PCB).pointer); (PCB).token_number = (ss-fp_token_type) ag_key_pt[ag_k1+1]; break; } case ag_set_key: ag_save = (int) ((PCB).la_ptr - (PCB).pointer); (PCB).token_number = (ss-fp_token_type) ag_key_parm[ag_k]; case ag_jmp_key: ag_k = ag_key_jmp[ag_k]; break; case ag_accept_key: (PCB).token_number = (ss-fp_token_type) ag_key_parm[ag_k]; return; case ag_cf_accept_key: { int ag_k1 = ag_key_parm[ag_k]; int ag_k2 = ag_key_pt[ag_k1]; if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) (PCB).la_ptr = (PCB).pointer + ag_save; else (PCB).token_number = (ss-fp_token_type) ag_key_pt[ag_k1+1]; return; } } ag_ch = CONVERT_CASE(*(PCB).la_ptr++); ag_p = &ag_key_ch[ag_k]; if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++; if (ag_ch > 255 || *ag_p != ag_ch) { (PCB).la_ptr = (PCB).pointer + ag_save; return; } ag_k = (int) (ag_p - ag_key_ch); } } static const unsigned char ag_tstt[] = { 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,112,110,109,1,0, 107,108, 1,0, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,112,110,109,0,2, 3,4,6,8,13,19,21,27,29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65, 66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92, 93,94,95,96,97,98,99,100,104,105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128, 127,126,125,124,123,122,121,120,119,118,117,116,114,113,111,5,1,0,107, 108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128, 127,126,125,124,123,122,121,120,119,118,117,116,114,113,111,5,1,0,107, 108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128, 127,126,125,124,123,122,121,120,119,118,117,116,114,111,5,1,0,107,108, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124, 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124, 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124, 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124, 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124, 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124, 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124, 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124, 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,163,124,123,122,121,120,118,0,21,27,29,31,32,33,35,104,106, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124, 123,122,121,120,119,118,117,114,111,5,0, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127, 126,124,123,122,121,120,119,118,117,114,111,5,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27, 29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73, 74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99, 100,104,105,106, 125,0,28,36, 164,125,0,36,102,105, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128, 127,126,125,124,123,122,121,120,119,118,117,116,114,111,5,0,19,36,100, 101,105, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127, 126,124,123,122,121,120,119,118,117,114,111,5,0, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127, 126,124,123,122,121,120,119,118,117,114,111,5,0, 162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,143, 141,140,139,138,137,136,135,134,133,132,129,128,127,126,119,117,114,111, 5,0, 165,163,144,142,130,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,47, 70,72,74,75,76,77,80,104,106, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99, 100,104,105,106, 141,0,68, 114,0,17, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,0, 64,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99, 100,104,105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74, 75,76,77,78,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99, 100,104,105,106, 140,0,62, 165,163,124,123,122,121,120,118,1,0,107,108, 139,138,117,0,22,58,59, 165,163,124,123,122,121,120,118,115,1,0,107,108, 165,163,124,123,122,121,120,118,1,0,107,108, 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106, 111,5,0,9,10,11,12, 165,163,124,123,122,121,120,118,115,0,4,7,16,21,27,29,31,32,33,34,35,104, 106, 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106, 129,0,48, 164,125,0,36,105, 164,125,0,36,102,105, 164,125,0,36,102,105, 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99, 100,104,105,106, 165,164,163,144,142,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,144,142,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,31, 32,33,34,35,36,47,65,69,70,71,72,73,74,75,76,77,80,99,100,104,105,106, 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99, 100,104,105,106, 139,138,0,58,59, 117,0,22, 116,0,19, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,47,59,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,80, 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105, 106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76, 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104, 105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76, 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104, 105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21, 27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65, 66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92, 93,94,95,96,97,98,99,100,104,105,106, 116,0,14,19, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27, 29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73, 74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99, 100,104,105,106, 111,0,9,10, 5,0, 165,163,124,123,122,121,120,118,1,0,107,108, 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106, 113,0,15, 5,0, 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146, 145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127, 126,124,123,122,121,120,119,118,117,114,111,5,1,0,107,108, 116,0,19, 165,163,124,123,122,121,120,118,0,21,27,29,31,32,33,77,104,106, 165,163,124,123,122,121,120,118,116,0,19,20, 140,0,62, 140,0,62, 130,1,0,107,108, 137,136,135,134,133,132,0,51,52,53,54,55,56, 130,0,47, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,8,19,21, 27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65, 66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92, 93,94,95,96,97,98,99,100,104,105,106, 137,136,135,134,133,132,129,128,127,126,0, 128,0,45, 127,126,0,41,43, 165,163,124,123,122,121,120,118,116,0,19,20, 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106, 116,0,14,19, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 113,0,15, 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76, 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104, 105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76, 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104, 105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76, 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104, 105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76, 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104, 105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76, 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104, 105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76, 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104, 105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21, 27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65, 66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92, 93,94,95,96,97,98,99,100,104,105,106, 137,136,135,134,133,132,129,0, 129,127,0,43,48, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21, 27,29,31,32,33,34,35,36,38,39,44,46,47,49,50,57,59,60,61,63,64,65,66,67, 69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94, 95,96,97,98,99,100,104,105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21, 27,29,31,32,33,34,35,36,38,39,42,44,46,47,49,50,57,59,60,61,63,64,65,66, 67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93, 94,95,96,97,98,99,100,104,105,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27, 29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73, 74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99, 100,104,105,106, 5,0, 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74, 75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99, 100,104,105,106, 139,138,0,58,59, 139,138,0,58,59, 139,138,0,58,59, 139,138,0,58,59, 139,138,0,58,59, 139,138,0,58,59, 129,127,0,43,48, 128,0,45, 114,0,17, 119,0,24, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105, 106, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105, 106, 120,0,18,21, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74, 75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99, 100,104,105,106, 117,0,22, 5,0, 143,0,79, 163,122,121,0,23,29,31,104, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108, 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147, 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29, 31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74, 75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99, 100,104,105,106, 119,0,24, 163,0,104, 117,0,22, 163,124,123,0,26,32,33,104, 119,0,24, 118,0,27, 117,0,22, 125,0,28,36, 164,125,0,36,105, }; static unsigned const char ag_astt[5069] = { 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3, 7,1,1,9,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,7,0,1,2,1,1,1,3,1,1,1,1,1,1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1, 3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,4,3,3,3,3, 3,3,2,3,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,3,1,1,1,1,1, 1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,1,1,1,2,1,1,7,1,2,1,1,7,1,2,1,5,1,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,5,5,1,5,5,5, 7,3,2,1,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,7,1,1,1,1,1,1,1,1,1,1,1,5,2,1,1,1,1,1,1,1,1,1,2,2,3,2,1,2,2,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1, 3,3,2,1,2,2,1,1,1,2,1,1,7,1,1,5,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1, 1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1,3,3,2,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,3,1,1,1,1,1,1,1,1,2, 2,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,1,1,1,2,1,1,5,1,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,5,1,1,1,5,5,5,5,5,5, 5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,7,1,3,3,3,3,3,3,1,1, 3,3,1,5,7,1,3,1,1,1,1,1,1,1,1,1,1,1,7,1,3,1,3,3,3,3,3,3,1,1,3,3,1,1,1,1,1, 1,1,1,7,1,3,3,3,3,3,3,1,1,3,3,1,7,2,1,1,4,2,2,1,1,4,1,2,1,1,1,5,1,2,1,1,1, 1,1,1,1,1,1,7,1,3,3,3,3,3,3,1,1,3,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1, 3,3,2,1,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,2,1,3,3,3,3,3,2,1,2,2,1,1,1,2,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1,3,3, 2,1,2,2,1,1,1,2,1,1,1,5,1,1,1,7,1,1,4,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1, 1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1, 1,1,2,1,2,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,2,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,3,1,1,1, 3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,1,1,1,2,1,1,7,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,7,2,3,3,1,1,1,1,1,1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1, 1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,5,1,3,2,7, 5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,7,1,3,3,3,3,3,3,1,1,3,3,1,7,2,2,7, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,7,1,1,1,1,1,1,1,1,1,7,3,3,3,3,3,3,1,3,3, 5,5,5,5,5,5,5,5,1,7,3,1,1,4,1,1,4,1,5,3,7,1,3,1,1,1,1,1,1,7,1,1,1,1,1,1,1, 7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7, 2,1,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,7, 1,5,1,1,1,7,1,1,5,5,5,5,5,5,5,5,1,7,3,3,1,1,1,1,1,1,1,1,7,1,3,3,3,3,3,3,1, 1,3,3,1,7,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,3,7,1,3,1,7,1,1,1,1,1,1,1,1,1,7,2,3,3,3,3,3,3,1,1,3,3,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1, 2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,3,1,1, 1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1, 1,1,1,1,1,2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1, 1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1, 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 7,2,3,1,1,1,1,1,1,1,1,2,3,1,1,1,3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,7,1,1,7, 1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3, 7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 7,2,3,1,1,1,1,1,1,1,1,2,3,1,2,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,3,1,1, 3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,7,2,2,3,1,1,1,1,1,1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3, 2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,2,7,1,1,1,1,1,1,1,1, 7,1,3,3,3,3,3,3,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3, 3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,4,1,1,1,1,4,1, 1,1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,7,1,2,1,4,1,1,7,1,1,7,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1, 1,1,1,1,1,2,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,7,1,1,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1, 1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,1,1,1,2,1,1,7,1,2,7,1,7,1,1,1,1,7,1,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,2,1,1,3,1,1, 3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1, 2,1,1,7,1,1,7,1,1,7,1,1,1,1,7,1,2,2,2,1,7,1,1,7,1,1,7,1,1,7,1,2,1,1,4,2,2 }; static const unsigned char ag_pstt[] = { 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122, 0,1,2, 123,125, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,53,55,56,2,0,60,68,59,58,57,109,16,16,16,16,16,16,19,15, 103,27,54,18,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,3,1, 142, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,4,1, 181, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,5,1,133, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,122,6,1,139, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,122,7,1,138, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,122,8,1,141, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,122,9,1,140, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,122,10,1,135, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,122,11,1,180, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,122,12,1,182, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,122,13,1,137, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,14,1, 147, 12,11,8,9,6,7,13,10,24,107,107,107,107,107,107,23,107,107, 107,107,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108, 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,107,107, 107,107,107,107,108,107,108,108,108,108,16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,122,17,1,159, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,18,68,61,109,16,16,16,16,16,16,19,15,103,27,54,18,45,45, 52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86, 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16, 3,19,62,25, 4,3,20,63,102,63, 98,4,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98, 98,98,98,98,98,98,98,98,98,98,98,98,98,98,3,98,98,98,98,98,98,98,98,5, 98,98,98,21,109,104,64,100,104, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,22,1,179, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,23,1,178, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,24,1,177, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,25,1,176, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,26,1,175, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,27,1,174, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,28,1,173, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,29,1,172, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,30,1,171, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,31,1,170, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,32,1,169, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,33,1,168, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,34,1,167, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,35,1,166, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,36,1,165, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,37,1,164, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,38,1,163, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,39,1,162, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,40,1,156, 65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,77,65, 65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65, 41, 64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,76,64, 64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64, 42, 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,78,63,63,63,63,63, 63,63,63,63,63,63,63,63,63,63,63,63,63,43, 12,11,48,17,14,8,9,6,7,13,10,61,68,16,16,16,16,16,16,19,15,18,62,66,69,70, 65,72,74,16,16, 12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,45,68,109,16,16,16,16,16,16,19,15,103, 18,45,58,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16, 66,46,67, 68,56,69, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,48,1,161, 22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,59,70,80,81,82,83,84, 85,86,87,88,89,90,91,92,93,94,95,96,97, 12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,50,68,109,16,16,16,16,16,16,19,15,103, 18,45,54,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,51,73,109,16,16,16,16,16,16,19,15,103,75,71,18,45,45,52, 51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,72,74,80,81,82,83,84,85,86, 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16, 74,48,75, 124,124,124,124,124,124,124,124,122,53,1,129, 40,77,79,44,80,78,76, 124,124,124,124,124,124,124,124,124,122,55,1,127, 124,124,124,124,124,124,124,124,122,56,1,126, 12,11,8,9,6,7,13,10,57,81,107,107,107,107,107,107,19,15,107,107, 82,6,58,83,4,84,85, 12,11,8,9,6,7,13,10,86,59,88,2,87,107,107,107,107,107,107,19,15,107,107, 12,11,8,9,6,7,13,10,60,89,107,107,107,107,107,107,19,15,107,107, 90,61,79, 4,3,22,26,26, 4,3,105,63,106,63, 4,3,99,63,101,63, 12,11,8,9,6,7,13,10,65,91,107,107,107,107,107,107,19,15,107,107, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,66,1,158, 12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,67,68,109,16,16,16,16,16,16,19,15,103, 18,45,57,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,68,1,131, 12,4,11,48,17,14,3,8,9,6,7,13,10,5,69,68,109,16,16,16,16,16,16,19,15,103,18, 60,44,63,64,65,67,69,70,65,72,74,21,20,16,103,16, 12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,70,68,109,16,16,16,16,16,16,19,15,103, 18,45,55,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16, 40,77,44,78,76, 79,72,92, 5,68,93, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,74,1,157, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,75,68,109,16,16,16,16,16,16,19,15,103,18,45,52,53,50,49, 47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89,90,91, 92,93,94,95,96,97,21,20,16,103,16, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,76,68,109,16,16,16,16,16,16,19,15,103,18,47,45,94,51,53, 50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,87,88,89, 90,91,92,93,94,95,96,97,21,20,16,103,16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,77,1,155, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,78,68,109,16,16,16,16,16,16,19,15,103,18,46,45,95,51,53, 50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,87,88,89, 90,91,92,93,94,95,96,97,21,20,16,103,16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,79,1, 134, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96, 14,3,8,9,6,7,13,10,5,80,68,109,16,16,16,16,16,16,19,15,103,42,71,102, 101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51, 72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16, 103,16, 5,81,104,103, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,82,1,128, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,83,68,3,109,16,16,16,16,16,16,19,15,103,27,54,18,45,45, 52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86, 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16, 82,7,83,5, 8,85, 124,124,124,124,124,124,124,124,122,86,1,132, 12,11,8,9,6,7,13,10,87,105,107,107,107,107,107,107,19,15,107,107, 106,88,10, 1,89, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,122,90,1,146, 5,91,93, 12,11,8,9,6,7,13,10,92,108,108,108,108,108,108,107,108,108, 12,12,12,12,12,12,12,12,5,93,13,108, 74,50,75, 74,49,75, 124,122,96,1,148, 109,111,113,115,117,119,97,120,118,116,114,112,110, 14,98,121, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96, 14,3,8,9,6,7,13,10,5,99,68,61,109,16,16,16,16,16,16,19,15,103,122,54, 123,101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70, 51,72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16, 103,16, 43,43,43,43,43,43,33,33,33,33,100, 124,29,125, 126,128,102,129,127, 12,12,12,12,12,12,12,12,5,103,13,14, 12,11,8,9,6,7,13,10,104,130,107,107,107,107,107,107,19,15,107,107, 5,105,131,103, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,106,1,130, 106,107,132, 12,11,8,9,6,7,13,10,108,71,107,107,107,107,107,107,19,15,107,107, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,109,1,154, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,110,68,109,16,16,16,16,16,16,19,15,103,133,18,45,52,51, 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88, 89,90,91,92,93,94,95,96,97,21,20,16,103,16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,111,1,153, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,112,68,109,16,16,16,16,16,16,19,15,103,134,18,45,52,51, 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88, 89,90,91,92,93,94,95,96,97,21,20,16,103,16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,113,1,152, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,114,68,109,16,16,16,16,16,16,19,15,103,135,18,45,52,51, 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88, 89,90,91,92,93,94,95,96,97,21,20,16,103,16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,115,1,151, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,116,68,109,16,16,16,16,16,16,19,15,103,136,18,45,52,51, 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88, 89,90,91,92,93,94,95,96,97,21,20,16,103,16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,117,1,150, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,118,68,109,16,16,16,16,16,16,19,15,103,137,18,45,52,51, 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88, 89,90,91,92,93,94,95,96,97,21,20,16,103,16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,119,1,149, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,120,68,109,16,16,16,16,16,16,19,15,103,138,18,45,52,51, 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88, 89,90,91,92,93,94,95,96,97,21,20,16,103,16, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96, 14,3,8,9,6,7,13,10,5,121,68,109,16,16,16,16,16,16,19,15,103,42,71,139, 101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51, 72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16, 103,16, 42,42,42,42,42,42,27,122, 90,126,123,127,34, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,124,1, 145, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96, 14,3,8,9,6,7,13,10,5,125,68,109,16,16,16,16,16,16,19,15,103,42,71,32, 100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,126,1, 144, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96, 14,3,8,9,6,7,13,10,5,127,68,109,16,16,16,16,16,16,19,15,103,42,71,140, 31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72, 74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103, 16, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,128,1,143, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,129,68,28,109,16,16,16,16,16,16,19,15,103,27,54,18,45, 45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85, 86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16, 9,130, 12,11,8,9,6,7,13,10,131,141,107,107,107,107,107,107,19,15,107,107, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,132,68,109,16,16,16,16,16,16,19,15,103,142,71,18,45,45, 52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86, 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16, 40,77,41,144,143, 40,77,40,144,143, 40,77,39,144,143, 40,77,38,144,143, 40,77,37,144,143, 40,77,36,144,143, 90,126,139,127,35, 124,30,125, 68,141,145, 146,142,147, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,143,68,109,16,16,16,16,16,16,19,15,103,18,45,94,51,53, 50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89, 90,91,92,93,94,95,96,97,21,20,16,103,16, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,144,68,109,16,16,16,16,16,16,19,15,103,18,45,95,51,53, 50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89, 90,91,92,93,94,95,96,97,21,20,16,103,16, 13,145,149,148, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,146,1,136, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,147,68,109,16,16,16,16,16,16,19,15,103,150,71,18,45,45, 52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86, 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16, 79,148,151, 11,149, 152,150,153, 11,6,7,151,154,16,18,17, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,152,1,160, 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3, 8,9,6,7,13,10,5,153,68,109,16,16,16,16,16,16,19,15,103,73,71,18,45,45, 52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86, 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16, 146,154,155, 11,155,156, 79,156,157, 11,8,9,157,158,20,21,19, 146,158,159, 10,159,160, 79,160,161, 3,161,162,25, 4,3,15,26,26, }; static const unsigned short ag_sbt[] = { 0, 40, 42, 140, 197, 254, 310, 362, 414, 466, 518, 570, 622, 674, 726, 764, 782, 830, 883, 974, 978, 984,1042,1061,1080,1099,1118,1137, 1156,1175,1194,1213,1232,1251,1270,1289,1308,1327,1346,1365,1384,1421, 1471,1521,1560,1591,1639,1642,1645,1682,1720,1768,1859,1862,1874,1881, 1894,1906,1926,1933,1956,1976,1979,1984,1990,1996,2016,2035,2083,2101, 2144,2192,2197,2200,2203,2240,2326,2414,2451,2539,2577,2674,2678,2715, 2806,2810,2812,2824,2844,2847,2849,2902,2905,2923,2935,2938,2941,2946, 2959,2962,3060,3071,3074,3079,3091,3111,3115,3152,3155,3175,3212,3300, 3337,3425,3462,3550,3587,3675,3712,3800,3837,3925,4022,4030,4035,4073, 4168,4206,4302,4339,4430,4432,4452,4542,4547,4552,4557,4562,4567,4572, 4577,4580,4583,4586,4673,4760,4764,4801,4891,4894,4896,4899,4907,4944, 5034,5037,5040,5043,5051,5054,5057,5060,5064,5069 }; static const unsigned short ag_sbe[] = { 37, 41, 78, 194, 251, 307, 359, 411, 463, 515, 567, 619, 671, 723, 761, 772, 829, 880, 916, 975, 980,1036,1058,1077,1096,1115,1134,1153, 1172,1191,1210,1229,1248,1267,1286,1305,1324,1343,1362,1381,1418,1470, 1520,1559,1571,1606,1640,1643,1679,1700,1735,1801,1860,1871,1877,1891, 1903,1914,1928,1942,1964,1977,1981,1986,1992,2004,2032,2050,2098,2115, 2159,2194,2198,2201,2237,2273,2359,2448,2484,2574,2611,2675,2712,2748, 2807,2811,2821,2832,2845,2848,2899,2903,2913,2932,2936,2939,2943,2952, 2960,2996,3070,3072,3076,3088,3099,3112,3149,3153,3163,3209,3245,3334, 3370,3459,3495,3584,3620,3709,3745,3834,3870,3959,4029,4032,4070,4107, 4203,4240,4336,4372,4431,4440,4485,4544,4549,4554,4559,4564,4569,4574, 4578,4581,4584,4619,4706,4761,4798,4834,4892,4895,4897,4902,4941,4977, 5035,5038,5041,5046,5052,5055,5058,5061,5066,5069 }; static const unsigned char ag_fl[] = { 2,3,2,2,1,2,0,1,3,5,2,7,0,1,2,11,1,1,1,1,1,1,2,2,1,1,2,1,5,1,3,1,3,1,3, 4,3,3,3,3,3,3,1,1,1,1,3,3,1,3,3,1,3,1,2,3,1,3,2,1,3,1,2,1,1,1,2,1,1,1, 1,5,1,10,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,3,2,1,2, 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2 }; static const unsigned char ag_ptt[] = { 0, 2, 2, 10, 11, 11, 12, 12, 2, 2, 7, 7, 20, 20, 14, 18, 23, 23, 23, 26, 26, 26, 4, 34, 34, 28, 28, 8, 8, 40, 40, 42, 42, 44, 44, 44, 46, 46, 46, 46, 46, 46, 50, 50, 38, 38, 38, 38, 39, 39, 39, 60, 60, 61, 61, 61, 63, 63, 63, 66, 66, 65, 65, 65, 69, 69, 69, 71, 72, 72, 72, 72, 70, 57, 76, 78, 67, 67, 67, 74, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,101,101, 73, 73, 73, 99, 99,102,102, 35, 77,100, 25, 30, 37, 37,103,103,103,103,103,103,103,103,107,107,108,108, 3, 6, 9, 13, 15, 17, 16, 19, 22, 27, 24, 21, 29, 31, 32, 33, 36, 41, 43, 45, 48, 47, 49, 51, 52, 53, 54, 55, 56, 58, 59, 62, 68, 75, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 104,105,106 }; static void ag_ra(void) { switch(ag_rpx[(PCB).ag_ap]) { case 1: ag_rp_1(V(1,(pair<int> *))); break; case 2: ag_rp_2(V(0,(number *))); break; case 3: ag_rp_3(V(1,(pair<int> *)), V(3,(pair<int> *))); break; case 4: ag_rp_4(V(0,(pair<int> *))); break; case 5: ag_rp_5(V(1,(pair<int> *)), V(3,(pair<int> *)), V(5,(format_code *))); break; case 6: V(0,(format_code *)) = ag_rp_6(V(2,(int *)), V(6,(int *)), V(10,(int *))); break; case 7: V(0,(int *)) = ag_rp_7(); break; case 8: V(0,(int *)) = ag_rp_8(); break; case 9: V(0,(int *)) = ag_rp_9(); break; case 10: V(0,(int *)) = ag_rp_10(); break; case 11: V(0,(int *)) = ag_rp_11(); break; case 12: V(0,(int *)) = ag_rp_12(); break; case 13: V(0,(pair<int> *)) = ag_rp_13(V(0,(int *)), V(1,(int *))); break; case 14: V(0,(int *)) = ag_rp_14(V(0,(int *)), V(1,(int *))); break; case 15: V(0,(int *)) = ag_rp_15(V(0,(int *))); break; case 16: V(0,(int *)) = ag_rp_16(V(0,(int *))); break; case 17: V(0,(int *)) = ag_rp_17(V(0,(int *)), V(1,(int *))); break; case 18: V(0,(number *)) = ag_rp_18(V(0,(number *)), V(2,(number *)), V(4,(number *))); break; case 19: V(0,(number *)) = ag_rp_19(V(0,(number *)), V(2,(number *))); break; case 20: V(0,(number *)) = ag_rp_20(V(0,(number *)), V(2,(number *))); break; case 21: V(0,(number *)) = ag_rp_21(V(1,(number *))); break; case 22: V(0,(number *)) = ag_rp_22(V(2,(number *))); break; case 23: V(0,(number *)) = ag_rp_23(V(0,(number *)), V(2,(number *))); break; case 24: V(0,(number *)) = ag_rp_24(V(0,(number *)), V(2,(number *))); break; case 25: V(0,(number *)) = ag_rp_25(V(0,(number *)), V(2,(number *))); break; case 26: V(0,(number *)) = ag_rp_26(V(0,(number *)), V(2,(number *))); break; case 27: V(0,(number *)) = ag_rp_27(V(0,(number *)), V(2,(number *))); break; case 28: V(0,(number *)) = ag_rp_28(V(0,(number *)), V(2,(number *))); break; case 29: V(0,(number *)) = ag_rp_29(V(0,(number *)), V(2,(number *))); break; case 30: V(0,(number *)) = ag_rp_30(V(0,(number *)), V(2,(number *))); break; case 31: V(0,(number *)) = ag_rp_31(V(0,(number *)), V(2,(number *))); break; case 32: V(0,(number *)) = ag_rp_32(V(0,(number *)), V(2,(number *))); break; case 33: V(0,(number *)) = ag_rp_33(V(0,(number *)), V(2,(number *))); break; case 34: V(0,(number *)) = ag_rp_34(V(0,(function_name *)), V(1,(number *))); break; case 35: V(0,(number *)) = ag_rp_35(V(0,(number *)), V(1,(function_name *)), V(2,(number *))); break; case 36: V(0,(number *)) = ag_rp_36(V(0,(number *)), V(2,(number *))); break; case 37: V(0,(number *)) = ag_rp_37(V(1,(number *))); break; case 38: V(0,(number *)) = ag_rp_38(V(0,(number *)), V(2,(number *))); break; case 39: V(0,(number *)) = ag_rp_39(V(0,(number *)), V(1,(number *))); break; case 40: V(0,(number *)) = ag_rp_40(V(0,(number *)), V(1,(number *))); break; case 41: V(0,(number *)) = ag_rp_41(V(0,(pair<int> *))); break; case 42: V(0,(number *)) = ag_rp_42(); break; case 43: V(0,(number *)) = ag_rp_43(V(1,(pair<int> *)), V(4,(pair<int> *))); break; case 44: V(0,(number *)) = ag_rp_44(V(0,(int *))); break; case 45: V(0,(number *)) = ag_rp_45(V(0,(char * *)), V(1,(char * *)), V(3,(int *)), V(5,(number *)), V(7,(number *)), V(9,(number *))); break; case 46: V(0,(char * *)) = ag_rp_46(); break; case 47: V(0,(char * *)) = ag_rp_47(); break; case 48: V(0,(number *)) = ag_rp_48(V(1,(number *))); break; case 49: V(0,(function_name *)) = ag_rp_49(); break; case 50: V(0,(function_name *)) = ag_rp_50(); break; case 51: V(0,(function_name *)) = ag_rp_51(); break; case 52: V(0,(function_name *)) = ag_rp_52(); break; case 53: V(0,(function_name *)) = ag_rp_53(); break; case 54: V(0,(function_name *)) = ag_rp_54(); break; case 55: V(0,(function_name *)) = ag_rp_55(); break; case 56: V(0,(function_name *)) = ag_rp_56(); break; case 57: V(0,(function_name *)) = ag_rp_57(); break; case 58: V(0,(function_name *)) = ag_rp_58(); break; case 59: V(0,(function_name *)) = ag_rp_59(); break; case 60: V(0,(function_name *)) = ag_rp_60(); break; case 61: V(0,(function_name *)) = ag_rp_61(); break; case 62: V(0,(function_name *)) = ag_rp_62(); break; case 63: V(0,(function_name *)) = ag_rp_63(); break; case 64: V(0,(function_name *)) = ag_rp_64(); break; case 65: V(0,(function_name *)) = ag_rp_65(); break; case 66: V(0,(function_name *)) = ag_rp_66(); break; case 67: V(0,(number *)) = ag_rp_67(V(0,(double *))); break; case 68: V(0,(number *)) = ag_rp_68(V(0,(double *)), V(2,(double *))); break; case 69: V(0,(number *)) = ag_rp_69(V(1,(double *))); break; case 70: V(0,(double *)) = ag_rp_70(V(0,(int *))); break; case 71: V(0,(double *)) = ag_rp_71(V(0,(double *)), V(1,(int *))); break; case 72: V(0,(double *)) = ag_rp_72(V(0,(int *))); break; case 73: V(0,(double *)) = ag_rp_73(V(0,(int *)), V(1,(double *))); break; } (PCB).la_ptr = (PCB).pointer; } static int ag_action_1_r_proc(void); static int ag_action_2_r_proc(void); static int ag_action_3_r_proc(void); static int ag_action_4_r_proc(void); static int ag_action_1_s_proc(void); static int ag_action_3_s_proc(void); static int ag_action_1_proc(void); static int ag_action_2_proc(void); static int ag_action_3_proc(void); static int ag_action_4_proc(void); static int ag_action_5_proc(void); static int ag_action_6_proc(void); static int ag_action_7_proc(void); static int ag_action_8_proc(void); static int ag_action_9_proc(void); static int ag_action_10_proc(void); static int ag_action_11_proc(void); static int ag_action_8_proc(void); static int (*const ag_r_procs_scan[])(void) = { 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[])(void) = { 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[])(void) = { 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(void) { int ag_t = (PCB).token_number; ss-fp_nrc[(PCB).ag_ap]++; do { ss-fp_nrc[(PCB).ag_ap]++; (PCB).pointer = (PCB).la_ptr; (PCB).token_number = (ss-fp_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)); if (ag_ch <= 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } } while ((PCB).token_number == (ss-fp_token_type) ag_t); (PCB).la_ptr = (PCB).pointer; return 1; } static int ag_action_11_proc(void) { int ag_t = (PCB).token_number; ss-fp_nrc[(PCB).ag_ap]++; do { (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; (PCB).ssx--; (PCB).pointer = (PCB).la_ptr; ag_ra(); if ((PCB).exit_flag != AG_RUNNING_CODE) return 0; (PCB).ssx++; (PCB).token_number = (ss-fp_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)); if (ag_ch <= 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } } while ((PCB).token_number == (ss-fp_token_type) ag_t); (PCB).la_ptr = (PCB).pointer; return 1; } static int ag_action_3_r_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; ss-fp_nrc[(PCB).ag_ap]++; (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_3_s_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; ss-fp_nrc[(PCB).ag_ap]++; (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_4_r_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; ss-fp_nrc[(PCB).ag_ap]++; (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap]; return 1; } static int ag_action_2_proc(void) { if ((PCB).ssx >= 128) { ag_trace_error(); (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; (PCB).pointer = (PCB).la_ptr; return 0; } static int ag_action_9_proc(void) { if ((PCB).ssx >= 128) { ag_trace_error(); (PCB).exit_flag = AG_STACK_ERROR_CODE; PARSER_STACK_OVERFLOW; } (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(void) { (PCB).ssx++; (PCB).sn = (PCB).ag_ap; return 0; } static int ag_action_7_proc(void) { --(PCB).ssx; (PCB).la_ptr = (PCB).pointer; ss-fp_nrc[0]++; (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_1_proc(void) { (PCB).pointer = (PCB).la_ptr; ss-fp_nrc[0]++; (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_1_r_proc(void) { ss-fp_nrc[0]++; (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_1_s_proc(void) { ss-fp_nrc[0]++; (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_4_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; ss-fp_nrc[(PCB).ag_ap]++; (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap]; (*(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; (PCB).pointer = (PCB).la_ptr; 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] < (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]])() == 0) break; } return 0; } static int ag_action_3_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 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; (PCB).pointer = (PCB).la_ptr; ss-fp_nrc[(PCB).ag_ap]++; (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); 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] < (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]])() == 0) break; } return 0; } static int ag_action_8_proc(void) { ag_trace_error(); (PCB).la_ptr = (PCB).pointer; (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; SYNTAX_ERROR; (PCB).la_ptr = ++(PCB).pointer; return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_5_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap]; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else { (PCB).ss[(PCB).ssx] = (PCB).sn; } (PCB).la_ptr = (PCB).pointer; ss-fp_nrc[(PCB).ag_ap]++; (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); 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] < (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]])() == 0) break; } return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_6_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap]; ss-fp_nrc[(PCB).ag_ap]++; (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap]; if (ag_sd) { (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; } else { if ((PCB).ssx >= 128) { ag_trace_error(); (PCB).exit_flag = AG_STACK_ERROR_CODE; PARSER_STACK_OVERFLOW; } (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] < (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]])() == 0) break; } return (PCB).exit_flag == AG_RUNNING_CODE; } void init_ss-fp(void) { (PCB).la_ptr = (PCB).pointer; (PCB).error_message = "Syntax Error"; (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0; (PCB).exit_flag = AG_RUNNING_CODE; } void ss-fp(void) { init_ss-fp(); (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 = (ss-fp_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)); if (ag_ch <= 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] > (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] != (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]])(); } }