Mercurial > ~dholland > hg > ag > index.cgi
diff tests/agcl/parsifal/good/ss-kb.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-kb.cpp Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,1717 @@ + +/* + * 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-KB_H +#include "ss-kb.h" +#endif + +#ifndef SS-KB_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]) + + + +ss-kb_pcb_type ss-kb_pcb; +#define PCB ss-kb_pcb +#define CHANGE_REDUCTION(x) ss-kb_change_reduction(ss-kb_##x##_token) +int ss-kb_change_reduction(ss-kb_token_type); + +#define REDUCTION_CHOICES(x) ss-kb_reduction_choices(x) +int ss-kb_reduction_choices(int *ag_tp); + +/* Line -, ss-kb.syn */ +#include "ssd.h" + +char text_buffer[100]; +int text_index; +pair<int> text_cursor = {INPUT_LINE, 1}; + +#define GET_INPUT {int c;\ + PCB.input_code = ((c=getch()) != 0 ? c : getch()+256);} + +#define SYNTAX_ERROR + +#define STATUS(x,y) PCB.reduction_token = (x)?kb_##y##_token:kb_not_##y##_token + +void beep(void) { + sound(440); + delay(75); + nosound(); +} + +void accept_text(message *m, char *t) { + display_message(m); + init_text_edit(t); +} + +void backspace_char(void) { + if (text_cursor.col == 1) return; + text_cursor_left(); + delete_char(); +} + +int check_digits(void){ + char *tb = text_buffer + 1; + int n; + for (n = 0; *tb;) n = 10*n + *tb++ - '0'; + if (n > 7) CHANGE_REDUCTION(bad_digits_spec); + return n; +} + +void delete_cell(void) { + cell_pointer cp = ss[ac.ssc.row][ac.ssc.col]; + if (cp) free(cp); + ss[ac.ssc.row][ac.ssc.col] = NULL; + update_cell(ac.scc, ac.ssc); + set_active_cell(); +} + +void delete_char(void) { + strcpy(&text_buffer[text_cursor.col], &text_buffer[text_cursor.col+1]); + display_field( + text_cursor, + SCREEN_WIDTH - text_cursor.col, + LEFT, + TEXT_COLOR, + "%s", + &text_buffer[text_cursor.col] + ); + set_cursor(text_cursor); +} + +void delete_column(void) { + int i,j; + new_column = ac.ssc.col; + for (i = 0; i < MAXROWS; i++) if (ss[i][new_column]) free(ss[i][new_column]); + for (i = new_column; i < max_col; i++) + for (j = 0; j <= max_row; j++) + ss[j][i] = ss[j][i+1]; + for (j = 0; j <= max_row; j++) ss[j][max_col] = NULL; + max_col--; + inserted_columns = -1; + relabel(0,new_column); + new_column = inserted_columns = 0; +} + +void delete_row(void) { + int i,j; + new_row = ac.ssc.row; + for (i = 0; i < MAXCOLS; i++) if (ss[new_row][i]) free(ss[new_row][i]); + for (i = new_row; i < max_row; i++) + for (j = 0; j <= max_col; j++) + ss[i][j] = ss[i+1][j]; + for (j = 0; j <= max_col; j++) ss[max_row][j] = NULL; + max_row--; + inserted_rows = -1; + relabel(new_row,0); + new_row = inserted_rows = 0; +} + +void init_cell_edit(void) { + cell_pointer cp = ss[ac.ssc.row][ac.ssc.col]; + if (cp) strcpy(text_buffer+1, cp->text); + else text_buffer[1] = 0; + text_cursor.col = strlen(text_buffer+1) + 1; + textattr(TEXT_COLOR); + _setcursortype(_NORMALCURSOR); + input_msg.msg = text_buffer+1; + display_message(&input_msg); + set_cursor(text_cursor); +} + +void init_text_edit(char *c) { + if (c) strcpy(text_buffer+1, c); + text_cursor.col = strlen(text_buffer+1) + 1; + textattr(TEXT_COLOR); + _setcursortype(_NORMALCURSOR); + input_msg.msg = text_buffer+1; + display_message(&input_msg); + set_cursor(text_cursor); +} + +void init_text_input(int c) { + textattr(TEXT_COLOR); + _setcursortype(_NORMALCURSOR); + text_buffer[text_cursor.col = 1] = c; + set_cursor(text_cursor); + putch(c); + text_buffer[++text_cursor.col] = 0; +} + +void insert_char(int c){ + int n = strlen(&text_buffer[text_cursor.col]); + memmove(&text_buffer[text_cursor.col+1], &text_buffer[text_cursor.col], n+1); + text_buffer[81] = 0; + text_buffer[text_cursor.col++] = c; + putch(c); + display_field(text_cursor, n, LEFT, TEXT_COLOR, &text_buffer[text_cursor.col]); + set_cursor(text_cursor); +} + +void insert_column(void) { + int i,j; + if (max_col + 1 >= MAXCOLS) { + for (i = 0; i < MAXROWS; i++) if (ss[i][max_col]) free(ss[i][max_col]); + } + max_col++; + new_column = ac.ssc.col; + for (i = max_col; i > new_column; i--) + for (j = 0; j <= max_row; j++) + ss[j][i] = ss[j][i-1]; + for (j = 0; j < MAXROWS; j++) ss[j][new_column] = NULL; + inserted_columns = 1; + relabel(0,new_column); + new_column = inserted_columns = 0; +} + +void insert_row(void) { + int i,j; + if (max_row + 1 >= MAXROWS) { + for (i = 0; i < MAXCOLS; i++) if (ss[max_row][i]) free(ss[max_row][i]); + } + max_row++; + new_row = ac.ssc.row; + for (i = max_row; i > new_row; i--) + for (j = 0; j <= max_col; j++) + ss[i][j] = ss[i-1][j]; + for (j = 0; j < MAXCOLS; j++) ss[new_row][j] = NULL; + inserted_rows = 1; + relabel(new_row,0); + new_row = inserted_rows = 0; +} + +void recalc(void) { + int i,j; + recalc_flag = 1; + circular_flag = 0; + for (i = 0; i <= max_row; i++) for (j = 0; j <= max_col; j++) { + cell_pointer cp = ss[i][j]; + + if (cp == NULL || cp->type != formula) continue; + if (cp->recalc == recalc_count) eval(cp); + } + recalc_count += 2; + recalc_flag = 0; + update_screen(); + set_active_cell(); +} + +void relabel(int row, int col) { + int i,j; + + n_changes++; + for (i = row; i <= max_row; i++) for (j = col; j <= max_col; j++) { + cell_pointer cp = ss[i][j]; + + if (cp == NULL || cp->type != formula) continue; + relabel_formula(cp); + } + update_screen(); + set_active_cell(); +} + +void set_cell_text(void) { + char *tb = text_buffer + 1; + cell_pointer cp = realloc( + ss[ac.ssc.row][ac.ssc.col], + sizeof(cell_descriptor) + strlen(tb) + ); + n_changes++; + assert(cp); + if (ac.ssc.row > max_row) max_row = ac.ssc.row; + if (ac.ssc.col > max_col) max_col = ac.ssc.col; + strcpy(cp->text, tb); + cp->error = 0; + ss[ac.ssc.row][ac.ssc.col] = cp; + cp->recalc = recalc_count; + _setcursortype(_NOCURSOR); + eval(cp); + if (cp->type != text && autocalc_flag) recalc(); + else { + update_cell(ac.scc, ac.ssc); + set_active_cell(); + } +} + +void text_cursor_end(void) { + while (text_buffer[text_cursor.col]) { + text_cursor.col++; + } + set_cursor(text_cursor); +} + +void text_cursor_home(void) { + if (text_cursor.col == 1) return; + text_cursor.col = 1; + set_cursor(text_cursor); +} + +void text_cursor_left(void) { + if (text_cursor.col == 1) return; + text_cursor.col--; + set_cursor(text_cursor); +} + +void text_cursor_right(void) { + if (text_buffer[text_cursor.col] == 0) return; + if (text_cursor.col >= SCREEN_WIDTH) return; + text_cursor.col++; + set_cursor(text_cursor); +} + +void toggle_formula_display(void) { + formula_flag = !formula_flag; + display_message(&form_msg); + update_screen(); + set_active_cell(); +} + + +#ifndef CONVERT_CASE +#define CONVERT_CASE(c) (c) +#endif +#ifndef TAB_SPACING +#define TAB_SPACING 8 +#endif + +static void ag_rp_1(void) { +/* Line -, ss-kb.syn */ + display_message(&file_error_msg); +} + +static void ag_rp_2(void) { +/* Line -, ss-kb.syn */ + accept_text(&goto_msg,""); +} + +static void ag_rp_3(void) { +/* Line -, ss-kb.syn */ + accept_text(&load_from_msg, file_name); +} + +static void ag_rp_4(void) { +/* Line -, ss-kb.syn */ + accept_text(&nonexistent_msg, file_name); +} + +static void ag_rp_5(void) { +/* Line -, ss-kb.syn */ + display_message(&file_exists_msg); +} + +static void ag_rp_6(void) { +/* Line -, ss-kb.syn */ + display_message(&changes_msg); +} + +static void ag_rp_7(void) { +/* Line -, ss-kb.syn */ + accept_text(&save_to_msg, file_name); +} + +static void ag_rp_8(void) { +/* Line -, ss-kb.syn */ + accept_text(&print_to_msg, file_name); +} + +static void ag_rp_9(void) { +/* Line -, ss-kb.syn */ + accept_text(&block_msg,""); +} + +static void ag_rp_10(void) { +/* Line -, ss-kb.syn */ + accept_text(&decimals_msg, ""); +} + +static void ag_rp_11(void) { +/* Line -, ss-kb.syn */ + accept_text(&bad_decimals_msg,NULL); +} + +static void ag_rp_12(void) { +/* Line -, ss-kb.syn */ + update_status(); +} + +static void ag_rp_13(void) { +/* Line -, ss-kb.syn */ + recalc(); +} + +static void ag_rp_14(void) { +/* Line -, ss-kb.syn */ + toggle_formula_display(); +} + +static void ag_rp_15(void) { +/* Line -, ss-kb.syn */ + autocalc_flag = !autocalc_flag; +} + +static void ag_rp_16(void) { +/* Line -, ss-kb.syn */ + set_cell_text(); +} + +static void ag_rp_17(void) { +/* Line -, ss-kb.syn */ + delete_cell(); +} + +static void ag_rp_18(void) { +/* Line -, ss-kb.syn */ + page_up(); +} + +static void ag_rp_19(void) { +/* Line -, ss-kb.syn */ + page_down(); +} + +static void ag_rp_20(void) { +/* Line -, ss-kb.syn */ + scroll_left(); +} + +static void ag_rp_21(void) { +/* Line -, ss-kb.syn */ + scroll_right(); +} + +static void ag_rp_22(void) { +/* Line -, ss-kb.syn */ + home(); +} + +static void ag_rp_23(void) { +/* Line -, ss-kb.syn */ + end(); +} + +static void ag_rp_24(void) { +/* Line -, ss-kb.syn */ + cursor_up(); +} + +static void ag_rp_25(void) { +/* Line -, ss-kb.syn */ + cursor_down(); +} + +static void ag_rp_26(void) { +/* Line -, ss-kb.syn */ + cursor_left(); +} + +static void ag_rp_27(void) { +/* Line -, ss-kb.syn */ + cursor_right(); +} + +static void ag_rp_28(void) { +/* Line -, ss-kb.syn */ + quit(); +} + +static void ag_rp_29(void) { +/* Line -, ss-kb.syn */ + insert_column(); +} + +static void ag_rp_30(void) { +/* Line -, ss-kb.syn */ + delete_column(); +} + +static void ag_rp_31(void) { +/* Line -, ss-kb.syn */ + insert_row(); +} + +static void ag_rp_32(void) { +/* Line -, ss-kb.syn */ + delete_row(); +} + +static void ag_rp_33(void) { +/* Line -, ss-kb.syn */ + print(); +} + +static void ag_rp_34(void) { +/* Line -, ss-kb.syn */ + set_conversion(currency); +} + +static void ag_rp_35(void) { +/* Line -, ss-kb.syn */ + set_conversion(general); +} + +static void ag_rp_36(int n) { +/* Line -, ss-kb.syn */ + set_decimals(n); +} + +static void ag_rp_37(int h) { +/* Line -, ss-kb.syn */ + set_alignment(h); +} + +static int ag_rp_38(void) { +/* Line -, ss-kb.syn */ + return LEFT; +} + +static int ag_rp_39(void) { +/* Line -, ss-kb.syn */ + return CENTER; +} + +static int ag_rp_40(void) { +/* Line -, ss-kb.syn */ + return RIGHT; +} + +static int ag_rp_41(void) { +/* Line -, ss-kb.syn */ + return check_digits(); +} + +static int ag_rp_42(void) { +/* Line -, ss-kb.syn */ + return check_digits(); +} + +static void ag_rp_43(void) { +/* Line -, ss-kb.syn */ + go(); +} + +static void ag_rp_44(void) { +/* Line -, ss-kb.syn */ + accept_text(&col_width_msg,""); +} + +static void ag_rp_45(void) { +/* Line -, ss-kb.syn */ + set_column_width(); +} + +static void ag_rp_46(void) { +/* Line -, ss-kb.syn */ + parse_cell_name(); +} + +static void ag_rp_47(void) { +/* Line -, ss-kb.syn */ + parse_cell_name(); +} + +static void ag_rp_48(void) { +/* Line -, ss-kb.syn */ + ; +} + +static void ag_rp_49(void) { +/* Line -, ss-kb.syn */ + ; +} + +static void ag_rp_50(void) { +/* Line -, ss-kb.syn */ + parse_block(); +} + +static void ag_rp_51(void) { +/* Line -, ss-kb.syn */ + parse_block(); +} + +static void ag_rp_52(void) { +/* Line -, ss-kb.syn */ + ; +} + +static void ag_rp_53(void) { +/* Line -, ss-kb.syn */ + ; +} + +static void ag_rp_54(void) { +/* Line -, ss-kb.syn */ + STATUS(n_changes, changed); +} + +static void ag_rp_55(void) { +/* Line -, ss-kb.syn */ + ; +} + +static void ag_rp_56(void) { +/* Line -, ss-kb.syn */ + load_file(); +} + +static void ag_rp_57(void) { +/* Line -, ss-kb.syn */ + check_file_name(); +} + +static void ag_rp_58(void) { +/* Line -, ss-kb.syn */ + write_file(); +} + +static void ag_rp_59(void) { +/* Line -, ss-kb.syn */ + write_file(); +} + +static void ag_rp_60(void) { +/* Line -, ss-kb.syn */ + clear(); +} + +static void ag_rp_61(void) { +/* Line -, ss-kb.syn */ + display_message(&clear_spreadsheet); +} + +static void ag_rp_62(void) { +/* Line -, ss-kb.syn */ + display_menu(&main_menu); +} + +static void ag_rp_63(void) { +/* Line -, ss-kb.syn */ + display_menu(&spreadsheet_menu); +} + +static void ag_rp_64(void) { +/* Line -, ss-kb.syn */ + display_menu(&column_menu); +} + +static void ag_rp_65(void) { +/* Line -, ss-kb.syn */ + display_menu(&row_menu); +} + +static void ag_rp_66(void) { +/* Line -, ss-kb.syn */ + display_menu(&utility_menu); +} + +static void ag_rp_67(void) { +/* Line -, ss-kb.syn */ + display_menu(&format_menu); +} + +static void ag_rp_68(void) { +/* Line -, ss-kb.syn */ + display_menu(&label_menu); +} + +static void ag_rp_69(void) { +/* Line -, ss-kb.syn */ + pm_msg(); +} + +static void ag_rp_70(void) { +/* Line -, ss-kb.syn */ + print_wide = !print_wide, pm_msg(); +} + +static void ag_rp_71(void) { +/* Line -, ss-kb.syn */ + (print_border = !print_border),pm_msg(); +} + +static void ag_rp_72(void) { +/* Line -, ss-kb.syn */ + print_block=TRUE,print_from=first_cell,print_to=last_cell,pm_msg(); +} + +static void ag_rp_73(void) { +/* Line -, ss-kb.syn */ + init_cell_edit(); +} + +static void ag_rp_74(void) { +/* Line -, ss-kb.syn */ + init_cell_edit(); +} + +static void ag_rp_75(int c) { +/* Line -, ss-kb.syn */ + init_text_input(c); +} + +static void ag_rp_76(void) { +/* Line -, ss-kb.syn */ + init_text_input('ä'); +} + +static void ag_rp_77(void) { +/* Line -, ss-kb.syn */ + init_text_input('ã'); +} + +static void ag_rp_78(int c) { +/* Line -, ss-kb.syn */ + insert_char(c); +} + +static void ag_rp_79(void) { +/* Line -, ss-kb.syn */ + insert_char(228); +} + +static void ag_rp_80(void) { +/* Line -, ss-kb.syn */ + insert_char(227); +} + +static void ag_rp_81(int d) { +/* Line -, ss-kb.syn */ + insert_char(d); +} + +static void ag_rp_82(void) { +/* Line -, ss-kb.syn */ + backspace_char(); +} + +static void ag_rp_83(void) { +/* Line -, ss-kb.syn */ + delete_char(); +} + +static void ag_rp_84(void) { +/* Line -, ss-kb.syn */ + text_cursor_left(); +} + +static void ag_rp_85(void) { +/* Line -, ss-kb.syn */ + text_cursor_right(); +} + +static void ag_rp_86(void) { +/* Line -, ss-kb.syn */ + text_cursor_home(); +} + +static void ag_rp_87(void) { +/* Line -, ss-kb.syn */ + text_cursor_end(); +} + +static void ag_rp_88(void) { +/* Line -, ss-kb.syn */ + beep(); +} + + +#define READ_COUNTS +#define WRITE_COUNTS +#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 int const ag_null_value NULL_VALUE_INITIALIZER; + +static const unsigned char ag_rpx[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 13, 14, + 15, 16, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, + 28, 0, 0, 29, 30, 0, 31, 32, 0, 33, 0, 0, 0, 0, 0, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 0, 0, 0, 0, 43, 44, 45, 0, 46, 47, 48, 49, + 50, 51, 52, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 55, 0, 0, 56, 0, + 0, 0, 0, 57, 58, 59, 0, 60, 0, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 0, 78, 79, 80, 0, 0, 81, 0, 82, 83, + 84, 85, 86, 87, 88 +}; +#define AG_TCV(x) (((int)(x) >= 0 && (int)(x) <= 388) ? ag_tcv[(x)] : 0) + +static const unsigned char ag_tcv[] = { + 16,104,104,104,104,104,104,104,103,104,104,104,104, 24,104,104, 99,104, + 104, 98,104,104,104,104,104,104,104, 25,104,104,104,104,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,105, 90,102,102,102,102,102,102, + 102,102,102,102,105,105,105,105,105,105,105, 21, 94, 55, 46, 96, 19, 57, + 105, 45,105,105, 61,105,106, 51, 92, 74, 62, 77,105, 91,105, 69,105, 82, + 105,105,105,105,105,105,105, 21, 94, 55, 46, 96, 19, 57,105, 45,105,105, + 61,105,106, 51, 92, 74, 62, 77,105, 91,105, 69,105, 82,105,105,105,105, + 105,105,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104, 75,104,104,104,104, + 104,104,104,104,104,104,104,104,104, 65, 95,104,104,104,104,104,104,104, + 104,104,104, 31, 33, 27,104, 35,104, 36,104, 32, 34, 28,104, 66,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104, 29, 30,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104 +}; + +#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 GET_INPUT +#define GET_INPUT ((PCB).input_code = getchar()) +#endif + + +static void ag_prot(void) { + int ag_k; + ag_k = 128 - ++(PCB).btsx; + if (ag_k <= (PCB).ssx) { + (PCB).exit_flag = AG_STACK_ERROR_CODE; + PARSER_STACK_OVERFLOW; + return; + } + (PCB).bts[(PCB).btsx] = (PCB).sn; + (PCB).bts[ag_k] = (PCB).ssx; + (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx]; + (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx]; +} + +static void ag_undo(void) { + if ((PCB).drt == -1) return; + while ((PCB).btsx) { + int ag_k = 128 - (PCB).btsx; + (PCB).sn = (PCB).bts[(PCB).btsx--]; + (PCB).ssx = (PCB).bts[ag_k]; + (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k]; + (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k]; + } + (PCB).token_number = (ss-kb_token_type) (PCB).drt; + (PCB).ssx = (PCB).dssx; + (PCB).sn = (PCB).dsn; + (PCB).drt = -1; +} + + + +static const int ag_rtt[] = { + 58, 63, 0, 58, 63, 0, 47, 68, 0, 67, 70, 0, 67, 70, 0, 67, 70, 0, + 67, 70, 0, 56, 71, 0, 56, 71, 0, 56, 71, 0, 56, 71, 0, 80, 79, 0, + 86, 85, 0, 84, 87, 0, 84, 87, 0 +}; + +static const unsigned char ag_tstt[] = { +106,105,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57,55,51,46, + 45,42,36,35,34,33,32,31,30,29,28,27,21,19,0,12,13,14,15,17,18,20,22,26, + 37,38,39,40,41,43,44,47,48,49,50,53,54,59,68,72,89, +103,102,66,36,35,32,31,25,24,0,64, +106,105,104,103,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57, + 55,51,46,45,36,35,34,33,32,31,30,29,28,27,25,24,21,19,16,0,73,79,80,83, +62,61,55,0,60, +61,57,55,19,0, +106,105,104,103,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57, + 55,51,46,45,36,35,34,33,32,31,30,29,28,27,25,24,21,19,16,0, +92,77,61,55,0, +106,94,69,61,51,0, +25,0, +46,45,0, +69,46,45,0, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,25,24,21,19,0,23, +96,91,77,74,62,57,55,46,21,19,0, +62,19,0, +106,105,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57,55,51,46, + 45,42,36,35,34,33,32,31,30,29,28,27,21,19,16,0,13,14,17,18,20,22,26,37, + 38,39,40,41,43,44,47,48,49,50,53,54,59,68,72,89, +103,102,66,42,36,35,32,31,25,24,0,101, +106,105,104,103,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57, + 55,51,46,45,36,35,34,33,32,31,30,29,28,27,25,24,21,19,16,0,6, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,25,24,21,19,0,9,56,71, +103,102,66,36,35,32,31,24,0,10,58,63, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,25,24,21,19,0,9,56,71, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,25,24,21,19,0,9,56,71, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,24,21,19,0,7,78, +106,105,104,103,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57, + 55,51,46,45,36,35,34,33,32,31,30,29,28,27,25,24,21,19,16,0,73,79,80,83, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,25,24,21,19,0,9,56,71, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,24,21,19,0,8,52, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,42, + 36,35,32,31,25,24,21,19,0,101, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,25,24,21,19,0,2, +106,105,104,103,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57, + 55,51,46,45,36,35,34,33,32,31,30,29,28,27,25,24,21,19,16,0, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,25,24,21,19,0,23, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,25,24,21,19,0,23, +103,102,66,36,35,32,31,24,0,11, +103,102,66,36,35,32,31,24,0,64, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,25,24,21,19,0,9,56,71, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,24,21,19,0,23,84,85,86,87, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,24,21,19,0,3,76, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,24,21,19,0,23,85,86, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,25,24,21,19,0,23,67,70, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,24,21,19,0,7,78, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,42, + 36,35,32,31,25,24,21,19,0,101, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,42, + 36,35,32,31,25,24,21,19,0,101, +103,102,66,36,35,32,31,24,0,64, +103,102,66,42,36,35,32,31,24,0,101, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,42, + 36,35,32,31,24,21,19,0,101, +0,1, +106,105,104,103,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57, + 55,51,46,45,36,35,34,33,32,31,30,29,28,27,25,24,21,19,16,0,5, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,24,21,19,0,23,85,86, +106,105,104,103,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57, + 55,51,46,45,36,35,34,33,32,31,30,29,28,27,25,24,21,19,16,0,5, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,25,24,21,19,0,23, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,42, + 36,35,32,31,25,24,21,19,0,101, +103,102,66,42,36,35,32,31,24,0,101, +106,105,104,103,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57, + 55,51,46,45,36,35,34,33,32,31,30,29,28,27,25,24,21,19,0, +106,105,104,103,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57, + 55,51,46,45,36,35,34,33,32,31,30,29,28,27,25,24,21,19,16,0, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,24,21,19,0,4, +106,105,104,103,102,99,98,96,95,94,92,91,90,82,77,75,74,69,66,65,62,61,57, + 55,51,46,45,36,35,34,33,32,31,30,29,28,27,25,24,21,19,16,0, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,42, + 36,35,32,31,25,24,21,19,0,101, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,24,21,19,0,7,78, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,24,21,19,0,3,76, +106,105,103,102,99,98,96,94,92,91,90,82,77,74,69,66,62,61,57,55,51,46,45,36, + 35,32,31,24,21,19,0,8,52, + +}; + + +static unsigned const char ag_astt[1647] = { + 2,2,2,2,2,2,2,2,2,2,2,2,2,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,7,0,2,1,1,2,1,1,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,8,8,8,8,8,8,8,8,8, + 7,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,7,3,3,1,2,2,2,2,7,1,2,1,1,1,7,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,2,1,1,2,5,10,1,10, + 10,1,7,3,7,2,2,5,2,2,2,5,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,7,1,2,2,2,3,2,1,2,3,2,2,5,3,2,5,2,2,2,2,2,2,2,2,2,2,2,2,2,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,3,7,2,3,2,1,1,1,2,2,2,2,2,2, + 2,1,2,1,1,1,1,1,1,1,1,1,2,10,2,2,2,2,2,2,3,2,7,3,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,2,1,4,4,4,4,4,4,4,4, + 7,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1, + 2,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,2,1, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,3,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,7,1,1,1,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 7,1,2,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,2, + 10,10,2,10,10,10,10,10,10,10,10,10,10,10,10,2,10,10,10,10,10,10,10,2,2,2,2, + 2,3,2,10,10,7,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,7,1,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,7,1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 7,1,4,4,4,4,4,4,4,4,7,1,8,8,8,8,8,8,8,8,7,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,2,1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,7,1,3,1,2,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,7,1,3,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,7,1,1,3,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,7,1,2,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,7,1,3,10,10,2,10,10,10,10,10,10,10,10,10,10,10,10,2,10,10,10,10,10, + 10,10,2,2,2,2,2,2,2,10,10,7,3,10,10,2,10,10,10,10,10,10,10,10,10,10,10,10, + 2,10,10,10,10,10,10,10,2,2,2,2,2,2,2,10,10,7,3,8,8,8,8,8,8,8,8,7,1,2,10,2, + 2,2,2,2,2,2,7,3,10,10,2,10,10,10,10,10,10,10,10,10,10,10,10,2,10,10,10,10, + 10,10,10,2,2,2,2,2,2,10,10,7,3,7,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,1,2,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,1,10,10,2,10,10,10,10,10,10, + 10,10,10,10,10,10,2,10,10,10,10,10,10,10,2,2,2,2,2,2,2,10,10,7,3,2,10,2,2, + 2,2,2,2,2,7,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,7,1,1,1,1,1,1,1,1,1,1,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,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,1,1,1,1,1,1,1,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,7,10,10,2,10,10,10,10,10,10,10,10,10, + 10,10,10,2,10,10,10,10,10,10,10,2,2,2,2,2,2,2,10,10,7,3,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,3,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,3 +}; + + +static const unsigned char ag_pstt[] = { +113,113,113,115,114,113,111,113,113,113,100,113,113,2,113,113,21,16,113,113, + 113,113,113,113,113,12,31,30,29,28,27,26,25,24,23,22,113,113,0,0,12,14, + 14,16,13,12,11,21,12,12,12,12,36,12,10,12,9,8,7,6,4,3,1,2,5, +15,15,15,15,15,15,15,15,15,1,15, +84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84, + 84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,2,76,76,16,85, +57,55,56,3,17, +106,19,20,18,4, +98,98,98,98,98,98,98,98,98,98,98,98,98,97,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,5, +107,21,22,99,47, +108,23,108,109,24,7, +44,8, +43,42,50, +65,40,39,49, +25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,11,25, +112,104,101,77,103,26,102,63,18,105,46, +61,17,48, +113,113,113,115,114,113,111,113,113,113,100,113,113,2,113,113,21,16,113,113, + 113,113,113,113,113,12,31,30,29,28,27,26,25,24,23,22,113,113,15,14,12, + 14,16,13,12,11,21,12,12,12,12,36,12,10,12,9,8,7,6,4,3,1,2,5, +124,122,125,130,127,126,129,128,67,66,15,123, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,16,27, +9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,17,29,54,28, +10,10,10,10,10,10,10,10,18,31,32,30, +9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,19,29,52,28, +9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,20,29,51,28, +7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,21,33,80, +84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84, + 84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,22,34,34,16,85, +9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,23,29,110,28, +8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,24,35,45, +117,117,124,117,119,118,117,117,117,117,117,117,117,117,117,125,117,117,117, + 117,117,117,117,130,127,126,129,128,20,19,117,117,25,120, +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,26,36, +82,82,82,82,82,82,82,82,82,82,82,82,82,37,82,82,82,82,82,82,82,82,82,82,82, + 82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,27, +38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38, + 38,38,38,38,38,38,28,38, +39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,29,39, +11,11,11,11,11,11,11,11,30,40, +41,41,41,41,41,41,41,41,31,41, +9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,32,29,53,28, +42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42, + 42,42,42,42,42,33,42,86,44,94,43, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,34,45,79, +42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42, + 42,42,42,42,42,35,42,46,90, +48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48, + 48,48,48,48,48,48,36,48,64,47, +7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,37,33,83, +117,117,124,117,119,118,117,117,117,117,117,117,117,117,117,125,117,117,117, + 117,117,117,117,130,127,126,129,128,75,74,117,117,38,120, +117,117,124,117,119,118,117,117,117,117,117,117,117,117,117,125,117,117,117, + 117,117,117,117,130,127,126,129,128,73,72,117,117,39,120, +49,49,49,49,49,49,49,49,40,49, +124,122,125,130,127,126,129,128,58,41,123, +117,117,124,117,119,118,117,117,117,117,117,117,117,117,117,125,117,117,117, + 117,117,117,117,130,127,126,129,128,93,117,117,42,120, +43,50, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,44,51, +42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42, + 42,42,42,42,42,45,42,88,52, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,46,53, +54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,47,54, +117,117,124,117,119,118,117,117,117,117,117,117,117,117,117,125,117,117,117, + 117,117,117,117,130,127,126,129,128,69,68,117,117,48,120, +124,122,125,130,127,126,129,128,59,49,123, +96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96, + 96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,50, +55,55,55,55,55,55,55,55,55,55,55,55,55,95,55,55,55,55,55,55,55,55,55,55,55, + 55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,51, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,52,56, +57,57,57,57,57,57,57,57,57,57,57,57,57,91,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,53, +117,117,124,117,119,118,117,117,117,117,117,117,117,117,117,125,117,117,117, + 117,117,117,117,130,127,126,129,128,71,70,117,117,54,120, +7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,55,33,87, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,56,45,89, +8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,57,35,92, + +}; + + +static const unsigned short ag_sbt[] = { + 0, 65, 76, 123, 128, 133, 176, 181, 187, 189, 192, 196, 229, 240, + 243, 307, 319, 363, 398, 410, 445, 480, 513, 560, 595, 628, 662, 695, + 738, 771, 804, 814, 824, 859, 895, 928, 962, 997,1030,1064,1098,1108, + 1119,1152,1154,1198,1232,1276,1309,1343,1354,1396,1439,1471,1514,1548, + 1581,1614,1647 +}; + + +static const unsigned short ag_sbe[] = { + 38, 74, 118, 126, 132, 175, 180, 186, 188, 191, 195, 227, 239, 242, + 282, 317, 361, 394, 406, 441, 476, 510, 555, 591, 625, 660, 693, 737, + 769, 802, 812, 822, 855, 889, 925, 958, 993,1027,1062,1096,1106,1117, + 1150,1152,1196,1228,1274,1307,1341,1352,1395,1438,1469,1513,1546,1578, + 1611,1644,1647 +}; + + +static const unsigned char ag_fl[] = { + 1,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,1,2,2,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,2,2,1,2,2,2,3,1,1,1,1,1,3,3,4,3,1,1,1,3,4,1,2,1,2,4,2,3,3,2,2, + 3,3,3,3,3,3,2,2,1,4,3,1,3,4,0,1,2,5,2,4,2,4,5,2,1,3,3,2,2,2,1,2,2,2,2, + 2,2,2,2,2,3,1,2,1,1,1,0,2,2,2,2,0,2,2,1,1,1,1,1,1,1 +}; + +static const unsigned char ag_ptt[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 15, 12, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 49, 49, 49, 49, 49, 40, 40, 40, + 40, 60, 60, 60, 58, 58, 17, 17, 26, 26, 43, 68, 47, 47, 67, 67, 67, 67, + 56, 56, 56, 56, 41, 72, 72, 37, 38, 73, 73, 73, 83, 80, 78, 78, 76, 76, + 52, 52, 52, 86, 84, 84, 84, 39, 39, 89, 20, 53, 44, 48, 18, 54, 59, 50, + 50, 50, 50, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 64, 64, 64,101,101, + 101,101,101,101,101 +}; + +static const unsigned char *ag_valid(int ag_k) { + const unsigned char *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]]; + while (*--ag_tp != (unsigned char) ag_k) if (*ag_tp == 0) return NULL; + return ag_tp; +} + +int ss-kb_change_reduction(ss-kb_token_type ag_k) { + if (!ag_valid(ag_k)) return 0; + (PCB).reduction_token = ag_k; + return 1; +} + +static void ag_default(const int *ag_tp) { + (PCB).ag_dsn = (PCB).sn; + (PCB).ag_dtl = ag_tp; + while (!ag_valid((ss-kb_token_type) *ag_tp)) ag_tp++; + (PCB).reduction_token = (ss-kb_token_type) *ag_tp; +} + + +int ss-kb_reduction_choices(int *ag_tp) { + int ag_k, ag_n; + if ((PCB).ag_dsn != (PCB).sn) { + *ag_tp = ag_ptt[(PCB).ag_ap]; + return 1; + } + for (ag_k = ag_n = 0; (PCB).ag_dtl[ag_k]; ag_k++) { + if (!ag_valid((ss-kb_token_type) (PCB).ag_dtl[ag_k])) continue; + ag_tp[ag_n++] = (PCB).ag_dtl[ag_k]; + } + return ag_n; +} + + + +static void ag_ra(void) +{ + switch(ag_rpx[(PCB).ag_ap]) { + case 1: ag_rp_1(); break; + case 2: ag_rp_2(); break; + case 3: ag_rp_3(); break; + case 4: ag_rp_4(); break; + case 5: ag_rp_5(); break; + case 6: ag_rp_6(); break; + case 7: ag_rp_7(); break; + case 8: ag_rp_8(); break; + case 9: ag_rp_9(); break; + case 10: ag_rp_10(); break; + case 11: ag_rp_11(); break; + case 12: ag_rp_12(); break; + case 13: ag_rp_13(); break; + case 14: ag_rp_14(); break; + case 15: ag_rp_15(); break; + case 16: ag_rp_16(); break; + case 17: ag_rp_17(); break; + case 18: ag_rp_18(); break; + case 19: ag_rp_19(); break; + case 20: ag_rp_20(); break; + case 21: ag_rp_21(); break; + case 22: ag_rp_22(); break; + case 23: ag_rp_23(); break; + case 24: ag_rp_24(); break; + case 25: ag_rp_25(); break; + case 26: ag_rp_26(); break; + case 27: ag_rp_27(); break; + case 28: ag_rp_28(); break; + case 29: ag_rp_29(); break; + case 30: ag_rp_30(); break; + case 31: ag_rp_31(); break; + case 32: ag_rp_32(); break; + case 33: ag_rp_33(); break; + case 34: ag_rp_34(); break; + case 35: ag_rp_35(); break; + case 36: ag_rp_36(VS(2)); break; + case 37: ag_rp_37(VS(1)); break; + case 38: VS(0) = ag_rp_38(); break; + case 39: VS(0) = ag_rp_39(); break; + case 40: VS(0) = ag_rp_40(); break; + case 41: ag_default(&ag_rtt[0]); VS(0) = ag_rp_41(); break; + case 42: ag_default(&ag_rtt[3]); VS(0) = ag_rp_42(); break; + case 43: ag_rp_43(); break; + case 44: ag_rp_44(); break; + case 45: ag_default(&ag_rtt[6]); ag_rp_45(); break; + case 46: ag_default(&ag_rtt[9]); ag_rp_46(); break; + case 47: ag_default(&ag_rtt[12]); ag_rp_48(); break; + case 48: ag_default(&ag_rtt[15]); ag_rp_47(); break; + case 49: ag_default(&ag_rtt[18]); ag_rp_49(); break; + case 50: ag_default(&ag_rtt[21]); ag_rp_50(); break; + case 51: ag_default(&ag_rtt[24]); ag_rp_52(); break; + case 52: ag_default(&ag_rtt[27]); ag_rp_51(); break; + case 53: ag_default(&ag_rtt[30]); ag_rp_53(); break; + case 54: ag_rp_54(); break; + case 55: ag_default(&ag_rtt[33]); ag_rp_55(); break; + case 56: ag_rp_56(); break; + case 57: ag_default(&ag_rtt[36]); ag_rp_57(); break; + case 58: ag_default(&ag_rtt[39]); ag_rp_58(); break; + case 59: ag_default(&ag_rtt[42]); ag_rp_59(); break; + case 60: ag_rp_60(); break; + case 61: ag_rp_61(); break; + case 62: ag_rp_62(); break; + case 63: ag_rp_63(); break; + case 64: ag_rp_64(); break; + case 65: ag_rp_65(); break; + case 66: ag_rp_66(); break; + case 67: ag_rp_67(); break; + case 68: ag_rp_68(); break; + case 69: ag_rp_69(); break; + case 70: ag_rp_70(); break; + case 71: ag_rp_71(); break; + case 72: ag_rp_72(); break; + case 73: ag_rp_73(); break; + case 74: ag_rp_74(); break; + case 75: ag_rp_75(VS(0)); break; + case 76: ag_rp_76(); break; + case 77: ag_rp_77(); break; + case 78: ag_rp_78(VS(1)); break; + case 79: ag_rp_79(); break; + case 80: ag_rp_80(); break; + case 81: ag_rp_81(VS(1)); break; + case 82: ag_rp_82(); break; + case 83: ag_rp_83(); break; + case 84: ag_rp_84(); break; + case 85: ag_rp_85(); break; + case 86: ag_rp_86(); break; + case 87: ag_rp_87(); break; + case 88: ag_rp_88(); break; + } +} + +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_1_er_proc(void); +static int ag_action_2_er_proc(void); +static int ag_action_3_er_proc(void); +static int ag_action_4_er_proc(void); + +static int (*const ag_er_procs_scan[])(void) = { + ag_action_1_er_proc, + ag_action_2_er_proc, + ag_action_3_er_proc, + ag_action_4_er_proc +}; + + +static void ag_error_resynch(void) { + int ag_k; + int ag_ssx = (PCB).ssx; + + SYNTAX_ERROR; + if ((PCB).exit_flag != AG_RUNNING_CODE) return; + while (1) { + ag_k = ag_sbt[(PCB).sn]; + while (ag_tstt[ag_k] != 42 && ag_tstt[ag_k]) ag_k++; + if (ag_tstt[ag_k] || (PCB).ssx == 0) break; + (PCB).sn = (PCB).ss[--(PCB).ssx]; + } + if (ag_tstt[ag_k] == 0) { + (PCB).sn = PCB.ss[(PCB).ssx = ag_ssx]; + (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; + return; + } + ag_k = ag_sbt[(PCB).sn]; + while (ag_tstt[ag_k] != 42 && ag_tstt[ag_k]) ag_k++; + (PCB).ag_ap = ag_pstt[ag_k]; + (ag_er_procs_scan[ag_astt[ag_k]])(); + while (1) { + ag_k = ag_sbt[(PCB).sn]; + while (ag_tstt[ag_k] != (unsigned char) (PCB).token_number && ag_tstt[ag_k]) + ag_k++; + if (ag_tstt[ag_k] && ag_astt[ag_k] != ag_action_10) break; + if ((PCB).token_number == 16) + {(PCB).exit_flag = AG_SYNTAX_ERROR_CODE; return;} + {if ((PCB).read_flag == 0) (PCB).read_flag = 1;} + if ((PCB).read_flag) { + (PCB).read_flag = 0; + GET_INPUT; + }; + (PCB).token_number = (ss-kb_token_type) AG_TCV((PCB).input_code); + } +} + + +static int ag_action_10_proc(void) { + int ag_t = (PCB).token_number; + (PCB).btsx = 0, (PCB).drt = -1; + do { + {if ((PCB).read_flag == 0) (PCB).read_flag = 1;} + if ((PCB).read_flag) { + (PCB).read_flag = 0; + GET_INPUT; + }; + (PCB).token_number = (ss-kb_token_type) AG_TCV((PCB).input_code); + } while ((PCB).token_number == (ss-kb_token_type) ag_t); + return 1; +} + +static int ag_action_11_proc(void) { + int ag_t = (PCB).token_number; + + (PCB).btsx = 0, (PCB).drt = -1; + do { + (PCB).vs[(PCB).ssx] = (PCB).input_code; + (PCB).ssx--; + {if ((PCB).read_flag == 0) (PCB).read_flag = 1;} + ag_ra(); + if ((PCB).exit_flag != AG_RUNNING_CODE) return 0; + (PCB).ssx++; + if ((PCB).read_flag) { + (PCB).read_flag = 0; + GET_INPUT; + }; + (PCB).token_number = (ss-kb_token_type) AG_TCV((PCB).input_code); + } + while ((PCB).token_number == (ss-kb_token_type) ag_t); + 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]; + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).reduction_token = (ss-kb_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]; + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).reduction_token = (ss-kb_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]; + (PCB).reduction_token = (ss-kb_token_type) ag_ptt[(PCB).ag_ap]; + return 1; +} + +static int ag_action_2_proc(void) { + (PCB).btsx = 0, (PCB).drt = -1; + if ((PCB).ssx >= 128) { + (PCB).exit_flag = AG_STACK_ERROR_CODE; + PARSER_STACK_OVERFLOW; + } + (PCB).vs[(PCB).ssx] = (PCB).input_code; + (PCB).ss[(PCB).ssx] = (PCB).sn; + (PCB).ssx++; + (PCB).sn = (PCB).ag_ap; + {if ((PCB).read_flag == 0) (PCB).read_flag = 1;} + return 0; +} + +static int ag_action_9_proc(void) { + if ((PCB).drt == -1) { + (PCB).drt=(PCB).token_number; + (PCB).dssx=(PCB).ssx; + (PCB).dsn=(PCB).sn; + } + ag_prot(); + (PCB).vs[(PCB).ssx] = ag_null_value; + (PCB).ss[(PCB).ssx] = (PCB).sn; + (PCB).ssx++; + (PCB).sn = (PCB).ag_ap; + 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).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_1_proc(void) { + {if ((PCB).read_flag == 0) (PCB).read_flag = 1;} + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_1_r_proc(void) { + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_1_s_proc(void) { + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_4_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + (PCB).reduction_token = (ss-kb_token_type) ag_ptt[(PCB).ag_ap]; + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).vs[(PCB).ssx] = (PCB).input_code; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else (PCB).ss[(PCB).ssx] = (PCB).sn; + {if ((PCB).read_flag == 0) (PCB).read_flag = 1;} + 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); + if (ag_tstt[ag_t1] != (PCB).reduction_token) { + (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; + REDUCTION_TOKEN_ERROR; break;} + (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; + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).vs[(PCB).ssx] = (PCB).input_code; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else (PCB).ss[(PCB).ssx] = (PCB).sn; + {if ((PCB).read_flag == 0) (PCB).read_flag = 1;} + (PCB).reduction_token = (ss-kb_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); + if (ag_tstt[ag_t1] != (PCB).reduction_token) { + (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; + REDUCTION_TOKEN_ERROR; break;} + (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) { + int ag_k = ag_sbt[(PCB).sn]; + while (ag_tstt[ag_k] != 42 && ag_tstt[ag_k]) ag_k++; + if (ag_tstt[ag_k] == 0) ag_undo(); + ag_error_resynch(); + return (PCB).exit_flag == AG_RUNNING_CODE; +} + +static int ag_action_5_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap]; + (PCB).btsx = 0, (PCB).drt = -1; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else { + (PCB).ss[(PCB).ssx] = (PCB).sn; + } + (PCB).reduction_token = (ss-kb_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); + if (ag_tstt[ag_t1] != (PCB).reduction_token) { + (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; + REDUCTION_TOKEN_ERROR; break;} + (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]; + (PCB).reduction_token = (ss-kb_token_type) ag_ptt[(PCB).ag_ap]; + if ((PCB).drt == -1) { + (PCB).drt=(PCB).token_number; + (PCB).dssx=(PCB).ssx; + (PCB).dsn=(PCB).sn; + } + if (ag_sd) { + (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + } + else { + ag_prot(); + (PCB).vs[(PCB).ssx] = ag_null_value; + (PCB).ss[(PCB).ssx] = (PCB).sn; + } + 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); + if (ag_tstt[ag_t1] != (PCB).reduction_token) { + (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; + REDUCTION_TOKEN_ERROR; break;} + (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_2_er_proc(void) { + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).vs[(PCB).ssx] = (PCB).input_code; + (PCB).ssx++; + (PCB).sn = (PCB).ag_ap; + return 0; +} + +static int ag_action_1_er_proc(void) { + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_4_er_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).reduction_token = (ss-kb_token_type) ag_ptt[(PCB).ag_ap]; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else (PCB).ss[(PCB).ssx] = (PCB).sn; + 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); + if (ag_tstt[ag_t1] != (PCB).reduction_token) { + (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; + REDUCTION_TOKEN_ERROR; break;} + (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_er_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + (PCB).btsx = 0, (PCB).drt = -1; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else (PCB).ss[(PCB).ssx] = (PCB).sn; + (PCB).reduction_token = (ss-kb_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); + if (ag_tstt[ag_t1] != (PCB).reduction_token) { + (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; + REDUCTION_TOKEN_ERROR; break;} + (PCB).ag_ap = ag_pstt[ag_t1]; + if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; + } + return 0; +} + + +void init_ss-kb(void) { + (PCB).read_flag = 1; + (PCB).error_message = "Syntax Error"; + (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0; + (PCB).exit_flag = AG_RUNNING_CODE; + (PCB).btsx = 0, (PCB).drt = -1; +} + +void ss-kb(void) { + init_ss-kb(); + (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; + if ((PCB).read_flag) { + (PCB).read_flag = 0; + GET_INPUT; + }; + (PCB).token_number = (ss-kb_token_type) AG_TCV((PCB).input_code); + 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]])(); + } +} + +