diff tests/agcl/oldagsrc/good/ts.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/oldagsrc/good/ts.cpp	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,3091 @@
+/*
+ AnaGram, a System for Syntax Directed Programming
+ C Macro preprocessor and parser
+
+ Copyright (c) 1993, Parsifal Software.
+ All Rights Reserved.
+
+ TS.SYN: Token Scanner Module
+*/
+
+#include "mpp.h"
+
+
+// context structure for diagnostics
+
+struct location { unsigned line, column;};
+
+
+/*
+ * 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 TS_H
+#include "ts.h"
+#endif
+
+#ifndef TS_H
+#error Mismatched header file
+#endif
+
+#include <ctype.h>
+#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])
+
+
+#define CHANGE_REDUCTION(x) ts_change_reduction(ts_##x##_token)
+int ts_change_reduction(ts_token_type);
+
+
+#line - "ts.syn"
+                                      // Embedded C
+#include "array.h"                     // \AnaGram\classlib\include\array.h
+#include "stack.h"                     // \AnaGram\classlib\include\stack.h
+#include <io.h>                        // If not found, not necessary
+#include <sys/types.h>                 // If not found, not necessary
+#include <sys/stat.h>
+#include <fcntl.h>
+
+
+// Macro Definitions
+
+#define SYNTAX_ERROR syntax_error_scanning(PCB.error_message)
+#define GET_CONTEXT (CONTEXT.line = PCB.line, CONTEXT.column = PCB.column)
+#define GET_INPUT (PCB.input_code = getc(input.file))
+#define PCB input.pcb
+
+
+// Structure Definition
+
+struct file_descriptor {
+  char *name;                          // name of file
+  FILE *file;                          // source of input characters
+  ts_pcb_type pcb;                     // parser control block for file
+};
+
+
+// Static Data Declarations
+
+static char                  *error_modifier = "";
+static file_descriptor        input;
+static stack<token_sink *>    save_sink(5);
+
+
+// Syntax Error Reporting
+/*
+ syntax_error() provides an error diagnostic procedure for those
+ parsers which are called by the token scanner. error_modifier is set
+ by expand() so that an error encountered during a macro expansion
+ will be so described.  Otherwise, the diagnostic will not make
+ sense.
+
+ Since all other parsers are called from reduction procedures, the
+ line and column number of the token they are dealing with is given
+ by the context of the token scanner production that is being
+ reduced.
+*/
+
+void syntax_error(char *msg)  {
+  printf("%s: Line %d, Column %d: %s%s\n",
+   input.name, CONTEXT.line, CONTEXT.column, msg, error_modifier);
+}
+
+/*
+ syntax_error_scanning() provides an error diagnostic procedure for
+ the token scanner itself. The locus of the error is given by the
+ current line and column number of the token scan, as given in the
+ parser control block.
+*/
+
+static void syntax_error_scanning(char *msg)  {
+  printf("%s: Line %d, Column %d: %s\n",
+    input.name, PCB.line, PCB.column, msg);
+}
+
+
+// Support for Reduction Procedures
+/*
+ name_token() looks up the name string in the string accumulator,
+ identifies it in the token dictionary, checks to see if it is a
+ reserved word, and creates a token.
+*/
+
+static token name_token(void) {
+  token t;
+  t.id = NAME;
+  t.handle = td << sa;
+  --sa;
+  if (t.handle <= n_reserved_words) t.id = reserved_words[t.handle].id;
+  return t;
+}
+
+/*
+ op() creates a token for a punctuation character.
+*/
+
+static token op(unsigned x) {
+  token t;
+  t.id = (token_id) x;
+  t.handle = token_handles[x];
+  return t;
+}
+
+/*
+ space_op() creates a token for a space character. Note that a space
+ could be a tab, vertical tab, or form feed character as well as a
+ blank.
+*/
+
+static token space_op(unsigned x) {
+  token t;
+  t.id = (token_id) ' ';
+  t.handle = token_handles[x];
+  return t;
+}
+
+/*
+ tkn() creates a token with a specified id for the string on the top
+ of the string accumulator
+*/
+
+static token tkn(token_id id) {
+  token t;
+  t.id = id;
+  t.handle = td << sa;
+  --sa;
+  return t;
+}
+
+
+// Macro Processing Procedures
+
+/*
+ check_defined() looks up the name on the string accumulator to see if
+ it is the name of a macro. It then selects a reduction token according
+ to the outcome of the test and an input flag.
+*/
+
+static void check_defined(int flag) {
+  unsigned id = macro_id[td[sa]];
+  --sa;
+  flag ^= id != 0;
+  if (flag) CHANGE_REDUCTION(false_condition);
+  else CHANGE_REDUCTION(true_condition);
+}
+
+/*
+ defined() returns a decimal constant token equal to one or zero
+ depending on whether the token named on the string accumulator is or
+ is not defined as a macro
+*/
+
+static token defined(void) {
+  unsigned id = macro_id[td[sa]];
+  token t;
+  t.id = DECconstant;
+  t.handle = id ? one_value : zero_value;
+  --sa;
+  return t;
+}
+
+/*
+ expand() expands and outputs a macro. t.handle is the token dictionary
+ index of the macro name. n is the number of arguments found.
+
+ Since it is possible that scanner sink is pointing to ta, it is
+ necessary to pop the expanded macro from ta before passing it on to
+ scanner_sink. Otherwise, we would have effectively ta << ta, a
+ situation which causes an infinite loop.
+*/
+
+static void expand(token t, unsigned n) {
+  error_modifier = " in macro expansion"; // fix error diagnostic
+  expand_macro(t,n);                      // Defined in MAS.SYN
+  if (size(ta)) {
+    array<token> x(ta,size(ta) + 1);
+    --ta;
+    *scanner_sink << x;
+  } else --ta;
+  error_modifier = "";
+}
+
+/*
+ Look up the name string on the string accumulator. Determine whether
+ it is a reserved word, or a simple identifier. Then determine
+ whether it is the name of a macro.
+*/
+
+static token id_macro(void) {
+  token t;
+  unsigned id;
+
+  t.id = NAME;
+  t.handle = td << sa;
+  --sa;
+  if (t.handle <= n_reserved_words) t.id = reserved_words[t.handle].id;
+
+  if (if_clause && t.handle == defined_value) {
+    CHANGE_REDUCTION(defined);
+    return t;
+  }
+  id = macro_id[t.handle];
+  if (id == 0) return t;
+
+  if (macro[id].parens) CHANGE_REDUCTION(macro);
+  else CHANGE_REDUCTION(simple_macro);
+  return t;
+}
+
+/*
+ Start a macro definition. This procedure defines all but the body of
+ the macro.
+
+ nargs is the count of parameters that were found.  flag is set if
+ the macro was defined with parentheses.
+
+ The parameter names are on the string accumulator, with the last
+ name on the top of the stack, so they must be popped off, identified
+ and stored in reverse order.
+
+ The name of the macro is beneath the parameter names on the string
+ accumulator.
+
+ Before returning, this procedure saves the current value of
+ scanner_sink, increments the level on the token stack and sets
+ scanner_sink so that subsequent tokens produced by the token scanner
+ will accumulate on the token stack. These tokens comprise the body
+ of the macro. When the end of the macro body is encountered, the
+ procedure save_macro_body will remove them from the token stack and
+ restore the value of scanner_sink.
+*/
+
+static int init_macro_def(int nargs, int flag) {
+  int k;
+  int id = ++n_macros;
+  unsigned name;
+  unsigned *arg_list = nargs ? new unsigned[nargs] : NULL;
+
+  assert(id < N_MACROS);
+  for (k = nargs; k--;) {
+    arg_list[k] = td << sa;
+    --sa;
+  }
+
+  macro[id].arg_names = arg_list;
+  macro[id].n_args = nargs;
+
+  macro[id].name = name = td << sa;
+  --sa;
+
+  macro_id[name] = id;
+
+  macro[id].busy_flag = 0;
+  macro[id].parens = flag ;
+
+  save_sink << scanner_sink;
+  scanner_sink = &++ta;
+  return id;
+}
+
+/*
+ save_macro_body() finishes the definition of a macro by making a
+ permanent copy of the token string on the token accumulator. It then
+ restores the scanner_sink to the value it had when the macro
+ definition was encountered.
+*/
+
+static void save_macro_body(int id) {
+  macro[id].body = size(ta) ? copy(ta) : NULL;
+  --ta;
+  save_sink >> scanner_sink;
+}
+
+/*
+ undefine() deletes the macro definition for the macro whose name is
+ on the top of the string accumulator. If there is no macro with the
+ given name, undefine simply returns.
+
+ Otherwise, it frees the storage associated with the macro. It then
+ fills the resulting hole in the table with the last macro in the
+ table. The macro_id table is updated appropriately.
+*/
+
+static void undefine(void) {
+  unsigned name = td << sa;
+  int id = macro_id[name];
+  --sa;
+  if (id == 0) return;
+  macro_id[name] = 0;
+  if (macro[id].arg_names) delete [] macro[id].arg_names;
+  if (macro[id].body) delete [] macro[id].body;
+  macro[id] = macro[n_macros--];
+  macro_id[macro[id].name] = id;
+}
+
+
+// Include file procedures
+
+/*
+ file_name() interprets the file name provided by an #include
+ statement. If the file name is enclosed in <> brackets it scans the
+ directory list in paths to try to find the file. If it finds it, it
+ prefixes the path to the file name.
+
+ If the file name is enclosed in "" quotation marks, file_name()
+ simply strips the quotation marks.
+
+ If file_name() succeeds, it returns 1 and provides path-name in the
+ string accumulator, otherwise it returns 0 and nothing in the string
+ accumulator.
+
+ Note that file name uses a temporary string accumulator, lsa.
+*/
+
+static int file_name(char *file) {
+  int c;
+  int tc;
+  string_accumulator lsa(100);       // for temporary storage of name
+
+  while (*file == ' ') file++;
+  tc = *file++;
+  if (tc == '<') tc = '>';
+  else if (tc != '"') return 0;
+  while ((c = *file++) != 0 && c != tc) lsa << c;
+  if (c != tc) return 0;
+  if (tc == '>') {
+    int k, n;
+    n = size(paths);
+    for (k = 0; k < n; k++) {
+      FILE *f;
+      ++sa << paths[k];
+      if (sa[0] != '\\' || sa[0] != '/') sa << '/';
+      sa << lsa;
+      f = fopen(sa,"rt");
+      if (f != NULL) {
+        fclose(f);
+        return 1;
+      }
+      --sa;
+    }
+     return 0;
+  }
+  ++sa << lsa;
+  return 1;
+}
+
+/*
+ include_file() is called in response to a #include statement.
+
+ First, it saves the file_descriptor for the current input. Then it
+ restores the scanner_sink which was saved prior to accumulating
+ macro expanded tokens on the token_accumulator.
+
+ When include_file() is called, the argument of the #include
+ statement exists in the form of tokens on the token accumulator.
+ These tokens are passed to a token_translator which turns the tokens
+ into a string on the string accumulator.
+
+ file_name() is then called to distinguish between "" and <> files.
+ In the latter case, file_name() prefixes a directory path to the name.
+ The name is then in the string accumulator.
+
+ scan_input() is then called to scan the include file.
+
+ Finally, before returning, the previous file_descriptor is restored.
+*/
+
+static void include_file(void) {
+  file_descriptor save_input = input;      // save input state
+  int flag;
+
+  save_sink >> scanner_sink;               // restore scanner_sink
+
+  token_translator tt(&++sa);
+  tt << ta;                                // recover string from tokens
+  --ta;                                    // discard token string
+
+  array<char> file(sa, size(sa)+1);  // local copy of string
+  --sa;
+
+  flag = file_name(file);
+
+  if (!flag) {
+    fprintf(stderr, "Bad include file name: %s\n", (char *) file);
+    return;
+  }
+  array<char> path(sa, size(sa) + 1);
+  --sa;
+  scan_input(path);                        // recursive call to ts()
+  input = save_input;                      // restore input state
+  return;
+}
+
+
+// Conditional compilation procedures
+
+/*
+ init_condition() prepares for evaluation the condition expression in
+ #if and #elif statements.
+
+ It protects scanner_sink by pushing it onto the save_sink stack.
+ Then it resets the expression evaluatior, condition, and sets
+ scanner_sink to point to it.
+
+ Finally it sets the if_clause flag so that defined() will be handled
+ properly.
+*/
+
+static void init_condition(void) {
+  save_sink << scanner_sink;
+  scanner_sink = &reset(condition);
+  if_clause = 1;
+}
+
+/*
+ eval_condition() is called to deal with #if and #elif statements. The
+ init_condition() procedure has redirected scanner output to the
+ expression evaluator, so eval_condition() restores the previous
+ scanner destination.
+
+ It then sends an eof token to the expression evaluator, resets
+ if_clause and reads the value of the condition. Remember that
+ (long) condition returns the value of the expression.
+*/
+
+static int eval_condition(void) {
+  save_sink >> scanner_sink;
+  condition << op(0);                      // eof to exp evaluator
+  if_clause = 0;
+  return condition != 0L;
+}
+
+/*
+ In eval_if() and eval_elif() note the use of CHANGE_REDUCTION to
+ select the appropriate reduction token depending on the outcome of
+ the condition.
+*/
+
+static void eval_elif(void) {
+  if (eval_condition()) CHANGE_REDUCTION(true_else_condition);
+  else CHANGE_REDUCTION(false_else_condition);
+}
+
+static void eval_if(void) {
+  if (eval_condition()) CHANGE_REDUCTION(true_condition);
+  else CHANGE_REDUCTION(false_condition);
+}
+
+
+// Do token scan
+
+/*
+ scan_input()
+   1) opens the specified file, if possible
+   2) calls the parser
+   3) closes the input file
+*/
+
+void scan_input(char *path) {
+  input.file = fopen(path, "rt");
+  input.name = path;
+  if (input.file == NULL) {
+    fprintf(stderr,"Cannot open %s\n", (char *) path);
+    return;
+  }
+  ts();
+  fclose(input.file);
+}
+
+#line - "ts.cpp"
+
+#ifndef CONVERT_CASE
+#define CONVERT_CASE(c) (c)
+#endif
+#ifndef TAB_SPACING
+#define TAB_SPACING 8
+#endif
+
+static void ag_rp_1(void) {
+#line - "ts.syn"
+  *scanner_sink << op('\n');
+#line - "ts.cpp"
+}
+
+static void ag_rp_2(void) {
+#line - "ts.syn"
+  check_defined(1);
+#line - "ts.cpp"
+}
+
+static void ag_rp_3(void) {
+#line - "ts.syn"
+  check_defined(0);
+#line - "ts.cpp"
+}
+
+static void ag_rp_4(void) {
+#line - "ts.syn"
+  eval_if();
+#line - "ts.cpp"
+}
+
+static void ag_rp_5(void) {
+#line - "ts.syn"
+  eval_elif();
+#line - "ts.cpp"
+}
+
+static void ag_rp_6(void) {
+#line - "ts.syn"
+  init_condition();
+#line - "ts.cpp"
+}
+
+static void ag_rp_7(void) {
+#line - "ts.syn"
+  init_condition();
+#line - "ts.cpp"
+}
+
+static void ag_rp_8(void) {
+#line - "ts.syn"
+  include_file();
+#line - "ts.cpp"
+}
+
+static void ag_rp_9(void) {
+#line - "ts.syn"
+  undefine();
+#line - "ts.cpp"
+}
+
+static void ag_rp_10(int id) {
+#line - "ts.syn"
+  save_macro_body(id);
+#line - "ts.cpp"
+}
+
+static void ag_rp_11(void) {
+#line - "ts.syn"
+  save_sink << scanner_sink, scanner_sink = &++ta;
+#line - "ts.cpp"
+}
+
+static int ag_rp_12(void) {
+#line - "ts.syn"
+  return init_macro_def(0,0);
+#line - "ts.cpp"
+}
+
+static int ag_rp_13(int n) {
+#line - "ts.syn"
+  return init_macro_def(n,1);
+#line - "ts.cpp"
+}
+
+static int ag_rp_14(void) {
+#line - "ts.syn"
+  return 0;
+#line - "ts.cpp"
+}
+
+static int ag_rp_15(void) {
+#line - "ts.syn"
+  return 1;
+#line - "ts.cpp"
+}
+
+static int ag_rp_16(int n) {
+#line - "ts.syn"
+  return n+1;
+#line - "ts.cpp"
+}
+
+static void ag_rp_17(int c) {
+#line - "ts.syn"
+  *scanner_sink << space_op(c);
+#line - "ts.cpp"
+}
+
+static void ag_rp_18(void) {
+#line - "ts.syn"
+  *scanner_sink << op('#');
+#line - "ts.cpp"
+}
+
+static void ag_rp_19(void) {
+#line - "ts.syn"
+  *scanner_sink << name_token();
+#line - "ts.cpp"
+}
+
+static void ag_rp_20(token t) {
+#line - "ts.syn"
+  *scanner_sink << t;
+#line - "ts.cpp"
+}
+
+static void ag_rp_21(token t) {
+#line - "ts.syn"
+  expand(t,0);
+#line - "ts.cpp"
+}
+
+static void ag_rp_22(token t) {
+#line - "ts.syn"
+  *scanner_sink << t;
+#line - "ts.cpp"
+}
+
+static void ag_rp_23(token t, int n) {
+#line - "ts.syn"
+  expand(t,n);
+#line - "ts.cpp"
+}
+
+static void ag_rp_24(void) {
+#line - "ts.syn"
+  *scanner_sink << defined();
+#line - "ts.cpp"
+}
+
+static void ag_rp_25(void) {
+#line - "ts.syn"
+  *scanner_sink << defined();
+#line - "ts.cpp"
+}
+
+static token ag_rp_26(void) {
+#line - "ts.syn"
+  return id_macro();
+#line - "ts.cpp"
+}
+
+static int ag_rp_27(void) {
+#line - "ts.syn"
+  return 0;
+#line - "ts.cpp"
+}
+
+static void ag_rp_28(void) {
+#line - "ts.syn"
+  save_sink << scanner_sink, scanner_sink = &ta;
+#line - "ts.cpp"
+}
+
+static int ag_rp_29(int n) {
+#line - "ts.syn"
+  return save_sink >> scanner_sink, n;
+#line - "ts.cpp"
+}
+
+static void ag_rp_30(void) {
+#line - "ts.syn"
+  ++ta;
+#line - "ts.cpp"
+}
+
+static int ag_rp_31(void) {
+#line - "ts.syn"
+  return 1;
+#line - "ts.cpp"
+}
+
+static void ag_rp_32(int n) {
+#line - "ts.syn"
+  ++ta;
+#line - "ts.cpp"
+}
+
+static int ag_rp_33(int n) {
+#line - "ts.syn"
+  return n+1;
+#line - "ts.cpp"
+}
+
+static void ag_rp_34(int c) {
+#line - "ts.syn"
+  *scanner_sink << space_op(c);
+#line - "ts.cpp"
+}
+
+static void ag_rp_35(void) {
+#line - "ts.syn"
+  *scanner_sink << name_token();
+#line - "ts.cpp"
+}
+
+static void ag_rp_36(void) {
+#line - "ts.syn"
+  *scanner_sink << tkn(STRINGliteral);
+#line - "ts.cpp"
+}
+
+static void ag_rp_37(void) {
+#line - "ts.syn"
+  *scanner_sink << tkn(CHARACTERconstant);
+#line - "ts.cpp"
+}
+
+static void ag_rp_38(int p) {
+#line - "ts.syn"
+  *scanner_sink << op(p);
+#line - "ts.cpp"
+}
+
+static void ag_rp_39(int t) {
+#line - "ts.syn"
+  *scanner_sink << op(t);
+#line - "ts.cpp"
+}
+
+static void ag_rp_40(int t) {
+#line - "ts.syn"
+  *scanner_sink << op(t);
+#line - "ts.cpp"
+}
+
+static void ag_rp_41(int t) {
+#line - "ts.syn"
+  *scanner_sink << op(t);
+#line - "ts.cpp"
+}
+
+static void ag_rp_42(void) {
+#line - "ts.syn"
+  *scanner_sink << tkn(STRINGliteral);
+#line - "ts.cpp"
+}
+
+static void ag_rp_43(void) {
+#line - "ts.syn"
+  *scanner_sink << tkn(CHARACTERconstant);
+#line - "ts.cpp"
+}
+
+static void ag_rp_44(int p) {
+#line - "ts.syn"
+  *scanner_sink << op(p);
+#line - "ts.cpp"
+}
+
+static int ag_rp_45(void) {
+#line - "ts.syn"
+  return ' ';
+#line - "ts.cpp"
+}
+
+static void ag_rp_46(void) {
+#line - "ts.syn"
+if (nest_comments) CHANGE_REDUCTION(comment_head);
+#line - "ts.cpp"
+}
+
+static void ag_rp_47(void) {
+#line - "ts.syn"
+  *scanner_sink << op(ANDAND);
+#line - "ts.cpp"
+}
+
+static void ag_rp_48(void) {
+#line - "ts.syn"
+  *scanner_sink << op(ANDassign);
+#line - "ts.cpp"
+}
+
+static void ag_rp_49(void) {
+#line - "ts.syn"
+  *scanner_sink << op(ARROW);
+#line - "ts.cpp"
+}
+
+static void ag_rp_50(void) {
+#line - "ts.syn"
+  *scanner_sink << op(CONCAT);
+#line - "ts.cpp"
+}
+
+static void ag_rp_51(void) {
+#line - "ts.syn"
+  *scanner_sink << op(DECR);
+#line - "ts.cpp"
+}
+
+static void ag_rp_52(void) {
+#line - "ts.syn"
+  *scanner_sink << op(DIVassign);
+#line - "ts.cpp"
+}
+
+static void ag_rp_53(void) {
+#line - "ts.syn"
+  *scanner_sink << op(ELLIPSIS);
+#line - "ts.cpp"
+}
+
+static void ag_rp_54(void) {
+#line - "ts.syn"
+  *scanner_sink << op(EQ);
+#line - "ts.cpp"
+}
+
+static void ag_rp_55(void) {
+#line - "ts.syn"
+  *scanner_sink << op(ERassign);
+#line - "ts.cpp"
+}
+
+static void ag_rp_56(void) {
+#line - "ts.syn"
+  *scanner_sink << op(GE);
+#line - "ts.cpp"
+}
+
+static void ag_rp_57(void) {
+#line - "ts.syn"
+  *scanner_sink << op(ICR);
+#line - "ts.cpp"
+}
+
+static void ag_rp_58(void) {
+#line - "ts.syn"
+  *scanner_sink << op(LE);
+#line - "ts.cpp"
+}
+
+static void ag_rp_59(void) {
+#line - "ts.syn"
+  *scanner_sink << op(LS);
+#line - "ts.cpp"
+}
+
+static void ag_rp_60(void) {
+#line - "ts.syn"
+  *scanner_sink << op(LSassign);
+#line - "ts.cpp"
+}
+
+static void ag_rp_61(void) {
+#line - "ts.syn"
+  *scanner_sink << op(MODassign);
+#line - "ts.cpp"
+}
+
+static void ag_rp_62(void) {
+#line - "ts.syn"
+  *scanner_sink << op(MINUSassign);
+#line - "ts.cpp"
+}
+
+static void ag_rp_63(void) {
+#line - "ts.syn"
+  *scanner_sink << op(MULTassign);
+#line - "ts.cpp"
+}
+
+static void ag_rp_64(void) {
+#line - "ts.syn"
+  *scanner_sink << op(NE);
+#line - "ts.cpp"
+}
+
+static void ag_rp_65(void) {
+#line - "ts.syn"
+  *scanner_sink << op(ORassign);
+#line - "ts.cpp"
+}
+
+static void ag_rp_66(void) {
+#line - "ts.syn"
+  *scanner_sink << op(OROR);
+#line - "ts.cpp"
+}
+
+static void ag_rp_67(void) {
+#line - "ts.syn"
+  *scanner_sink << op(PLUSassign);
+#line - "ts.cpp"
+}
+
+static void ag_rp_68(void) {
+#line - "ts.syn"
+  *scanner_sink << op(RS);
+#line - "ts.cpp"
+}
+
+static void ag_rp_69(void) {
+#line - "ts.syn"
+  *scanner_sink << op(RSassign);
+#line - "ts.cpp"
+}
+
+static void ag_rp_70(void) {
+#line - "ts.syn"
+  *scanner_sink << tkn(FLOATconstant);
+#line - "ts.cpp"
+}
+
+static void ag_rp_71(void) {
+#line - "ts.syn"
+  sa << 'F';
+#line - "ts.cpp"
+}
+
+static void ag_rp_72(void) {
+#line - "ts.syn"
+  sa << 'L';
+#line - "ts.cpp"
+}
+
+static void ag_rp_73(void) {
+#line - "ts.syn"
+  sa << '.';
+#line - "ts.cpp"
+}
+
+static void ag_rp_74(void) {
+#line - "ts.syn"
+  sa << '.';
+#line - "ts.cpp"
+}
+
+static void ag_rp_75(int d) {
+#line - "ts.syn"
+  ++sa << '.' << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_76(int d) {
+#line - "ts.syn"
+  sa << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_77(int d) {
+#line - "ts.syn"
+  sa << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_78(int d) {
+#line - "ts.syn"
+  sa << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_79(int d) {
+#line - "ts.syn"
+  sa << '-' << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_80(int d) {
+#line - "ts.syn"
+  sa << '+' << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_81(int d) {
+#line - "ts.syn"
+  sa << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_82(void) {
+#line - "ts.syn"
+  sa << 'U';
+#line - "ts.cpp"
+}
+
+static void ag_rp_83(void) {
+#line - "ts.syn"
+  sa << 'L';
+#line - "ts.cpp"
+}
+
+static void ag_rp_84(void) {
+#line - "ts.syn"
+  *scanner_sink << tkn(OCTconstant);
+#line - "ts.cpp"
+}
+
+static void ag_rp_85(void) {
+#line - "ts.syn"
+  *scanner_sink << tkn(DECconstant);
+#line - "ts.cpp"
+}
+
+static void ag_rp_86(void) {
+#line - "ts.syn"
+  *scanner_sink << tkn(HEXconstant);
+#line - "ts.cpp"
+}
+
+static void ag_rp_87(void) {
+#line - "ts.syn"
+  ++sa << '0';
+#line - "ts.cpp"
+}
+
+static void ag_rp_88(int d) {
+#line - "ts.syn"
+  sa << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_89(int d) {
+#line - "ts.syn"
+  ++sa << "0X" << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_90(int d) {
+#line - "ts.syn"
+  sa << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_91(int d) {
+#line - "ts.syn"
+  ++sa << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_92(int d) {
+#line - "ts.syn"
+  sa << d;
+#line - "ts.cpp"
+}
+
+static void ag_rp_93(void) {
+#line - "ts.syn"
+  sa << '"';
+#line - "ts.cpp"
+}
+
+static void ag_rp_94(void) {
+#line - "ts.syn"
+  ++sa << '"';
+#line - "ts.cpp"
+}
+
+static void ag_rp_95(int c) {
+#line - "ts.syn"
+  sa << c;
+#line - "ts.cpp"
+}
+
+static void ag_rp_96(int c) {
+#line - "ts.syn"
+  sa << '\\' << c;
+#line - "ts.cpp"
+}
+
+static void ag_rp_97(void) {
+#line - "ts.syn"
+  sa << '\'';
+#line - "ts.cpp"
+}
+
+static void ag_rp_98(void) {
+#line - "ts.syn"
+  ++sa << '\'';
+#line - "ts.cpp"
+}
+
+static void ag_rp_99(int c) {
+#line - "ts.syn"
+  sa << c;
+#line - "ts.cpp"
+}
+
+static void ag_rp_100(int c) {
+#line - "ts.syn"
+  sa << '\\' << c;
+#line - "ts.cpp"
+}
+
+static void ag_rp_101(int c) {
+#line - "ts.syn"
+  ++sa << c;
+#line - "ts.cpp"
+}
+
+static void ag_rp_102(int c) {
+#line - "ts.syn"
+  sa << c;
+#line - "ts.cpp"
+}
+
+
+#ifndef AG_TRACE_FILE_NAME
+#define AG_TRACE_FILE_NAME "ts.etr"
+#endif
+
+static void ag_trace_error(void) {
+  FILE *ag_file = fopen(AG_TRACE_FILE_NAME, "w");
+  int i;
+  if (ag_file == NULL) return;
+  fprintf(ag_file, "%d\n", (PCB).ssx);
+  for (i = 0; i < (PCB).ssx; i++) fprintf(ag_file, "%d\n", (PCB).ss[i]);
+  fprintf(ag_file, "%d\n", (PCB).sn);
+  fprintf(ag_file, "%d\n", (PCB).token_number);
+  fclose(ag_file);
+}
+
+
+#define READ_COUNTS 
+#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 ts_vs_type const ag_null_value NULL_VALUE_INITIALIZER;
+
+static const unsigned char ag_rpx[] = {
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  3,  4,  5,  6,
+    7,  8,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 10, 11, 12, 13, 14,
+    0, 15, 16, 17,  0,  0, 18,  0,  0, 19,  0,  0,  0,  0,  0, 20, 21, 22,
+   23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,  0,  0, 34,  0, 35,  0,  0,
+   36, 37,  0, 38, 39, 40,  0, 41, 42, 43,  0, 44,  0,  0, 45,  0,  0,  0,
+    0,  0,  0, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
+   61, 62, 63, 64, 65, 66, 67, 68, 69, 70,  0,  0, 71, 72,  0,  0,  0,  0,
+   73,  0, 74, 75, 76, 77, 78, 79,  0,  0, 80, 81, 82, 83, 84, 85, 86,  0,
+    0, 87, 88,  0,  0, 89, 90,  0,  0, 91, 92, 93, 94, 95, 96,  0, 97, 98,
+   99,100,  0,101,102
+};
+
+static const unsigned char ag_key_itt[] = {
+ 0
+};
+
+static const unsigned short ag_key_pt[] = {
+0
+};
+
+static const unsigned char ag_key_ch[] = {
+    0, 47,255, 42, 47,255,100,110,255,102,110,255, 47,100,101,105,108,112,
+  117,255,100,110,255,102,110,255,100,101,105,108,112,117,255,105,115,255,
+  108,110,114,255,100,110,255,102,110,255, 47,100,101,105,108,112,117,255,
+  105,115,255,108,110,114,255,100,110,255,102,110,255, 47,100,101,105,108,
+  112,117,255,105,115,255,108,110,114,255,100,110,255,102,110,255,100,101,
+  105,108,112,117,255,105,115,255,108,110,114,255,100,110,255,102,110,255,
+  100,101,105,108,112,117,255,110,114,255,100,110,255,102,110,255, 47,100,
+  101,105,108,112,117,255,110,114,255,100,110,255,102,110,255,100,101,105,
+  108,112,117,255
+};
+
+static const unsigned char ag_key_act[] = {
+  0,3,4,3,3,4,3,3,4,1,3,4,3,3,3,2,3,3,3,4,3,3,4,1,3,4,3,3,2,3,3,3,4,3,3,
+  4,2,3,3,4,3,3,4,1,3,4,3,3,2,2,3,3,3,4,3,3,4,2,3,3,4,3,3,4,1,3,4,3,3,2,
+  2,3,3,3,4,3,3,4,2,3,3,4,3,3,4,1,3,4,3,2,2,3,3,3,4,3,3,4,2,3,3,4,3,3,4,
+  1,3,4,3,2,2,3,3,3,4,3,3,4,3,3,4,1,3,4,3,3,2,2,3,3,3,4,3,3,4,3,3,4,1,3,
+  4,3,2,2,3,3,3,4
+};
+
+static const unsigned char ag_key_parm[] = {
+    0,101,  0,100,101,  0, 38, 39,  0, 37, 48,  0,101, 46, 50,  0, 49, 51,
+   63,  0, 38, 39,  0, 37, 48,  0, 46, 50,  0, 49, 51, 63,  0, 45, 33,  0,
+    0, 34, 50,  0, 38, 39,  0, 37, 48,  0,101, 46,  0,  0, 49, 51, 47,  0,
+   45, 33,  0,  0, 34, 50,  0, 38, 39,  0, 37, 48,  0,101, 46,  0,  0, 49,
+   51, 63,  0, 45, 33,  0,  0, 34, 50,  0, 38, 39,  0, 37, 48,  0, 46,  0,
+    0, 49, 51, 47,  0, 45, 33,  0,  0, 34, 50,  0, 38, 39,  0, 37, 48,  0,
+   46,  0,  0, 49, 51, 63,  0, 34, 50,  0, 38, 39,  0, 37, 48,  0,101, 46,
+    0,  0, 49, 51, 63,  0, 34, 50,  0, 38, 39,  0, 37, 48,  0, 46,  0,  0,
+   49, 51, 63,  0
+};
+
+static const unsigned short ag_key_jmp[] = {
+    0,  0,  0,  2,  4,  0, 19, 22,  0,  6, 26,  0,  6,  8, 14,  9, 32, 36,
+   42,  0, 58, 61,  0, 20, 65,  0, 47, 53, 23, 71, 75, 81,  0, 94, 96,  0,
+   33, 98,102,  0,106,109,  0, 40,113,  0, 86, 88, 36, 43,119,123,129,  0,
+  145,147,  0, 54,149,153,  0,157,160,  0, 61,164,  0,137,139, 57, 64,170,
+  174,180,  0,191,193,  0, 75,195,199,  0,203,206,  0, 82,210,  0,185, 78,
+   85,216,220,226,  0,240,242,  0, 95,244,248,  0,252,255,  0,102,259,  0,
+  234, 98,105,265,269,275,  0,288,292,  0,296,299,  0,118,303,  0,280,282,
+  115,121,309,313,319,  0,330,334,  0,338,341,  0,135,345,  0,324,132,138,
+  351,355,361,  0
+};
+
+static const unsigned char ag_key_index[] = {
+    1,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  1,  1,  0,  0,  1, 12,  1,
+    1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,
+    0,  0,  1,  0,  0,  1, 26,  0,  1,  1,  0,  0,  0,  1,  1,  0,  0,  0,
+    0, 46,  0, 67,  1,  0,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0,  1, 88,
+    0,108,  0,  0,  1,  0,  0,  1,  0,  0, 46,124,  1,  1,  0,  0,  1,  1,
+    1,  0,  0,  1,  1,  1,  0,  0,  0, 88,141,  1,  1,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  1,  0,  0,  1,  1,  0,  0,
+    0,  1,  1,  0,  1
+};
+
+static const unsigned char ag_key_ends[] = {
+42,0, 47,0, 42,0, 42,0, 101,102,105,110,101,0, 114,114,111,114,0, 
+101,102,0, 100,101,102,0, 99,108,117,100,101,0, 105,110,101,0, 
+114,97,103,109,97,0, 110,100,101,102,0, 101,102,105,110,101,0, 
+114,114,111,114,0, 101,102,0, 100,101,102,0, 99,108,117,100,101,0, 
+105,110,101,0, 114,97,103,109,97,0, 110,100,101,102,0, 42,0, 
+101,102,105,110,101,0, 102,0, 101,0, 100,105,102,0, 114,111,114,0, 
+101,102,0, 100,101,102,0, 99,108,117,100,101,0, 105,110,101,0, 
+114,97,103,109,97,0, 110,100,101,102,105,110,101,0, 42,0, 
+101,102,105,110,101,0, 102,0, 101,0, 100,105,102,0, 114,111,114,0, 
+101,102,0, 100,101,102,0, 99,108,117,100,101,0, 105,110,101,0, 
+114,97,103,109,97,0, 110,100,101,102,0, 101,102,105,110,101,0, 
+102,0, 101,0, 100,105,102,0, 114,111,114,0, 101,102,0, 
+100,101,102,0, 99,108,117,100,101,0, 105,110,101,0, 
+114,97,103,109,97,0, 110,100,101,102,105,110,101,0, 
+101,102,105,110,101,0, 102,0, 101,0, 100,105,102,0, 114,111,114,0, 
+101,102,0, 100,101,102,0, 99,108,117,100,101,0, 105,110,101,0, 
+114,97,103,109,97,0, 110,100,101,102,0, 42,0, 101,102,105,110,101,0, 
+100,105,102,0, 114,111,114,0, 101,102,0, 100,101,102,0, 
+99,108,117,100,101,0, 105,110,101,0, 114,97,103,109,97,0, 
+110,100,101,102,0, 101,102,105,110,101,0, 100,105,102,0, 
+114,111,114,0, 101,102,0, 100,101,102,0, 99,108,117,100,101,0, 
+105,110,101,0, 114,97,103,109,97,0, 110,100,101,102,0, 
+};
+
+#define AG_TCV(x) ag_tcv[(x) + 1]
+
+static const unsigned char ag_tcv[] = {
+   12, 12,149,149,149,149,149,149,149,149, 96, 95, 96, 96, 96,149,149,149,
+  149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, 96,113,141,
+   31,149,111,102,145, 68, 70,112,109, 72,104,107,106,134,150,150,150,150,
+  150,150,150,126,126,149,149,110,103,105,149,149,151,151,151,151,127,118,
+  152,152,152,152,152,119,152,152,152,152,152,152,152,152,130,152,152,137,
+  152,152,149, 56,149,108,152,149,151,151,151,151,127,118,152,152,152,152,
+  152,119,152,152,152,152,152,152,152,152,130,152,152,137,152,152,149,114,
+  149,149,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+  153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+  153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+  153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+  153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+  153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+  153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+  153,153,153,153,153
+};
+
+#ifndef SYNTAX_ERROR
+#define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \
+  (PCB).error_message, (PCB).line, (PCB).column)
+#endif
+
+#ifndef FIRST_LINE
+#define FIRST_LINE 1
+#endif
+
+#ifndef FIRST_COLUMN
+#define FIRST_COLUMN 1
+#endif
+
+#ifndef PARSER_STACK_OVERFLOW
+#define PARSER_STACK_OVERFLOW {fprintf(stderr, \
+   "\nParser stack overflow, line %d, column %d\n",\
+   (PCB).line, (PCB).column);}
+#endif
+
+#ifndef REDUCTION_TOKEN_ERROR
+#define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
+    "\nReduction token error, line %d, column %d\n", \
+    (PCB).line, (PCB).column);}
+#endif
+
+
+typedef enum
+  {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key,
+   ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words;
+
+#ifndef GET_INPUT
+#define GET_INPUT ((PCB).input_code = getchar())
+#endif
+
+
+static int ag_look_ahead(void) {
+  if ((PCB).rx < (PCB).fx) {
+    return CONVERT_CASE((PCB).lab[(PCB).rx++]);
+  }
+  GET_INPUT;
+  (PCB).fx++;
+  return CONVERT_CASE((PCB).lab[(PCB).rx++] = (PCB).input_code);
+}
+
+static void ag_get_key_word(int ag_k) {
+  int save_index = (PCB).rx;
+  const  unsigned char *sp;
+  int ag_ch;
+  while (1) {
+    switch (ag_key_act[ag_k]) {
+    case ag_cf_end_key:
+      sp = ag_key_ends + ag_key_jmp[ag_k];
+      do {
+        if ((ag_ch = *sp++) == 0) {
+          int ag_k1 = ag_key_parm[ag_k];
+          int ag_k2 = ag_key_pt[ag_k1];
+          if (ag_key_itt[ag_k2 + ag_look_ahead()]) goto ag_fail;
+          (PCB).rx--;
+          (PCB).token_number = (ts_token_type) ag_key_pt[ag_k1 + 1];
+          return;
+        }
+      } while (ag_look_ahead() == ag_ch);
+      goto ag_fail;
+    case ag_end_key:
+      sp = ag_key_ends + ag_key_jmp[ag_k];
+      do {
+        if ((ag_ch = *sp++) == 0) {
+          (PCB).token_number = (ts_token_type) ag_key_parm[ag_k];
+          return;
+        }
+      } while (ag_look_ahead() == ag_ch);
+    case ag_no_match_key:
+ag_fail:
+      (PCB).rx = save_index;
+      return;
+    case ag_cf_set_key: {
+      int ag_k1 = ag_key_parm[ag_k];
+      int ag_k2 = ag_key_pt[ag_k1];
+      ag_k = ag_key_jmp[ag_k];
+      if (ag_key_itt[ag_k2 + (ag_ch = ag_look_ahead())]) break;
+      save_index = --(PCB).rx;
+      (PCB).token_number = (ts_token_type) ag_key_pt[ag_k1+1];
+      break;
+    }
+    case ag_set_key:
+      save_index = (PCB).rx;
+      (PCB).token_number = (ts_token_type) ag_key_parm[ag_k];
+    case ag_jmp_key:
+      ag_k = ag_key_jmp[ag_k];
+      ag_ch = ag_look_ahead();
+      break;
+    case ag_accept_key:
+      (PCB).token_number =  (ts_token_type) ag_key_parm[ag_k];
+      return;
+    case ag_cf_accept_key: {
+      int ag_k1 = ag_key_parm[ag_k];
+      int ag_k2 = ag_key_pt[ag_k1];
+      if (ag_key_itt[ag_k2 + ag_look_ahead()]) (PCB).rx = save_index;
+      else {
+        (PCB).rx--;
+        (PCB).token_number =  (ts_token_type) ag_key_pt[ag_k1+1];
+      }
+      return;
+    }
+    default:
+      /* not reachable; here to suppress compiler warnings */
+      goto ag_fail;
+    }
+    if (ag_ch <= 255) while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+    if (ag_ch > 255 || ag_key_ch[ag_k] != ag_ch) {
+      (PCB).rx = save_index;
+      return;
+    }
+  }
+}
+
+
+#ifndef AG_NEWLINE
+#define AG_NEWLINE 10
+#endif
+
+#ifndef AG_RETURN
+#define AG_RETURN 13
+#endif
+
+#ifndef AG_FORMFEED
+#define AG_FORMFEED 12
+#endif
+
+#ifndef AG_TABCHAR
+#define AG_TABCHAR 9
+#endif
+
+static void ag_track(void) {
+  int ag_k = 0;
+  while (ag_k < (PCB).rx) {
+    int ag_ch = (PCB).lab[ag_k++];
+    switch (ag_ch) {
+    case AG_NEWLINE:
+      (PCB).column = 1, (PCB).line++;
+    case AG_RETURN:
+    case AG_FORMFEED:
+      break;
+    case AG_TABCHAR:
+      (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING);
+      break;
+    default:
+      (PCB).column++;
+    }
+  }
+  ag_k = 0;
+  while ((PCB).rx < (PCB).fx) (PCB).lab[ag_k++] = (PCB).lab[(PCB).rx++];
+  (PCB).fx = ag_k;
+  (PCB).rx = 0;
+}
+
+
+static void ag_prot(void) {
+  int ag_k;
+  ag_k = 128 - ++(PCB).btsx;
+  if (ag_k <= (PCB).ssx) {
+    ag_trace_error();
+    (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];
+  (PCB).cs[ag_k] = (PCB).cs[(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).cs[(PCB).ssx] = (PCB).cs[ag_k];
+  }
+  (PCB).token_number = (ts_token_type) (PCB).drt;
+  (PCB).ssx = (PCB).dssx;
+  (PCB).sn = (PCB).dsn;
+  (PCB).drt = -1;
+}
+
+
+
+static const int ag_rtt[] = {
+   26, 28,  0, 26, 28,  0, 26, 28,  0, 27, 30,  0, 78, 79, 80, 82,  0, 97,
+   99,  0
+};
+
+static const unsigned char ag_tstt[] = {
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,95,72,70,68,56,31,12,0,2,5,6,7,8,9,
+  10,11,13,14,18,19,20,21,24,26,28,59,62,74,75,76,77,78,79,80,82,89,90,91,
+  97,99,115,117,120,122,123,124,131,132,133,136,140,144,
+137,0,
+150,134,127,126,107,0,121,
+150,134,127,126,0,121,
+151,150,134,127,126,118,0,
+150,134,127,126,107,0,121,
+150,134,126,107,0,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,101,100,96,95,72,70,68,56,31,0,97,99,
+114,103,0,
+103,0,
+103,0,
+103,0,
+110,103,0,
+109,103,0,
+105,103,0,
+103,0,
+103,0,
+150,134,126,107,0,
+103,0,
+105,104,103,0,
+103,102,0,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,72,70,68,56,31,0,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,72,70,68,56,31,0,
+152,151,150,137,134,130,127,126,119,118,0,
+130,119,0,129,
+130,119,0,129,
+130,119,0,129,
+119,118,0,116,
+95,0,
+101,96,68,0,4,14,32,97,98,99,
+101,96,68,0,4,14,32,97,98,99,
+95,0,5,13,
+95,0,5,13,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,95,72,70,68,56,31,12,0,1,14,59,66,67,
+  73,74,75,76,89,90,91,97,99,115,117,120,122,123,124,131,132,133,136,140,
+  144,
+101,96,95,63,51,50,49,48,46,39,38,37,31,12,0,4,14,32,97,98,99,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,56,31,0,2,14,18,59,74,75,76,
+  77,78,79,80,82,89,90,91,97,99,115,117,120,122,123,124,131,132,133,136,
+  140,144,
+101,96,95,0,13,14,15,16,17,97,99,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,56,31,0,2,14,59,74,75,76,77,
+  78,79,80,82,89,90,91,97,99,115,117,120,122,123,124,131,132,133,136,140,
+  144,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,56,31,0,2,6,8,14,18,19,20,
+  21,24,26,28,59,62,74,75,76,77,78,79,80,82,89,90,91,97,99,115,117,120,
+  122,123,124,131,132,133,136,140,144,
+95,0,5,13,
+12,0,
+151,150,134,127,126,118,0,
+150,134,126,109,104,0,128,
+150,134,126,0,
+150,134,126,0,
+150,134,126,0,
+103,0,
+103,0,
+107,0,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,95,72,70,68,56,31,0,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,95,72,70,68,56,31,0,
+101,96,0,14,97,99,
+152,151,137,130,127,119,118,0,59,
+68,0,
+68,0,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,72,70,68,56,31,0,22,25,27,29,30,35,
+  36,54,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,56,31,0,2,6,8,14,18,19,20,
+  21,22,23,24,26,28,44,59,62,74,75,76,77,78,79,80,82,89,90,91,97,99,115,
+  117,120,122,123,124,131,132,133,136,140,144,
+152,151,150,137,134,130,127,126,119,118,0,
+31,0,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,56,31,0,1,14,59,73,74,75,76,
+  89,90,91,97,99,115,117,120,122,123,124,131,132,133,136,140,144,
+95,63,51,50,49,48,46,39,38,37,12,0,60,64,65,
+31,0,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,56,31,0,2,14,59,74,75,76,77,
+  78,79,80,82,89,90,91,97,99,115,117,120,122,123,124,131,132,133,136,140,
+  144,
+101,96,95,0,13,14,15,97,99,
+150,134,126,0,
+150,134,126,0,
+152,151,150,137,134,130,127,126,119,118,0,
+152,151,137,130,127,119,118,101,96,0,4,14,32,97,98,99,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,70,68,31,0,4,14,32,97,98,99,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,95,72,70,68,56,31,0,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,95,72,70,68,56,31,0,41,42,43,
+95,0,5,13,
+95,0,5,13,
+101,96,95,51,50,49,48,47,46,45,39,38,37,34,33,0,4,14,32,97,98,99,
+95,0,5,13,
+101,96,95,63,51,50,49,48,46,45,39,38,37,34,33,31,0,4,14,32,97,98,99,
+101,96,0,4,14,97,98,99,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,95,72,70,68,56,31,12,0,41,42,43,
+101,96,0,4,14,97,98,99,
+101,96,0,4,14,97,98,99,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,56,31,0,2,14,18,59,74,75,76,
+  77,78,79,80,82,89,90,91,97,99,115,117,120,122,123,124,131,132,133,136,
+  140,144,
+101,96,0,4,14,97,98,99,
+101,96,0,4,14,97,98,99,
+152,151,137,130,127,119,118,0,59,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,70,68,31,0,81,83,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,95,72,70,68,56,31,0,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,72,70,68,56,31,0,41,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,72,70,68,56,31,0,22,29,35,36,44,54,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,56,31,0,2,6,8,14,18,19,20,
+  21,22,24,26,28,59,62,74,75,76,77,78,79,80,82,89,90,91,97,99,115,117,120,
+  122,123,124,131,132,133,136,140,144,
+95,51,50,49,48,47,46,45,39,38,37,34,33,0,40,52,53,61,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,72,70,68,56,31,0,22,29,35,36,44,54,
+95,63,51,50,49,48,46,45,39,38,37,34,33,0,60,64,65,
+152,151,137,130,127,119,118,0,59,
+152,151,137,130,127,119,118,0,59,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,56,31,0,2,14,59,74,75,76,77,
+  78,79,80,82,89,90,91,97,99,115,117,120,122,123,124,131,132,133,136,140,
+  144,
+152,151,137,130,127,119,118,0,59,
+152,151,137,130,127,119,118,0,59,
+152,151,150,137,134,130,127,126,119,118,101,96,70,0,4,14,32,97,98,99,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,68,31,0,84,85,
+70,0,
+101,96,95,51,50,49,48,47,46,45,39,38,37,34,33,0,4,14,32,97,98,99,
+101,96,95,63,51,50,49,48,46,39,38,37,34,31,0,4,14,32,97,98,99,
+101,96,0,4,14,97,98,99,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,56,31,0,2,14,18,59,74,75,76,
+  77,78,79,80,82,89,90,91,97,99,115,117,120,122,123,124,131,132,133,136,
+  140,144,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,95,72,70,68,56,31,0,41,42,43,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,95,72,70,68,56,31,0,41,42,43,
+101,96,95,12,0,4,14,32,97,98,99,
+101,96,95,0,4,14,32,97,98,99,
+101,96,95,0,4,14,32,97,98,99,
+153,152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,
+  109,108,107,106,105,104,103,102,96,95,72,70,68,56,31,0,41,42,43,
+152,151,150,137,134,130,127,126,119,118,68,0,
+152,151,150,137,134,130,127,126,119,118,101,96,95,12,0,4,14,32,97,98,99,
+152,151,150,137,134,130,127,126,119,118,101,96,95,0,4,14,32,97,98,99,
+152,151,150,137,134,130,127,126,119,118,101,96,95,0,4,14,32,97,98,99,
+70,0,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,68,31,0,3,59,75,76,86,89,90,91,93,115,117,
+  120,122,123,124,131,132,133,136,140,144,
+72,0,
+95,51,50,49,48,47,46,45,39,38,37,34,33,0,40,52,53,
+95,63,51,50,49,48,46,39,38,37,34,0,60,64,65,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,56,31,0,2,14,59,74,75,76,77,
+  78,79,80,82,89,90,91,97,99,115,117,120,122,123,124,131,132,133,136,140,
+  144,
+152,151,137,130,127,119,118,101,96,70,0,4,14,32,97,98,99,
+114,103,0,
+103,0,
+103,0,
+103,0,
+110,103,0,
+109,103,0,
+105,103,0,
+103,0,
+103,0,
+150,134,126,107,0,
+103,0,
+105,104,103,0,
+103,102,0,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,72,70,68,31,0,3,14,59,75,76,88,89,90,
+  91,93,97,99,115,117,120,122,123,124,131,132,133,136,140,144,
+152,151,150,137,134,130,127,126,119,118,0,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,68,31,0,3,14,59,75,76,88,89,90,91,93,
+  97,99,115,117,120,122,123,124,131,132,133,136,140,144,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,68,31,0,4,14,32,97,98,99,
+152,151,137,130,127,119,118,70,0,59,69,71,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,68,31,0,87,
+152,151,150,137,134,130,127,126,119,118,0,
+101,96,72,70,0,4,14,32,97,98,99,
+70,0,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,68,31,0,3,59,75,76,86,89,90,91,93,115,117,
+  120,122,123,124,131,132,133,136,140,144,
+72,0,
+152,151,150,149,145,141,137,134,130,127,126,119,118,114,113,112,111,110,109,
+  108,107,106,105,104,103,102,101,96,68,31,0,3,14,59,75,76,88,89,90,91,93,
+  97,99,115,117,120,122,123,124,131,132,133,136,140,144,
+152,151,137,130,127,119,118,101,96,0,4,14,32,97,98,99,
+152,151,137,130,127,119,118,0,59,
+152,151,150,137,134,130,127,126,119,118,0,
+
+};
+
+
+static unsigned const char ag_astt[2705] = {
+  2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,2,2,2,1,1,8,7,1,
+  1,1,0,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,1,1,2,2,3,2,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,4,10,10,1,10,2,7,1,10,10,1,10,5,1,10,10,10,10,10,10,5,10,10,
+  1,10,2,5,1,10,10,2,3,5,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,1,3,3,3,3,3,3,3,3,7,2,1,2,2,4,2,4,2,4,2,4,1,2,4,2,2,4,1,2,4,2,4,2,4,2,2,
+  2,1,4,2,4,2,2,2,4,2,2,4,10,10,10,10,10,2,10,10,10,10,10,10,10,10,10,10,10,
+  10,10,10,10,10,10,10,10,10,10,10,10,10,10,1,10,7,10,10,10,10,10,10,2,10,10,
+  10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,1,10,7,
+  10,10,10,10,10,10,10,10,10,10,4,2,2,4,3,2,2,4,3,2,2,4,3,2,2,5,2,3,7,1,1,8,
+  7,1,1,1,2,1,1,1,1,8,7,1,1,1,2,1,1,1,7,1,1,1,7,1,1,2,2,2,2,2,2,2,1,2,2,2,2,
+  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,2,2,1,1,5,7,1,2,1,1,2,3,3,3,3,2,2,3,2,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,8,8,8,8,8,8,8,8,8,2,5,7,1,1,1,2,1,1,2,2,2,
+  2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,2,2,1,1,7,1,3,1,1,3,3,
+  3,3,2,2,1,1,2,2,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,3,2,1,2,2,2,
+  2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,2,2,1,1,4,3,3,1,3,3,3,
+  3,2,2,1,1,2,2,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,3,2,2,2,1,1,5,1,1,3,3,1,3,3,1,1,1,1,1,1,3,3,3,3,2,
+  2,1,1,2,2,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,3,1,3,7,2,2,2,2,2,2,7,8,8,8,1,
+  1,7,1,10,10,10,5,10,10,10,5,10,10,10,5,2,4,2,4,2,7,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,3,2,2,2,2,2,7,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,3,2,2,2,2,2,7,1,9,5,3,2,1,2,2,2,2,2,2,2,5,1,1,
+  7,1,4,1,1,1,1,1,1,1,1,1,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,
+  3,1,3,3,3,3,1,1,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,
+  2,2,1,1,7,1,1,3,3,1,3,3,1,3,1,1,1,1,1,1,1,3,3,3,3,2,2,1,1,2,2,3,2,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,10,10,10,10,10,10,10,10,10,10,4,2,4,2,2,2,2,2,2,2,1,2,2,
+  2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,5,3,2,1,3,3,3,3,2,2,3,2,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,2,1,1,1,1,5,7,1,1,3,2,7,2,2,2,2,2,2,2,1,2,
+  2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,2,2,1,1,4,3,3,1,3,3,3,3,2,2,1,1,2,
+  2,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,5,3,3,3,2,1,2,2,2,7,2,2,2,7,10,10,10,
+  10,10,10,10,10,10,10,4,8,8,8,8,8,8,8,1,1,7,1,1,1,2,1,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,1,1,5,8,8,7,1,1,1,2,1,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,3,3,3,3,3,3,7,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,7,1,1,3,1,7,1,1,1,7,1,1,1,1,
+  5,8,8,8,8,8,8,8,8,8,8,8,8,7,1,1,1,2,1,1,1,7,1,1,1,1,5,8,8,8,8,8,8,8,8,8,8,
+  8,8,2,7,1,1,1,2,1,1,1,1,7,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,7,1,1,3,1,1,7,1,1,2,1,1,1,1,7,2,1,2,1,1,2,
+  2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,2,2,1,1,7,1,3,1,1,
+  3,3,3,3,2,2,1,1,2,2,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,2,1,1,1,1,7,1,
+  1,2,1,1,2,2,2,2,2,2,2,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,7,1,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,3,
+  3,3,3,3,3,7,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,
+  1,9,5,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  7,3,3,3,1,3,1,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,2,
+  2,1,1,7,1,1,3,3,1,3,3,1,3,1,1,1,1,1,3,3,3,3,2,2,1,1,2,2,3,2,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,7,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,1,1,1,1,1,1,7,3,3,3,1,3,1,5,1,1,1,1,2,1,1,1,1,
+  1,1,1,7,1,1,3,2,2,2,2,2,2,2,7,1,2,2,2,2,2,2,2,7,1,2,2,2,2,2,2,2,1,2,2,2,2,
+  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,2,2,1,1,4,3,3,1,3,3,3,3,2,2,1,1,2,2,3,2,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,7,1,2,2,2,2,2,2,2,7,1,10,10,10,10,
+  10,10,10,10,10,10,1,1,8,7,1,1,1,2,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,7,1,1,2,7,1,1,5,8,8,8,8,8,8,8,8,8,8,8,8,7,1,1,1,2,1,1,
+  1,1,5,8,8,8,8,8,8,8,8,8,8,2,7,1,1,1,2,1,1,1,1,7,2,1,2,1,1,2,2,2,2,2,2,2,1,
+  2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,2,2,1,1,7,1,3,1,1,3,3,3,3,2,2,1,
+  1,2,2,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,7,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,5,1,1,1,1,1,7,1,1,3,1,1,5,5,7,3,1,3,2,1,1,1,1,5,7,3,1,
+  3,2,1,1,1,1,5,7,3,1,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,5,1,1,1,1,1,7,1,1,3,10,10,10,10,10,10,10,10,10,10,1,4,10,10,10,
+  10,10,10,10,10,10,10,1,1,5,5,7,2,1,2,2,1,1,10,10,10,10,10,10,10,10,10,10,1,
+  1,5,7,2,1,2,2,1,1,10,10,10,10,10,10,10,10,10,10,1,1,5,7,2,1,2,2,1,1,2,7,2,
+  2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,7,1,1,3,3,1,2,2,3,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,4,5,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,3,5,1,1,1,1,2,
+  1,1,1,1,1,7,1,1,3,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,
+  2,2,2,1,1,4,3,3,1,3,3,3,3,2,2,1,1,2,2,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,8,8,8,
+  8,8,8,8,1,1,5,7,1,1,1,2,1,1,2,2,4,2,4,2,4,2,4,1,2,4,2,2,4,1,2,4,2,4,2,4,2,
+  2,2,1,4,2,4,2,2,2,4,2,2,4,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,2,10,2,2,1,7,3,2,1,3,3,3,2,2,3,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,10,10,
+  10,10,10,10,10,10,10,10,4,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,2,2,1,4,3,2,1,3,3,3,2,2,3,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,5,5,7,1,1,1,2,1,1,2,2,2,2,2,2,
+  2,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,7,1,10,
+  10,10,10,10,10,10,10,10,10,4,1,1,8,5,7,1,1,1,2,1,1,2,7,2,2,2,2,2,2,2,1,2,2,
+  2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,7,1,1,3,3,1,2,2,3,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,5,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,4,3,
+  2,1,3,3,3,2,2,3,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,8,8,8,8,8,8,8,1,1,7,1,1,1,2,
+  1,1,2,2,2,2,2,2,2,7,1,10,10,10,10,10,10,10,10,10,10,4
+};
+
+
+static const unsigned char ag_pstt[] = {
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,102,36,137,137,137,28,34,40,0,37,38,33,0,39,39,38,40,36,
+  102,37,39,39,32,31,32,31,23,35,101,103,104,100,105,106,30,29,134,135,
+  101,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+41,199,
+186,186,42,186,180,2,43,
+184,184,42,184,176,44,
+204,204,204,204,204,204,201,
+208,208,42,208,182,205,45,
+200,200,185,181,197,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+  146,146,146,146,146,146,146,146,7,144,146,146,146,146,146,146,146,7,147,
+  7,
+167,166,137,
+165,137,
+164,137,
+162,137,
+46,159,137,
+158,168,137,
+47,157,137,
+156,137,
+155,137,
+183,183,183,48,137,
+153,137,
+150,152,163,137,
+149,148,137,
+216,216,216,216,216,214,216,216,216,216,216,216,216,216,216,216,216,216,216,
+  216,216,216,216,216,216,216,216,216,216,216,216,49,216,21,
+211,211,211,211,211,211,209,211,211,211,211,211,211,211,211,211,211,211,211,
+  211,211,211,211,211,211,211,211,211,211,211,211,50,211,22,
+220,220,220,220,220,220,220,220,220,220,111,
+192,193,196,202,
+192,193,195,206,
+192,193,194,198,
+175,174,173,171,
+138,28,
+7,51,53,29,52,51,53,140,51,7,
+7,51,54,30,54,51,54,140,51,7,
+36,31,55,36,
+36,32,56,36,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,93,83,137,137,137,28,58,83,33,59,93,57,59,85,94,95,97,98,
+  134,135,95,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+7,51,31,60,60,60,60,60,60,60,60,60,151,31,34,60,51,60,140,51,7,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,102,137,137,137,28,61,35,62,102,62,23,101,103,104,100,105,
+  106,30,29,134,135,101,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+7,63,63,13,63,63,63,63,15,140,7,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,102,137,137,137,28,61,18,17,102,23,101,103,104,100,105,
+  106,30,29,134,135,101,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,102,137,137,137,28,34,7,37,33,2,102,37,2,2,32,31,32,31,23,
+  35,101,103,104,100,105,106,30,29,134,135,101,140,7,27,27,3,2,5,6,26,25,
+  24,4,22,21,
+36,6,3,36,
+8,40,
+203,203,203,203,203,203,41,
+64,64,64,64,65,42,64,
+191,191,191,178,
+191,191,191,177,
+191,191,191,179,
+161,160,
+170,169,
+154,48,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+  217,217,217,217,217,217,217,217,217,218,217,217,217,217,217,49,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+  212,212,212,212,212,212,212,212,212,213,212,212,212,212,212,50,
+7,142,143,142,140,7,
+219,219,219,219,219,219,219,32,66,
+67,53,
+68,107,
+70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
+  70,70,70,70,70,70,69,73,55,23,72,27,29,30,29,71,70,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,102,137,137,137,28,75,56,37,33,26,102,37,26,26,32,21,74,
+  31,32,31,74,23,35,101,103,104,100,105,106,30,29,134,135,101,140,7,27,27,
+  3,2,5,6,26,25,24,4,22,21,
+220,220,220,220,220,220,220,220,220,220,99,
+151,96,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,93,137,137,137,28,58,84,82,93,57,94,95,97,98,134,135,95,
+  140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+78,78,77,77,77,86,76,81,82,79,78,60,80,77,80,
+151,61,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,102,137,137,137,28,61,73,17,102,23,101,103,104,100,105,
+  106,30,29,134,135,101,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+7,12,12,14,12,12,12,140,7,
+190,190,190,64,
+187,187,187,65,
+220,220,220,220,220,220,220,220,220,220,110,
+83,83,83,83,83,83,83,7,51,67,83,51,83,140,51,7,
+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,7,51,31,84,84,68,84,51,84,140,51,7,
+66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,
+  66,66,66,66,66,66,66,66,66,69,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+  86,86,86,43,86,86,86,85,86,70,86,86,62,
+36,71,87,36,
+36,72,88,36,
+7,51,31,89,89,89,89,89,89,89,89,89,89,89,89,73,89,51,89,140,51,7,
+36,74,90,36,
+7,51,31,91,91,91,91,91,91,91,91,91,91,91,91,151,75,91,51,91,140,51,7,
+7,51,76,92,51,140,51,7,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+  86,86,86,43,86,86,86,85,86,43,77,86,86,79,
+7,51,78,93,51,140,51,7,
+7,51,79,71,51,140,51,7,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,102,137,137,137,28,61,80,94,102,94,23,101,103,104,100,105,
+  106,30,29,134,135,101,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+7,51,81,95,51,140,51,7,
+7,51,82,96,51,140,51,7,
+219,219,219,219,219,219,219,83,97,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+  113,113,113,113,113,113,113,112,113,113,84,99,98,
+64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
+  64,64,64,64,64,64,64,64,64,85,
+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,42,85,42,44,42,
+70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
+  70,70,70,70,70,70,69,100,87,37,46,46,71,47,70,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,102,137,137,137,28,101,88,37,33,34,102,37,34,34,32,24,31,
+  32,31,23,35,101,103,104,100,105,106,30,29,134,135,101,140,7,27,27,3,2,5,
+  6,26,25,24,4,22,21,
+59,104,104,104,104,104,104,102,105,105,105,106,107,89,105,104,61,103,
+70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
+  70,70,70,70,70,70,69,100,90,22,50,50,71,49,70,
+78,78,77,77,77,86,76,109,81,82,79,106,108,91,80,77,80,
+219,219,219,219,219,219,219,92,110,
+219,219,219,219,219,219,219,93,111,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,102,137,137,137,28,61,69,17,102,23,101,103,104,100,105,
+  106,30,29,134,135,101,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+219,219,219,219,219,219,219,95,112,
+219,219,219,219,219,219,219,96,113,
+220,220,220,220,220,220,220,220,220,220,7,51,114,97,114,51,114,140,51,7,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+  115,115,115,115,115,115,115,115,115,98,116,115,
+108,99,
+7,51,31,117,117,117,117,117,117,117,117,117,117,117,117,100,117,51,117,140,
+  51,7,
+7,51,31,118,118,118,118,118,118,118,118,118,118,151,101,118,51,118,140,51,7,
+7,51,102,72,51,140,51,7,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,102,137,137,137,28,61,103,119,102,119,23,101,103,104,100,
+  105,106,30,29,134,135,101,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+  86,86,86,43,86,86,86,85,86,104,86,86,60,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+  86,86,86,43,86,86,86,85,86,105,86,86,45,
+7,51,31,31,106,35,51,35,140,51,7,
+7,51,31,107,33,51,33,140,51,7,
+7,51,31,108,52,51,52,140,51,7,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+  86,86,86,43,86,86,86,85,86,109,86,86,51,
+220,220,220,220,220,220,220,220,220,220,120,87,
+220,220,220,220,220,220,220,220,220,220,7,51,31,31,111,74,51,74,140,51,7,
+220,220,220,220,220,220,220,220,220,220,7,51,31,112,68,51,68,140,51,7,
+220,220,220,220,220,220,220,220,220,220,7,51,31,113,67,51,67,140,51,7,
+109,114,
+219,219,207,129,215,210,219,1,219,219,207,219,219,121,122,123,124,125,126,
+  128,130,131,127,132,129,133,131,61,115,136,135,124,125,136,126,127,128,
+  134,27,27,3,2,5,6,26,25,24,4,22,21,
+137,114,
+59,104,104,104,104,104,104,109,105,105,105,106,108,117,105,104,61,
+78,78,77,77,77,86,76,81,82,79,106,118,80,77,80,
+219,219,207,137,215,210,219,1,219,219,207,219,219,8,9,10,11,12,13,15,17,18,
+  14,19,16,20,7,102,137,137,137,28,61,70,17,102,23,101,103,104,100,105,
+  106,30,29,134,135,101,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+138,138,138,138,138,138,138,7,51,31,120,138,51,138,140,51,7,
+167,166,129,
+165,129,
+164,129,
+162,129,
+46,159,129,
+158,168,129,
+47,157,129,
+156,129,
+155,129,
+183,183,183,48,129,
+153,129,
+150,152,163,129,
+149,148,129,
+219,219,207,129,215,210,219,1,219,219,207,219,219,121,122,123,124,125,126,
+  128,130,131,127,132,129,133,7,121,133,130,131,61,134,132,121,135,124,
+  125,132,126,127,128,134,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+220,220,220,220,220,220,220,220,220,220,123,
+219,219,207,129,215,210,219,1,219,219,207,219,219,121,122,123,124,125,126,
+  128,130,131,127,132,129,133,7,121,131,61,116,120,121,135,124,125,120,
+  126,127,128,134,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+  31,7,51,31,31,137,139,51,139,140,51,7,
+219,219,219,219,219,219,219,89,138,140,142,141,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+  117,117,117,117,117,117,117,117,117,139,143,
+220,220,220,220,220,220,220,220,220,220,91,
+7,51,144,31,141,144,51,144,140,51,7,
+88,142,
+219,219,207,129,215,210,219,1,219,219,207,219,219,121,122,123,124,125,126,
+  128,130,131,127,132,129,133,131,61,143,145,135,124,125,145,126,127,128,
+  134,27,27,3,2,5,6,26,25,24,4,22,21,
+146,90,
+219,219,207,129,215,210,219,1,219,219,207,219,219,121,122,123,124,125,126,
+  128,130,131,127,132,129,133,7,121,131,61,118,120,121,135,124,125,120,
+  126,127,128,134,140,7,27,27,3,2,5,6,26,25,24,4,22,21,
+147,147,147,147,147,147,147,7,51,146,147,51,147,140,51,7,
+219,219,219,219,219,219,219,147,148,
+220,220,220,220,220,220,220,220,220,220,92,
+
+};
+
+
+static const unsigned short ag_sbt[] = {
+     0,  80,  82,  89,  95, 102, 109, 114, 153, 156, 158, 160, 162, 165,
+   168, 171, 173, 175, 180, 182, 186, 189, 223, 257, 268, 272, 276, 280,
+   284, 286, 296, 306, 310, 314, 376, 397, 460, 471, 533, 605, 609, 611,
+   618, 625, 629, 633, 637, 639, 641, 643, 678, 713, 719, 728, 730, 732,
+   774, 849, 860, 862, 920, 935, 937, 999,1008,1012,1016,1027,1043,1081,
+  1116,1154,1158,1162,1184,1188,1211,1219,1258,1266,1274,1337,1345,1353,
+  1362,1394,1429,1464,1504,1577,1595,1635,1652,1661,1670,1732,1741,1750,
+  1770,1801,1803,1825,1846,1854,1917,1955,1993,2004,2014,2024,2062,2074,
+  2095,2115,2135,2137,2187,2189,2206,2221,2283,2300,2303,2305,2307,2309,
+  2312,2315,2318,2320,2322,2327,2329,2333,2336,2393,2404,2459,2496,2508,
+  2538,2549,2560,2562,2612,2614,2669,2685,2694,2705
+};
+
+
+static const unsigned short ag_sbe[] = {
+    35,  81,  87,  93, 101, 107, 113, 150, 155, 157, 159, 161, 164, 167,
+   170, 172, 174, 179, 181, 185, 188, 222, 256, 267, 270, 274, 278, 282,
+   285, 289, 299, 307, 311, 349, 390, 430, 463, 504, 566, 606, 610, 617,
+   623, 628, 632, 636, 638, 640, 642, 677, 712, 715, 726, 729, 731, 765,
+   807, 859, 861, 895, 931, 936, 970,1002,1011,1015,1026,1036,1074,1115,
+  1150,1155,1159,1177,1185,1204,1213,1254,1260,1268,1307,1339,1347,1360,
+  1391,1428,1462,1497,1537,1590,1628,1648,1659,1668,1703,1739,1748,1763,
+  1798,1802,1818,1839,1848,1887,1951,1989,1997,2007,2017,2058,2073,2088,
+  2108,2128,2136,2165,2188,2202,2217,2254,2293,2302,2304,2306,2308,2311,
+  2314,2317,2319,2321,2326,2328,2332,2335,2368,2403,2434,2489,2504,2536,
+  2548,2553,2561,2590,2613,2644,2678,2692,2704,2705
+};
+
+
+static const unsigned char ag_fl[] = {
+  1,1,2,2,1,0,1,1,2,1,1,1,2,0,1,2,1,2,1,1,1,3,5,3,5,1,3,3,1,3,3,0,1,4,3,
+  4,1,3,1,1,1,1,2,0,1,4,3,3,1,3,3,4,4,1,1,1,1,1,1,0,2,3,2,1,2,1,2,6,6,4,
+  4,2,2,2,6,1,1,1,0,2,3,1,2,0,1,2,3,5,9,0,2,1,5,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,2,6,7,3,1,0,0,2,0,2,0,5,1,2,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,2,1,
+  1,1,2,1,2,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,2,1,0,1,
+  1,1,2,2,2,2,2,2,2,2,2,2,3,0,1,3,2,1,1,1,1,1,1,2,1,2,1,2,3,2,1,2,1,2,2,
+  1,2,3,3,2,1,2,3,3,1,2,1
+};
+
+static const unsigned char ag_ptt[] = {
+    0,  9,  9, 10, 10, 11, 11, 11,  7, 15, 15, 16, 16, 17, 17,  5, 18, 18,
+    8,  8,  8, 20, 20, 20, 20, 21, 21, 21, 24, 24, 24, 32, 32, 25, 25, 22,
+   29, 29, 40, 40, 40, 42, 42, 43, 43, 36, 36, 36, 23, 23, 23, 44, 44, 52,
+   52, 52, 52, 52, 52, 53, 53, 35, 35, 41, 41, 54, 54, 26, 26, 26, 27, 60,
+   61, 19, 19, 64, 64, 64, 65, 65, 19, 66, 66, 67, 67, 19, 62,  6,  6, 69,
+   69, 71, 71,  1,  1,  1,  1,  1,  1, 73,  2,  2,  2,  2,  2, 77, 77, 77,
+   77, 77, 77, 78, 81, 83, 81, 85, 84, 87, 84, 86, 86, 88, 88,  3,  3,  3,
+    3,  3,  3,  3,  3, 93, 93, 93, 74, 74, 74, 74, 74, 14, 14, 98, 98,  4,
+   97, 99, 99, 97, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+   91, 91, 91, 91, 91, 91, 91, 91, 91, 75,115,116,116,116,117,117,117,117,
+  120,120,120,120,120,122,122,121,128,128,121,121,129,129, 76, 76, 76,131,
+  131,124,124,133,133,136,136,132,132,123,123, 89,140,140,140,140, 90,144,
+  144,144,144, 59, 59, 13
+};
+
+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 ts_change_reduction(ts_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((ts_token_type) *ag_tp)) ag_tp++;
+  (PCB).reduction_token = (ts_token_type) *ag_tp;
+}
+
+
+
+static void ag_ra(void)
+{
+  switch(ag_rpx[(PCB).ag_ap]) {
+    case 1: ag_rp_1(); break;
+    case 2: ag_default(&ag_rtt[0]); ag_rp_2(); break;
+    case 3: ag_default(&ag_rtt[3]); ag_rp_3(); break;
+    case 4: ag_default(&ag_rtt[6]); ag_rp_4(); break;
+    case 5: ag_default(&ag_rtt[9]); 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(V(0,(int *))); break;
+    case 11: ag_rp_11(); break;
+    case 12: V(0,(int *)) = ag_rp_12(); break;
+    case 13: V(0,(int *)) = ag_rp_13(V(7,(int *))); break;
+    case 14: V(0,(int *)) = ag_rp_14(); break;
+    case 15: V(0,(int *)) = ag_rp_15(); break;
+    case 16: V(0,(int *)) = ag_rp_16(V(0,(int *))); break;
+    case 17: ag_rp_17(V(0,(int *))); break;
+    case 18: ag_rp_18(); break;
+    case 19: ag_rp_19(); break;
+    case 20: ag_rp_20(V(0,(token *))); break;
+    case 21: ag_rp_21(V(0,(token *))); break;
+    case 22: ag_rp_22(V(0,(token *))); break;
+    case 23: ag_rp_23(V(0,(token *)), V(4,(int *))); break;
+    case 24: ag_rp_24(); break;
+    case 25: ag_rp_25(); break;
+    case 26: ag_default(&ag_rtt[12]); V(0,(token *)) = ag_rp_26(); break;
+    case 27: V(0,(int *)) = ag_rp_27(); break;
+    case 28: ag_rp_28(); break;
+    case 29: V(0,(int *)) = ag_rp_29(V(1,(int *))); break;
+    case 30: ag_rp_30(); break;
+    case 31: V(0,(int *)) = ag_rp_31(); break;
+    case 32: ag_rp_32(V(-3,(int *))); break;
+    case 33: V(0,(int *)) = ag_rp_33(V(0,(int *))); break;
+    case 34: ag_rp_34(V(0,(int *))); break;
+    case 35: ag_rp_35(); break;
+    case 36: ag_rp_36(); break;
+    case 37: ag_rp_37(); break;
+    case 38: ag_rp_38(V(0,(int *))); break;
+    case 39: ag_rp_39(V(1,(int *))); break;
+    case 40: ag_rp_40(V(0,(int *))); break;
+    case 41: ag_rp_41(V(1,(int *))); break;
+    case 42: ag_rp_42(); break;
+    case 43: ag_rp_43(); break;
+    case 44: ag_rp_44(V(0,(int *))); break;
+    case 45: V(0,(int *)) = ag_rp_45(); break;
+    case 46: ag_default(&ag_rtt[17]); ag_rp_46(); break;
+    case 47: ag_rp_47(); break;
+    case 48: ag_rp_48(); break;
+    case 49: ag_rp_49(); break;
+    case 50: ag_rp_50(); break;
+    case 51: ag_rp_51(); break;
+    case 52: ag_rp_52(); break;
+    case 53: ag_rp_53(); break;
+    case 54: ag_rp_54(); break;
+    case 55: ag_rp_55(); break;
+    case 56: ag_rp_56(); break;
+    case 57: ag_rp_57(); break;
+    case 58: ag_rp_58(); break;
+    case 59: 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(V(1,(int *))); break;
+    case 76: ag_rp_76(V(1,(int *))); break;
+    case 77: ag_rp_77(V(1,(int *))); break;
+    case 78: ag_rp_78(V(1,(int *))); break;
+    case 79: ag_rp_79(V(2,(int *))); break;
+    case 80: ag_rp_80(V(2,(int *))); break;
+    case 81: ag_rp_81(V(1,(int *))); 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(V(1,(int *))); break;
+    case 89: ag_rp_89(V(2,(int *))); break;
+    case 90: ag_rp_90(V(1,(int *))); break;
+    case 91: ag_rp_91(V(0,(int *))); break;
+    case 92: ag_rp_92(V(1,(int *))); break;
+    case 93: ag_rp_93(); break;
+    case 94: ag_rp_94(); break;
+    case 95: ag_rp_95(V(1,(int *))); break;
+    case 96: ag_rp_96(V(2,(int *))); break;
+    case 97: ag_rp_97(); break;
+    case 98: ag_rp_98(); break;
+    case 99: ag_rp_99(V(1,(int *))); break;
+    case 100: ag_rp_100(V(2,(int *))); break;
+    case 101: ag_rp_101(V(0,(int *))); break;
+    case 102: ag_rp_102(V(1,(int *))); break;
+  }
+}
+
+#define TOKEN_NAMES ts_token_names
+const char *const ts_token_names[154] = {
+  "input file",
+  "simple token",
+  "expanded token",
+  "initial arg element",
+  "ws",
+  "eol",
+  "macro definition header",
+  "input file",
+  "section",
+  "",
+  "",
+  "",
+  "eof",
+  "newline",
+  "space",
+  "",
+  "",
+  "",
+  "",
+  "control line",
+  "conditional block",
+  "true if section",
+  "endif line",
+  "skip else section",
+  "false if section",
+  "else section",
+  "true condition",
+  "true else condition",
+  "false condition",
+  "skip section",
+  "false else condition",
+  "'#'",
+  "",
+  "\"else\"",
+  "\"endif\"",
+  "skip line",
+  "skip if section",
+  "\"if\"",
+  "\"ifdef\"",
+  "\"ifndef\"",
+  "",
+  "any text",
+  "",
+  "",
+  "skip else line",
+  "\"elif\"",
+  "\"define\"",
+  "\"undefine\"",
+  "\"include\"",
+  "\"line\"",
+  "\"error\"",
+  "\"pragma\"",
+  "",
+  "",
+  "not control mark",
+  "any text char",
+  "'\\\\'",
+  "",
+  "",
+  "name string",
+  "if header",
+  "else if header",
+  "include header",
+  "\"undef\"",
+  "",
+  "",
+  "",
+  "",
+  "'('",
+  "parameter list",
+  "')'",
+  "names",
+  "','",
+  "word",
+  "separator",
+  "qualified real",
+  "integer constant",
+  "expanded word",
+  "variable",
+  "simple macro",
+  "macro",
+  "macro arg list",
+  "defined",
+  "",
+  "macro args",
+  "",
+  "arg elements",
+  "",
+  "arg element",
+  "string literal",
+  "character constant",
+  "operator",
+  "",
+  "nested elements",
+  "punctuation",
+  "'\\n'",
+  "blank",
+  "comment",
+  "",
+  "comment head",
+  "\"*/\"",
+  "\"/*\"",
+  "'&'",
+  "'='",
+  "'-'",
+  "'>'",
+  "'/'",
+  "'.'",
+  "'^'",
+  "'+'",
+  "'<'",
+  "'%'",
+  "'*'",
+  "'!'",
+  "'|'",
+  "real constant",
+  "floating qualifier",
+  "real",
+  "",
+  "",
+  "simple real",
+  "exponent",
+  "confusion",
+  "decimal integer",
+  "octal integer",
+  "",
+  "",
+  "",
+  "",
+  "integer qualifier",
+  "",
+  "octal constant",
+  "decimal constant",
+  "hex constant",
+  "'0'",
+  "",
+  "hex integer",
+  "",
+  "hex digit",
+  "",
+  "string chars",
+  "'\\\"'",
+  "string char",
+  "",
+  "simple chars",
+  "'\\''",
+  "simple char",
+  "letter",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+
+};
+
+
+static const unsigned char ag_ctn[] = {
+    0,0,136,1,117,1,117,1,136,1,117,1,120,1, 97,1, 91,1, 91,1, 91,1, 91,1,
+   91,1, 91,1, 91,1, 91,1, 91,1,  0,0, 91,1, 91,1, 91,1, 90,1, 89,1, 59,1,
+  133,1,132,1,131,1, 75,1, 74,1, 77,1, 77,1, 20,1, 20,1, 19,1,  8,1, 19,1,
+    5,1,  8,1, 10,1, 10,1,  0,0,136,2,121,1,121,1,121,1,121,1, 91,2, 91,2,
+   91,2,144,2,140,2,  4,1, 77,2, 77,2, 77,2, 20,2, 20,2, 59,1, 91,1,  0,0,
+    8,2, 91,1,  0,0,  0,0,121,2,121,2, 59,1, 77,3, 77,3, 54,1, 35,1, 29,1,
+   25,1, 22,1, 23,1,  8,1,  6,3,  0,0, 19,3, 60,1, 28,3, 28,3, 28,3, 77,4,
+   77,4, 41,1,  0,0, 29,2, 25,2, 22,2, 23,2,  8,2,  6,4, 19,4,  0,0, 28,4,
+   28,4, 59,1, 81,1, 77,5, 22,1,  8,1, 61,1, 27,3,  0,0, 36,3, 22,3, 25,3,
+   44,3, 44,3, 59,1, 59,1, 59,1, 59,1, 77,6, 84,1, 84,1, 22,2,  8,2,  0,0,
+    6,6, 91,1, 91,1, 91,1, 91,1, 91,1, 91,1, 91,1, 91,1, 91,1,  3,1, 91,1,
+   91,1, 91,1,  3,1, 59,1, 86,1, 84,2,  6,7, 84,3, 59,1, 69,1,  6,8, 84,4,
+   71,2, 86,1, 71,3, 71,4, 59,1
+};
+
+#ifndef MISSING_FORMAT
+#define MISSING_FORMAT "Missing %s"
+#endif
+#ifndef UNEXPECTED_FORMAT
+#define UNEXPECTED_FORMAT "Unexpected %s"
+#endif
+#ifndef UNNAMED_TOKEN
+#define UNNAMED_TOKEN "input"
+#endif
+
+
+static void ag_diagnose(void) {
+  int ag_snd = (PCB).sn;
+  int ag_k = ag_sbt[ag_snd];
+
+  if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) {
+    sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
+  }
+  else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8
+          && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1
+          && *TOKEN_NAMES[ag_tstt[ag_k]]) {
+    sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
+  }
+  else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) {
+    sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]);
+  }
+  else if (isprint((*(PCB).lab)) && (*(PCB).lab) != '\\') {
+    char buf[20];
+    sprintf(buf, "\'%c\'", (char) (*(PCB).lab));
+    sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf);
+  }
+  else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN);
+  (PCB).error_message = (PCB).ag_msg;
+
+
+}
+static int ag_action_1_r_proc(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_rns(int ag_t, int *ag_sx, int ag_snd) {
+  while (1) {
+    int ag_act, ag_k = ag_sbt[ag_snd], ag_lim = ag_sbt[ag_snd+1];
+    int ag_p;
+
+    while (ag_k < ag_lim && ag_tstt[ag_k] != ag_t) ag_k++;
+    if (ag_k == ag_lim) break;
+    ag_act = ag_astt[ag_k];
+    ag_p = ag_pstt[ag_k];
+    if (ag_act == ag_action_2) return ag_p;
+    if (ag_act == ag_action_10 || ag_act == ag_action_11) {
+      (*ag_sx)--;
+      return ag_snd;
+    }
+    if (ag_act != ag_action_3 &&
+      ag_act != ag_action_4) break;
+    *ag_sx -= (ag_fl[ag_p] - 1);
+    ag_snd = (PCB).ss[*ag_sx];
+    ag_t = ag_ptt[ag_p];
+  }
+  return 0;
+}
+
+static int ag_jns(int ag_t) {
+  int ag_k;
+
+  ag_k = ag_sbt[(PCB).sn];
+  while (ag_tstt[ag_k] != ag_t && ag_tstt[ag_k]) ag_k++;
+  while (1) {
+    int ag_p = ag_pstt[ag_k];
+    int ag_sd;
+
+    switch (ag_astt[ag_k]) {
+    case ag_action_2:
+      GET_CONTEXT;
+      (PCB).ss[(PCB).ssx] = (PCB).sn;
+      return ag_p;
+    case ag_action_10:
+    case ag_action_11:
+      return (PCB).ss[(PCB).ssx--];
+    case ag_action_9:
+      GET_CONTEXT;
+      (PCB).ss[(PCB).ssx] = (PCB).sn;
+      (PCB).ssx++;
+      (PCB).sn = ag_p;
+      ag_k = ag_sbt[(PCB).sn];
+      while (ag_tstt[ag_k] != ag_t && ag_tstt[ag_k]) ag_k++;
+      continue;
+    case ag_action_3:
+    case ag_action_4:
+      ag_sd = ag_fl[ag_p] - 1;
+      if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+      else GET_CONTEXT;
+      (PCB).ss[(PCB).ssx] = (PCB).sn;
+      ag_t = ag_ptt[ag_p];
+      ag_k = ag_sbt[(PCB).sn+1];
+      while (ag_tstt[--ag_k] != ag_t);
+      continue;
+    case ag_action_5:
+    case ag_action_6:
+      if (ag_fl[ag_p]) break;
+      (PCB).sn = ag_rns(ag_ptt[ag_p],&(PCB).ssx, (PCB).sn);
+      (PCB).ss[++(PCB).ssx] = (PCB).sn;
+      ag_k = ag_sbt[(PCB).sn];
+      while (ag_tstt[ag_k] != ag_t && ag_tstt[ag_k]) ag_k++;
+      continue;
+    }
+    break;
+  }
+  return 0;
+}
+
+
+static int ag_atx(int ag_t, int *ag_sx, int ag_snd) {
+  int ag_k, ag_f;
+  int ag_save_btsx = (PCB).btsx;
+  int ag_flag = 1;
+
+  while (1) {
+    int ag_a;
+
+    (PCB).bts[128 - ++(PCB).btsx] = *ag_sx;
+    (PCB).ss[128 - (PCB).btsx] = (PCB).ss[*ag_sx];
+    (PCB).ss[*ag_sx] = ag_snd;
+    ag_k = ag_sbt[ag_snd];
+    while (ag_tstt[ag_k] != ag_t && ag_tstt[ag_k]) ag_k++;
+    ag_a = ag_astt[ag_k];
+    if (ag_a == ag_action_2 ||
+        ag_a == ag_action_3 ||
+        ag_a == ag_action_10 ||
+        ag_a == ag_action_11 ||
+        ag_a == ag_action_1 ||
+        ag_a == ag_action_4) break;
+    if ((ag_a == ag_action_5 ||
+        ag_a == ag_action_6) &&
+        (ag_k = ag_fl[ag_f = ag_pstt[ag_k]]) == 0) {
+        ag_snd = ag_rns(ag_ptt[ag_f],ag_sx, (PCB).ss[*ag_sx]);
+        (*ag_sx)++;
+        continue;
+    }
+    if (ag_a == ag_action_9) {
+      ag_snd = ag_pstt[ag_k];
+      (*ag_sx)++;
+      continue;
+    }
+    ag_flag = 0;
+    break;
+  }
+  while ((PCB).btsx > ag_save_btsx) {
+    *ag_sx = (PCB).bts[128 - (PCB).btsx];
+    (PCB).ss[*ag_sx] = (PCB).ss[128 - (PCB).btsx--];
+  }
+  return ag_flag;
+}
+
+
+static int ag_tst_tkn(void) {
+  int ag_rk, ag_sx, ag_snd = (PCB).sn;
+
+  if ((PCB).rx < (PCB).fx) {
+    (PCB).input_code = (PCB).lab[(PCB).rx++];
+    (PCB).token_number = (ts_token_type) AG_TCV((PCB).input_code);}
+  else {
+    GET_INPUT;
+    (PCB).lab[(PCB).fx++] = (PCB).input_code;
+    (PCB).token_number = (ts_token_type) AG_TCV((PCB).input_code);
+    (PCB).rx++;
+  }
+  if (ag_key_index[(PCB).sn]) {
+    unsigned ag_k = ag_key_index[(PCB).sn];
+    int ag_ch = CONVERT_CASE((PCB).input_code);
+    if (ag_ch < 255) {
+      while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+      if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
+    }
+  }
+  for (ag_rk = 0; ag_rk < (PCB).ag_lrss; ag_rk += 2) {
+    ag_sx = (PCB).ag_rss[ag_rk];
+    if (ag_sx > (PCB).ssx || ag_sx > (PCB).ag_min_depth) continue;
+    (PCB).sn = (PCB).ag_rss[ag_rk + 1];
+    if (ag_atx((PCB).token_number, &ag_sx, (PCB).sn)) break;
+  }
+  (PCB).sn = ag_snd;
+  return ag_rk;
+}
+
+static void ag_set_error_procs(void);
+
+static void ag_auto_resynch(void) {
+  int ag_sx, ag_rk;
+  int ag_rk1, ag_rk2, ag_tk1;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  if ((PCB).ag_error_depth && (PCB).ag_min_depth >= (PCB).ag_error_depth) {
+    (PCB).ssx = (PCB).ag_error_depth;
+    (PCB).sn = (PCB).ss[(PCB).ssx];
+  }
+  else {
+    ag_diagnose();
+    SYNTAX_ERROR;
+    if ((PCB).exit_flag != AG_RUNNING_CODE) return;
+    (PCB).ag_error_depth = (PCB).ag_min_depth = 0;
+    (PCB).ag_lrss = 0;
+    (PCB).ss[ag_sx = (PCB).ssx] = (PCB).sn;
+    (PCB).ag_min_depth = (PCB).ag_rss[(PCB).ag_lrss++] = ag_sx;
+    (PCB).ag_rss[(PCB).ag_lrss++] = (PCB).sn;
+    while (ag_sx && (PCB).ag_lrss < 2*128) {
+      int ag_t = 0, ag_x, ag_s, ag_sxs = ag_sx;
+
+      while (ag_sx && (ag_t = ag_ctn[2*(PCB).sn]) == 0) (PCB).sn = (PCB).ss[--ag_sx];
+      if (ag_t) (PCB).sn = (PCB).ss[ag_sx -= ag_ctn[2*(PCB).sn +1]];
+      else {
+        if (ag_sx == 0) (PCB).sn = 0;
+        ag_t = ag_ptt[0];
+      }
+      if ((ag_s = ag_rns(ag_t, &ag_sx, (PCB).sn)) == 0) break;
+      for (ag_x = 0; ag_x < (PCB).ag_lrss; ag_x += 2)
+        if ((PCB).ag_rss[ag_x] == ag_sx + 1 && (PCB).ag_rss[ag_x+1] == ag_s) break;
+      if (ag_x == (PCB).ag_lrss) {
+        (PCB).ag_rss[(PCB).ag_lrss++] = ++ag_sx;
+        (PCB).ag_rss[(PCB).ag_lrss++] = (PCB).sn = ag_s;
+      }
+      else if (ag_sx >= ag_sxs) ag_sx--;
+    }
+    ag_set_error_procs();
+  }
+  (PCB).rx = 0;
+  if ((PCB).ssx > (PCB).ag_min_depth) (PCB).ag_min_depth = (PCB).ssx;
+  while (1) {
+    ag_rk1 = ag_tst_tkn();
+    if ((PCB).token_number == 12)
+      {(PCB).exit_flag = AG_SYNTAX_ERROR_CODE; return;}
+    if (ag_rk1 < (PCB).ag_lrss) break;
+    {(PCB).rx = 1; ag_track();}
+  }
+  ag_tk1 = (PCB).token_number;
+  ag_track();
+  ag_rk2 = ag_tst_tkn();
+  if (ag_rk2 < ag_rk1) {ag_rk = ag_rk2; ag_track();}
+  else {ag_rk = ag_rk1; (PCB).token_number = (ts_token_type) ag_tk1; (PCB).rx = 0;}
+  (PCB).ag_min_depth = (PCB).ssx = (PCB).ag_rss[ag_rk++];
+  (PCB).sn = (PCB).ss[(PCB).ssx] = (PCB).ag_rss[ag_rk];
+  (PCB).sn = ag_jns((PCB).token_number);
+  if ((PCB).ag_error_depth == 0 || (PCB).ag_error_depth > (PCB).ssx)
+    (PCB).ag_error_depth = (PCB).ssx;
+  if (++(PCB).ssx >= 128) {
+    ag_trace_error();
+    (PCB).exit_flag = AG_STACK_ERROR_CODE;
+    PARSER_STACK_OVERFLOW;
+    return;
+  }
+  GET_CONTEXT;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  (PCB).ag_tmp_depth = (PCB).ag_min_depth;
+  (PCB).rx = 0;
+  return;
+}
+
+
+static int ag_action_10_proc(void) {
+  int ag_t = (PCB).token_number;
+  (PCB).btsx = 0, (PCB).drt = -1;
+  do {
+    ag_track();
+    if ((PCB).rx < (PCB).fx) {
+      (PCB).input_code = (PCB).lab[(PCB).rx++];
+      (PCB).token_number = (ts_token_type) AG_TCV((PCB).input_code);}
+    else {
+      GET_INPUT;
+      (PCB).lab[(PCB).fx++] = (PCB).input_code;
+      (PCB).token_number = (ts_token_type) AG_TCV((PCB).input_code);
+      (PCB).rx++;
+    }
+    if (ag_key_index[(PCB).sn]) {
+      unsigned ag_k = ag_key_index[(PCB).sn];
+      int ag_ch = CONVERT_CASE((PCB).input_code);
+      if (ag_ch < 255) {
+        while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+        if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
+      }
+    }
+  } while ((PCB).token_number == (ts_token_type) ag_t);
+  (PCB).rx = 0;
+  return 1;
+}
+
+static int ag_action_11_proc(void) {
+  int ag_t = (PCB).token_number;
+
+  (PCB).btsx = 0, (PCB).drt = -1;
+  do {
+    (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).lab;
+    (PCB).ssx--;
+    ag_track();
+    ag_ra();
+    if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
+    (PCB).ssx++;
+    if ((PCB).rx < (PCB).fx) {
+      (PCB).input_code = (PCB).lab[(PCB).rx++];
+      (PCB).token_number = (ts_token_type) AG_TCV((PCB).input_code);}
+    else {
+      GET_INPUT;
+      (PCB).lab[(PCB).fx++] = (PCB).input_code;
+      (PCB).token_number = (ts_token_type) AG_TCV((PCB).input_code);
+      (PCB).rx++;
+    }
+    if (ag_key_index[(PCB).sn]) {
+      unsigned ag_k = ag_key_index[(PCB).sn];
+      int ag_ch = CONVERT_CASE((PCB).input_code);
+      if (ag_ch < 255) {
+        while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+        if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
+      }
+    }
+  }
+  while ((PCB).token_number == (ts_token_type) ag_t);
+  (PCB).rx = 0;
+  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 = (ts_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 = (ts_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 = (ts_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) {
+    ag_trace_error();
+    (PCB).exit_flag = AG_STACK_ERROR_CODE;
+    PARSER_STACK_OVERFLOW;
+  }
+  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).lab;
+  GET_CONTEXT;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  (PCB).ssx++;
+  (PCB).sn = (PCB).ag_ap;
+  ag_track();
+  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;
+  GET_CONTEXT;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  (PCB).ssx++;
+  (PCB).sn = (PCB).ag_ap;
+  (PCB).rx = 0;
+  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).rx = 0;
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_1_proc(void) {
+  ag_track();
+  (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 = (ts_token_type) ag_ptt[(PCB).ag_ap];
+  (PCB).btsx = 0, (PCB).drt = -1;
+  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).lab;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else GET_CONTEXT;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  ag_track();
+  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; ag_trace_error();
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((*(PCB).s_procs[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;
+  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).lab;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else GET_CONTEXT;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  ag_track();
+  (PCB).reduction_token = (ts_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; ag_trace_error();
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((*(PCB).s_procs[ag_astt[ag_t1]])() == 0) break;
+  }
+  return 0;
+}
+
+static int ag_action_8_proc(void) {
+  ag_undo();
+  ag_trace_error();
+  (PCB).rx = 0;
+  ag_auto_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 {
+    GET_CONTEXT;
+    (PCB).ss[(PCB).ssx] = (PCB).sn;
+  }
+  (PCB).rx = 0;
+  (PCB).reduction_token = (ts_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; ag_trace_error();
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((*(PCB).r_procs[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 = (ts_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;
+    GET_CONTEXT;
+    (PCB).ss[(PCB).ssx] = (PCB).sn;
+  }
+  (PCB).rx = 0;
+  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; ag_trace_error();
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((*(PCB).r_procs[ag_astt[ag_t1]])() == 0) break;
+  }
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+
+static void ag_check_depth(int ag_fl) {
+  int ag_sx = (PCB).ssx - ag_fl;
+  if ((PCB).ag_error_depth && ag_sx < (PCB).ag_tmp_depth) (PCB).ag_tmp_depth = ag_sx;
+}
+
+static int ag_action_3_er_proc(void) {
+  ag_check_depth(ag_fl[(PCB).ag_ap] - 1);
+  return ag_action_4_r_proc();
+}
+
+static int ag_action_2_e_proc(void) {
+  ag_action_2_proc();
+  (PCB).ag_min_depth = (PCB).ag_tmp_depth;
+  return 0;
+}
+
+static int ag_action_4_e_proc(void) {
+  ag_check_depth(ag_fl[(PCB).ag_ap] - 1);
+  (PCB).ag_min_depth = (PCB).ag_tmp_depth;
+  return ag_action_4_proc();
+}
+
+static int ag_action_6_e_proc(void) {
+  ag_check_depth(ag_fl[(PCB).ag_ap]);
+  return ag_action_6_proc();
+}
+
+static int ag_action_11_e_proc(void) {
+  return ag_action_10_proc();
+}
+
+static int (*ag_r_procs_error[])(void) = {
+  ag_action_1_r_proc,
+  ag_action_2_r_proc,
+  ag_action_3_er_proc,
+  ag_action_3_er_proc
+};
+
+static int (*ag_s_procs_error[])(void) = {
+  ag_action_1_s_proc,
+  ag_action_2_r_proc,
+  ag_action_3_er_proc,
+  ag_action_3_er_proc
+};
+
+static int (*ag_gt_procs_error[])(void) = {
+  ag_action_1_proc,
+  ag_action_2_e_proc,
+  ag_action_4_e_proc,
+  ag_action_4_e_proc,
+  ag_action_6_e_proc,
+  ag_action_6_e_proc,
+  ag_action_7_proc,
+  ag_action_8_proc,
+  ag_action_9_proc,
+  ag_action_10_proc,
+  ag_action_11_e_proc,
+  ag_action_8_proc
+};
+
+static void ag_set_error_procs(void) {
+  (PCB).gt_procs = ag_gt_procs_error;
+  (PCB).r_procs = ag_r_procs_error;
+  (PCB).s_procs = ag_s_procs_error;
+}
+
+
+void init_ts(void) {
+  (PCB).rx = (PCB).fx = 0;
+  (PCB).gt_procs = ag_gt_procs_scan;
+  (PCB).r_procs = ag_r_procs_scan;
+  (PCB).s_procs = ag_s_procs_scan;
+  (PCB).ag_error_depth = (PCB).ag_min_depth = (PCB).ag_tmp_depth = 0;
+  (PCB).ag_resynch_active = 0;
+  (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
+  (PCB).exit_flag = AG_RUNNING_CODE;
+  (PCB).line = FIRST_LINE;
+  (PCB).column = FIRST_COLUMN;
+  (PCB).btsx = 0, (PCB).drt = -1;
+}
+
+void ts(void) {
+  init_ts();
+  (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).rx < (PCB).fx) {
+        (PCB).input_code = (PCB).lab[(PCB).rx++];
+        (PCB).token_number = (ts_token_type) AG_TCV((PCB).input_code);}
+      else {
+        GET_INPUT;
+        (PCB).lab[(PCB).fx++] = (PCB).input_code;
+        (PCB).token_number = (ts_token_type) AG_TCV((PCB).input_code);
+        (PCB).rx++;
+      }
+      if (ag_key_index[(PCB).sn]) {
+        unsigned ag_k = ag_key_index[(PCB).sn];
+        int ag_ch = CONVERT_CASE((PCB).input_code);
+        if (ag_ch < 255) {
+          while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+          if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
+        }
+      }
+      do {
+        unsigned ag_tx = (ag_t1 + ag_t2)/2;
+        if (ag_tstt[ag_tx] > (unsigned char)(PCB).token_number)
+          ag_t1 = ag_tx + 1;
+        else ag_t2 = ag_tx;
+      } while (ag_t1 < ag_t2);
+      if (ag_tstt[ag_t1] != (unsigned char)(PCB).token_number)
+        ag_t1 = ag_sbe[(PCB).sn];
+    }
+    (PCB).ag_ap = ag_pstt[ag_t1];
+    (*(PCB).gt_procs[ag_astt[ag_t1]])();
+  }
+}
+
+