Mercurial > ~dholland > hg > ag > index.cgi
diff tests/agcl/parsifal/good/ss-fp.cpp @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/agcl/parsifal/good/ss-fp.cpp Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,2316 @@ +/* +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]])(); + } +} + +