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]])();
+  }
+}
+
+