Mercurial > ~dholland > hg > ag > index.cgi
view tests/agcl/examples/good/jrc.cpp @ 24:a4899cdfc2d6 default tip
Obfuscate the regexps to strip off the IBM compiler's copyright banners.
I don't want bots scanning github to think they're real copyright
notices because that could cause real problems.
author | David A. Holland |
---|---|
date | Mon, 13 Jun 2022 00:40:23 -0400 |
parents | 13d2b8934445 |
children |
line wrap: on
line source
/* Copyright (C) 1989,1990 James A. Roskind, All rights reserved. This grammar was developed and written by James A. Roskind. Copying of this grammar description, as a whole, is permitted providing this notice is intact and applicable in all complete copies. Translations as a whole to other parser generator input languages (or grammar description languages) is permitted provided that this notice is intact and applicable in all such copies, along with a disclaimer that the contents are a translation. The reproduction of derived text, such as modified versions of this grammar, or the output of parser generators, is permitted, provided the resulting work includes the copyright notice "Portions Copyright (c) 1989, 1990 James A. Roskind". Derived products, such as compilers, translators, browsers, etc., that use this grammar, must also provide the notice "Portions Copyright (c) 1989, 1990 James A. Roskind" in a manner appropriate to the utility, and in keeping with copyright law (e.g.: EITHER displayed when first invoked/executed; OR displayed continuously on display terminal; OR via placement in the object code in form readable in a printout, with or near the title of the work, or at the end of the file). No royalties, licenses or commissions of any kind are required to copy this grammar, its translations, or derivative products, when the copies are made in compliance with this notice. Persons or corporations that do make copies in compliance with this notice may charge whatever price is agreeable to a buyer, for such copies or derivative works. THIS GRAMMAR IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. James A. Roskind Independent Consultant 516 Latania Palm Drive Indialantic FL, 32903 (407)729-4348 jar@ileaf.com or ...!uunet!leafusa!jar ****************************************************************************** Translation to AnaGram and Interfacing Copyright 1993 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. ****************************************************************************** */ #include "mpp.h" /* * AnaGram, A System for Syntax Directed Programming * File generated by: ... * * AnaGram Parsing Engine * Copyright 1993-2002 Parsifal Software. All Rights Reserved. * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef JRC_H #include "jrc.h" #endif #ifndef JRC_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]) cc_pcb_type cc_pcb; #define PCB cc_pcb #define CHANGE_REDUCTION(x) cc_change_reduction(cc_##x##_token) int cc_change_reduction(cc_token_type); #define INPUT_VALUE(type) *(type *) &(PCB).input_value #line - "jrc.syn" // Embedded C #define SYNTAX_ERROR syntax_error(PCB.error_message) #define INPUT_CODE(T) (T).id static int typedef_flag = 0; static int use_count = 0; symbol_type_enum symbol_table[N_SYMBOLS]; static void do_typedef(token t) { if (typedef_flag == 0) return; typedef_flag = 0; symbol_table[t.handle] = typedef_name; } static token check_typedef(token t) { if (symbol_table[t.handle] == typedef_name) CHANGE_REDUCTION(TYPEDEFname); return t; } // Member Functions for Class c_parser // Constructor /* This parser has no provisions for multiple simultaneous parses or for recursion. The purpose of use_count is to make sure that there is only one copy of the parser active at any time. */ c_parser::c_parser() { assert(use_count == 0); use_count++; typedef_flag = 0; memset(symbol_table, 0, sizeof(symbol_table)); init_cc(); // init parse } // Destructor c_parser::~c_parser() { use_count--; // Makes parser available } // Reset Parser c_parser &reset(c_parser &c) { typedef_flag = 0; memset(symbol_table, 0, sizeof(symbol_table)); init_cc(); // init parse return c; } // Transmit token to c_parser /* The overloaded operator "<<" is used to transmit data to a parser. Newline tokens are filtered out, since they are passed along by the token scanner only in case text output of the preprocessor is required. If the parser has encountered an error, there is no point in giving it any further input. Otherwise, the input_code and input_value fields of the pcb are set up and cc() is called to deal with the token. */ token_sink &c_parser::operator << (token c) { if (PCB.exit_flag != AG_RUNNING_CODE || (int) c.id == '\n') return *this; PCB.input_code = c.id; PCB.input_value = c; cc(); return *this; } token_sink &c_parser::operator << (token *s) { while (s->id != END_OF_FILE && PCB.exit_flag == AG_RUNNING_CODE) { if ((int) s->id == 10) continue; PCB.input_code = s->id; PCB.input_value = *s++; cc(); } return *this; } #line - "jrc.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 - "jrc.syn" typedef_flag = 1; #line - "jrc.cpp" } static void ag_rp_2(int f) { #line - "jrc.syn" typedef_flag = f; #line - "jrc.cpp" } static int ag_rp_3(void) { #line - "jrc.syn" int f = typedef_flag; typedef_flag = 0; return f; #line - "jrc.cpp" } static void ag_rp_4(token s) { #line - "jrc.syn" do_typedef(s); #line - "jrc.cpp" } static token ag_rp_5(token t) { #line - "jrc.syn" return check_typedef(t); #line - "jrc.cpp" } #ifndef AG_TRACE_FILE_NAME #define AG_TRACE_FILE_NAME "jrc.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 cc_vs_type const ag_null_value NULL_VALUE_INITIALIZER; static const unsigned char far ag_rpx[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5 }; #define AG_TCV(x) ag_tcv[(x)] static const unsigned char far ag_tcv[] = { 5, 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, 40, 0, 0, 0, 43, 35, 0, 16, 18, 36, 37, 29, 38, 23, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 84, 49, 69, 50, 66, 0, 62, 77, 25, 0, 27, 71,142, 54, 78, 52, 26, 51, 46, 75, 72, 74, 70, 55, 79, 64, 73, 47, 76, 11, 13, 0, 20, 0, 21, 58, 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,125, 60,127, 39, 0, 0, 10, 9, 8, 7,186,110,167,155,113,102,166,156,163,118,160, 137,108,117,164,165,159,115,116,111,168,114,119, 33,109,128,161,107,129, 120,112,103,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; #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 #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) { switch ((PCB).input_code) { 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++; } (PCB).read_flag = 1; } 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]; } static void ag_undo(void) { if ((PCB).drt == -1) return; while ((PCB).btsx) { int ag_k = 128 - (PCB).btsx; (PCB).sn = (PCB).bts[(PCB).btsx--]; (PCB).ssx = (PCB).bts[ag_k]; (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k]; (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k]; } (PCB).token_number = (cc_token_type) (PCB).drt; (PCB).ssx = (PCB).dssx; (PCB).sn = (PCB).dsn; (PCB).drt = -1; } static const int far ag_rtt[] = { 15,106, 0 }; static const unsigned char far ag_tstt[] = { 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,36,16,5,0,1,3,4,15,82,83,85,86,87,88,89,91,92,94,95,96,97,98,99,101, 104,105,106,121,123,169,170,171,179,180,181,182, 186,125,0,15,24,106, 129,128,0,122,124, 186,36,16,0,15,171,179,180,181,182, 186,103,102,36,16,0,15,89,91,101,171,179,180,181,182, 111,110,109,108,107,103,102,0,99,101, 120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,102,0,99,101, 104, 111,110,109,108,107,103,102,0,99,100,101, 120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,102,0,99,100, 101,104, 20,16,0,174,185, 84,29,0, 84,29,0, 111,110,109,108,107,103,102,84,0,99,101, 111,110,109,108,107,103,102,84,0,99,100,101, 186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107, 103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121, 123,150,157, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,36,16,0,15,89,99,101,104,105,106,121,123,171,179,180,181,182, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,36,16,0,15,89,99,100,101,104,105,106,121,123,171,179,180,181,182, 186,36,16,0,15,89,93,106,145,171,172,173,175,176,177,179,180,181,182, 186,36,16,0,15,89,93,106,145,171,172,173,175,176,177,179,180,181,182, 125,84,0,150, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,36,16,5,0,15,82,83,85,86,87,88,89,91,92,94,95,96,97,98,99,101,104, 105,106,121,123,169,170,171,179,180,181,182, 5,0, 125,0, 186,0,15,24,106,138, 186,125,0,15,24,106, 18,0, 20,18,16,0,174,185, 18,0, 186,103,102,36,16,0,15,89,101,171,179,180,181,182, 186,40,39,38,37,36,35,33,27,26,21,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31, 32,41,44,45,48,53,56,57,59,61,63,65,80, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,18,0,15,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106,121,123, 140,141,143,146, 20,0, 186,36,16,0,15,89,179,180,181, 186,36,16,0,15,89,93,106,145,172,173,175,176,177,179,180,181, 186,36,16,0,15,89,93,106,145,172,173,175,176,177,179,180,181, 186,36,16,0,15,89,93,106,145,172,173,175,176,177,179,180,181, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,36,16,0,15,89,99,101,104,105,106,121,123,179,180,181, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,36,16,0,15,89,99,100,101,104,105,106,121,123,179,180,181, 186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107, 103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121, 123,150, 186,168,167,166,165,164,163,162,161,159,156,155,137,129,128,127,125,120,119, 118,117,116,115,114,113,112,111,110,109,108,107,103,102,84,40,39,38,37, 36,35,33,27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41, 44,45,48,53,56,57,59,61,63,65,81,82,83,85,86,87,88,91,92,94,95,96,97,98, 99,101,104,105,106,121,123,149,150,151,152,153,154,157,158, 186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107, 103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121, 123,150,157, 125,84,69,29,0,90,150, 186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107, 103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121, 123,150,157, 125,84,69,29,0,90,150, 186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107, 103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121, 123,150,157, 186,36,16,0,15,106,171,173,175,176,177,178,179,180,181,182, 20,16,0,174,185, 186,103,102,36,16,0,15,89,91,101,106,145,171,173,175,176,177,179,180,181, 182, 125,0,150, 84,69,29,0,90, 186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107, 103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121, 123,150,157, 125,0,150, 84,69,29,0,90, 186,0,15,24,106,138, 127,69,29,0,139, 127,29,0, 125,0, 186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,0,85,91,94,97, 98,101,104,105,106,121,123,126,130,131,132, 20,16,0,174,185, 20,16,0,174,185, 13,0, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31, 27,26,25,23,20,16,0, 186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,40,39,38,37,36, 35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30,31,32,34,41,44, 45,48,53,56,57,59,61,63,65,85,91,94,97,98,101,104,105,106,121,123, 43,42,36,0, 38,37,0, 47,46,0, 52,51,50,49,0, 55,54,0, 35,0, 58,0, 60,0, 62,0, 66,64,0, 21,0, 111,110,109,108,107,103,102,0,99,101, 111,110,109,108,107,103,102,0,99,100,101, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,36,29,20,18,16,0,15,89,99,101,104,105,106,121,123,144,174,179,180, 181,183,184,185, 186,36,20,16,0,15,89,106,144,145,174,175,176,179,180,181,183,184,185, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,36,29,20,18,16,0,15,89,99,100,101,104,105,106,121,123,144,174,179, 180,181,183,184,185, 186,36,20,16,0,15,89,106,144,145,174,175,176,179,180,181,183,184,185, 29,0, 18,0, 29,18,0, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48,53,56,57,59,61,63,65,80, 186,36,16,0,15,179,180,181, 186,103,102,36,16,0,15,89,91,101,179,180,181, 20,16,0,174,185, 84,69,29,0,90, 186,36,16,0,15,106,173,175,176,177,178,179,180,181, 186,103,102,36,16,0,15,89,91,101,106,145,173,175,176,177,179,180,181, 84,69,29,0,90, 84,69,29,0,90, 84,69,29,0,90, 79,78,77,76,75,74,73,72,71,70,69,0,68, 29,0, 84,79,78,77,76,75,74,73,72,71,70,69,67,66,64,62,60,58,55,54,52,51,50,49,47, 46,43,42,38,37,36,35,29,27,26,25,23,20,16,0, 186,84,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28, 30,31,32,41,44,45,48,53,56,57,59,61,63,65,81, 84,0, 84,0, 186,0,15,24,106, 16,0, 186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33, 27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48, 53,56,57,59,61,63,65,81,106,149,150,151,152,153,154, 16,0, 16,0, 16,0, 84,0, 67,0, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48,53,56,57,59,61,63,65,80, 67,0, 186,168,167,166,165,164,163,162,161,159,156,155,127,125,84,40,39,38,37,36, 35,33,27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44, 45,48,53,56,57,59,61,63,65,81,106,149,150,151,152,153,154, 186,111,110,109,108,107,103,102,67,36,16,0, 186,168,167,166,165,164,163,162,161,159,156,155,137,129,128,127,125,120,119, 118,117,116,115,114,113,112,111,110,109,108,107,103,102,84,40,39,38,37, 36,35,33,27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41, 44,45,48,53,56,57,59,61,63,65,81,82,83,85,86,87,88,91,92,94,95,96,97,98, 99,101,104,105,106,121,123,149,150,151,152,153,154,158, 186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107, 103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121, 123,150, 186,125,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28,30, 31,32,41,44,45,48,53,56,57,59,61,63,65,147, 186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107, 103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121, 123,150, 186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107, 103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121, 123,150, 20,16,0,174,185, 18,0, 186,36,16,0,15,106,171,173,175,176,177,178,179,180,181,182, 18,0, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,18,0,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106,121,123,140, 141,143, 186,103,102,36,16,0,15,89,101,106,145,171,173,175,176,177,179,180,181,182, 186,36,16,0,15,106,171,173,175,176,177,178,179,180,181,182, 186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107, 103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121, 123,150, 127,29,0, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48,53,56,57,59,61,63,65,80, 186,0,15,24,106, 186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,0,85,91,94,97, 98,101,104,105,106,121,123,126,130,131,132, 103,102,0,101, 103,102,0,101, 120,119,118,117,116,115,114,113,112,103,102,0,101,104, 186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,67,36,16,0,15, 89,101,104,105,106,121,123,133,136,179,180,181, 186,67,36,16,0,15,89,93,106,134,136,145,172,173,175,176,177,179,180,181, 84,29,0, 84,29,0, 186,137,129,128,127,120,119,118,117,116,115,114,113,112,103,102,0,85,91,94, 97,98,101,104,105,106,121,123,130,131,132, 186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,40,39,38,37,36, 35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30,31,32,34,41,44, 45,48,53,56,57,59,61,63,65,85,91,94,97,98,101,104,105,106,121,123, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30, 31,32,41,44,45,48,53,56,57,59,61,63,65, 186,0,15,24,106, 186,0,15,24,106, 186,40,39,38,37,36,35,33,27,26,18,16,13,11,10,9,8,7,0,6,12,14,15,19,22,28, 30,31,32,41,44,45,48,53,56,57,59,61,63,65, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30, 31,32,41,44,45,48,53,56,57,59,61,63,65, 186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,36,20,18,16,0, 101,104,105,106,121,123,144,174,183,184,185, 36,20,16,0,144,174,183,184,185, 18,0, 29,18,0, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48,53, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48,53,56, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48,53,56,57, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48,53,56,57,59, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30, 31,32,41,44,45,48,53,56,57,59,61,63,65, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48,53,56,57,59,61, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,36,20,18,16,0,15,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106, 121,123,140,141,143,174,179,180,181,183,184,185, 186,103,102,36,20,16,0,15,89,91,101,144,174,179,180,181,183,184,185, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,36,20,18,16,0,15,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106, 121,123,140,141,143,174,175,176,179,180,181,183,184,185, 186,103,102,36,20,16,0,15,89,91,101,106,144,145,174,175,176,179,180,181,183, 184,185, 186,142,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107, 103,102,0,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106,121,123,143, 186,0,15, 21,0, 20,18,16,0,174,185, 186,103,102,36,16,0,15,89,101,179,180,181, 186,36,16,0,15,106,173,175,176,177,178,179,180,181, 186,103,102,36,16,0,15,89,101,106,145,173,175,176,177,179,180,181, 186,36,16,0,15,106,173,175,176,177,178,179,180,181, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28,30,31, 32,41,44,45,48,53,56,57,59,61,63,65, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28,30,31, 32,41,44,45,48,53,56,57,59,61,63,65, 84,0, 84,0, 186,84,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28, 30,31,32,41,44,45,48,53,56,57,59,61,63,65,81, 162,0, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30, 31,32,41,44,45,48,53,56,57,59,61,63,65, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30, 31,32,41,44,45,48,53,56,57,59,61,63,65, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30, 31,32,41,44,45,48,53,56,57,59,61,63,65, 186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33, 27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48, 53,56,57,59,61,63,65,81,106,149,150,151,152,153,154, 67,0, 186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33, 27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48, 53,56,57,59,61,63,65,81,106,149,150,151,152,153,154, 186,168,167,166,165,164,163,162,161,159,156,155,127,125,84,40,39,38,37,36, 35,33,27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44, 45,48,53,56,57,59,61,63,65,81,106,149,150,151,152,153,154, 186,125,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28,30, 31,32,41,44,45,48,53,56,57,59,61,63,65,147,148, 18,0, 20,16,0,174,185, 20,18,16,0,174,185, 20,16,0,174,185, 186,36,16,0,15,106,171,173,175,176,177,178,179,180,181,182, 20,18,16,0,174,185, 127,69,29,0,139, 186,137,129,128,127,120,119,118,117,116,115,114,113,112,103,102,0,85,91,94, 97,98,101,104,105,106,121,123,130,131,132, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48,53,56,57,59,61,63,65,80, 84,67,29,0,135,136, 84,67,29,0,135,136, 186,67,36,16,0,15,89,133,136,179,180,181, 186,67,36,16,0,15,89,93,106,134,136,145,172,173,175,176,177,179,180,181, 18,0, 29,18,0, 29,21,0, 186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103, 102,36,20,18,16,0,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106,121, 123,140,141,143,174,183,184,185, 103,102,36,20,16,0,91,101,144,174,183,184,185, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 43,42,36,0, 43,42,36,0, 38,37,0, 38,37,0, 47,46,0, 47,46,0, 47,46,0, 47,46,0, 52,51,50,49,0, 52,51,50,49,0, 55,54,0, 35,0, 58,0, 60,0, 67,29,0, 62,0, 18,0, 18,0, 18,0, 186,103,102,36,20,16,0,15,89,101,144,174,179,180,181,183,184,185, 186,103,102,36,20,16,0,15,89,101,106,144,145,174,175,176,179,180,181,183, 184,185, 186,36,16,0,15,106,173,175,176,177,178,179,180,181, 84,0, 16,0, 29,18,0, 29,18,0, 29,18,0, 186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33, 27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48, 53,56,57,59,61,63,65,81,106,149,150,151,152,153,154, 127,29,0, 20,18,16,0,174,185, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28,30,31, 32,41,44,45,48,53,56,57,59,61,63,65, 103,102,36,20,16,0,101,144,174,183,184,185, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32, 41,44,45,48,53,56,57,59,61,63,65, 20,16,0,174,185, 186,84,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28, 30,31,32,41,44,45,48,53,56,57,59,61,63,65,81, 186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30, 31,32,41,44,45,48,53,56,57,59,61,63,65, 186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33, 27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48, 53,56,57,59,61,63,65,81,106,149,150,151,152,153,154, 186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33, 27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48, 53,56,57,59,61,63,65,81,106,149,150,151,152,153,154, 186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33, 27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48, 53,56,57,59,61,63,65,81,106,149,150,151,152,153,154, 186,127,125,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28, 30,31,32,41,44,45,48,53,56,57,59,61,63,65,147, 84,0, 29,18,0, 160,0, 186,40,39,38,37,36,35,33,27,26,18,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28, 30,31,32,41,44,45,48,53,56,57,59,61,63,65,81, 84,0, 186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33, 27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48, 53,56,57,59,61,63,65,81,106,149,150,151,152,153,154, 18,0, 186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33, 27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48, 53,56,57,59,61,63,65,81,106,149,150,151,152,153,154, 0 }; static unsigned const char far ag_astt[5043] = { 2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,8,7,0,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,2,1,7,1,1,1,1,1,7,2,1,2,1,1,7,2,1,1, 1,1,1,2,1,1,1,1,7,2,3,1,1,3,3,1,3,3,3,3,3,3,2,9,9,5,3,3,9,9,9,9,9,9,9,9,9, 3,3,3,3,2,9,9,5,3,3,3,9,9,9,9,2,9,9,5,3,3,3,9,9,9,9,9,9,9,9,9,9,9,9,9,2,9, 9,5,3,3,3,3,1,1,5,3,1,3,1,7,3,1,7,3,3,3,3,2,9,9,3,5,3,3,9,9,9,9,2,9,9,3,5, 3,3,3,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,3,1,2,1,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,9,9,1,1,7,2,1,3,3, 3,3,3,1,3,1,1,1,1,1,2,1,4,4,3,3,3,3,3,3,3,3,3,9,9,9,9,2,9,9,1,1,7,2,1,3,3, 3,3,3,3,1,3,1,1,1,1,1,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,2,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,3,7,3,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1, 1,5,7,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,3,7,1,5,2, 7,1,1,1,1,2,1,7,1,1,1,1,7,1,3,1,7,3,1,1,7,2,9,9,1,1,7,2,3,3,3,3,1,3,3,2,1, 1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,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,5,2,1,1,7,2,1,1,1,1,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1, 1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,4,4,3, 3,3,3,3,3,3,3,3,3,3,3,3,2,9,9,1,1,7,2,1,3,3,3,3,3,1,3,1,1,1,2,1,4,4,3,3,3, 3,3,3,3,3,3,9,9,9,9,2,9,9,1,1,7,2,1,3,3,3,3,3,3,1,3,1,1,1,2,1,4,4,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,2,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,1, 1,1,1,1,1,1,1,1,1,1,1,4,4,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,8,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,4,4,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,2,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,5,1, 5,7,3,3,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,3,1,1,5,1,5,7,3,3,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,2,1,1,7,2,1,1,1,1,1,1,1, 1,1,1,1,1,1,5,3,1,2,1,1,1,1,7,2,3,1,1,1,3,3,3,3,3,3,3,1,3,3,1,5,3,5,1,5,7, 3,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,3,1,1,5,3,5,1,5,7,3,2,7,1,1,1,1,5,1,5,7,3,3,1,7,1,5,2,1,4,4,1, 1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,3,1,1,1,5,3,1,9, 5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,2,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,7,1,1,1,1,1,3,1,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1, 1,3,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,9,9,1,1,1,1,5,2,1, 4,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,7,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,5,1,1,5,1, 1,1,1,5,1,1,5,1,5,1,5,1,5,1,5,1,1,5,3,7,3,3,3,3,2,9,9,5,3,3,9,9,9,9,2,9,9, 5,3,3,3,2,1,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,9,9,1,5,1,5,1,7,2,3,3,3,3,3,3, 1,3,3,3,3,1,3,3,3,1,2,1,1,1,5,2,3,1,3,3,3,3,3,3,1,3,3,3,1,2,1,4,4,3,3,3,3, 3,3,3,3,3,9,9,9,9,2,9,9,1,5,1,5,1,7,2,3,3,3,3,3,3,3,1,3,3,3,3,1,3,3,3,1,2, 1,1,1,5,2,3,1,3,3,3,3,3,3,1,3,3,3,1,1,5,3,7,1,3,7,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,2,1,1,1,2,1,1, 1,1,7,2,3,1,1,3,1,3,1,1,5,3,1,5,1,5,7,3,2,1,1,7,2,1,1,1,1,1,1,1,1,1,2,1,1, 1,1,7,2,3,1,1,1,3,3,3,3,3,3,1,3,5,1,5,7,3,5,1,5,7,3,5,1,5,7,3,1,1,1,1,1,1, 1,1,1,1,1,5,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,7,2,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,7,3,7,2,7,1,1,1,1,7,2,1,1,1,1,1,1,1,1,1, 1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,7,1,7,3,7,1,7,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,1,1,1,1,1,1,1, 1,1,1,3,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,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,3,3,3,3,3,3,5,5,5,5,5,5,5,5,5,5,5,7,2,1,1,1,1,1,1,1, 1,1,1,1,1,4,4,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,8,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,2,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,2,1,4,4,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,2,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,1, 4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,3,1,1,7,1,1,1,7,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,4,4,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,1,1,3,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,9,9, 1,1,7,2,3,3,1,3,3,3,3,3,3,3,1,3,3,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,2,1,4,4, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,3,3,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,3,3,2,7,1,1,1,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,9,9,5,3,9,9,5,3,9,9,9,9,9,9,9,9,9,9,9,5,3,3,2,1,4,4,3,3,3,3,3,3, 3,3,3,9,9,1,1,1,7,2,1,3,3,3,3,1,3,3,3,1,1,1,2,1,1,1,7,2,1,1,1,3,3,1,1,1,1, 1,1,1,1,1,3,1,7,3,1,7,2,1,4,4,3,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1, 1,1,3,1,1,2,1,4,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,7, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7, 3,3,3,2,7,3,3,3,2,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,4,4,3,3,3,3,3,3,3,3,3,9,9,1,1,5,1,7,3,3,3,3, 1,3,3,3,3,3,1,1,1,1,5,3,3,3,3,1,1,7,1,3,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,7,1,1,1,1,1,3,1,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,3,2, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,3,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1, 1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,2,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1, 1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,4, 4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,3,1,7,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,2,1,1,1,1,1,5,2,3,1,1,3,3,3,1,3,3,3,1,2,1,4,4,1, 1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,3,1,7,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,2,1,1,1,1,1,5,2,3,1,1,1,3,3,3,3,3,3,1,3,3,3,1,2, 3,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,3,2,7,3,3,7,1,3,1,7,3,1,2,9,9,1,1,7,2,3,3,3,1,3,2,1,1,7,2,1,1,1,1,1,1,1, 1,1,2,9,9,1,1,7,2,3,3,1,3,3,3,3,3,3,1,3,2,1,1,7,2,1,1,1,1,1,1,1,1,1,2,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3, 7,3,7,2,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,8,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,7,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,3,3,3, 3,3,3,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,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,3,3,3,3,3,3,2,1,1,1,1,1,1, 1,1,1,1,1,3,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,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,3,3,3,3,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,7,1,1,5,3,1,1,3,1,7,1,1,1, 1,5,3,1,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,3,1,7,1,1,5,1,5,7,3,2,1,4,4,3,1, 1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,3,1,1,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,5,1,5,7,3,3,5,1,5,7,3, 3,2,1,1,1,7,2,1,3,3,1,1,1,2,1,1,1,7,2,1,1,1,3,3,1,1,1,1,1,1,1,1,1,3,7,1,3, 7,1,3,7,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,3,1,7,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,3,3,3,3,1,2,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,3,1,1,1,5,1,1,1,5,1,1,5,1,1,5,1,1,5,1,1, 5,1,1,5,1,1,5,1,1,1,1,5,1,1,1,1,5,1,1,5,1,5,1,5,1,5,1,1,7,1,5,3,7,3,7,1,7, 2,9,9,1,1,1,5,2,3,3,3,3,3,1,3,3,3,1,2,9,9,1,1,1,5,2,3,3,1,3,3,3,3,3,3,1,3, 3,3,1,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,7,1,7,1,1,7,1,1,7,1,1,7,2,1,1,1,1,1,1, 1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,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,3,3,3,3,3,3,3,1,7,1,3,1,7,1,1,2,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,9,9,1,1,1,5,3,3,3, 3,3,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,3,1,1,5,3,1,2,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,7,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,3,3,3,3, 3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,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,3,3,3,3,3,3,2,1,1,1,1,1,1,1,1,1, 1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1, 1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,7,1,1,7,1,5,2,1,1,1,1,1,1,1,1,1,8, 1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,7,2,1,1,1,1, 1,1,1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,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,3,3,3,3,3,3,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,8,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,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,3,3,3,3,3,3,11 }; static const unsigned short far ag_pstt[] = { 312,1,148,148,6,6,6,6,6,6,6,6,6,16,16,16,16,132,15,15,4,3,21,0,0,20,21,287, 20,13,12,11,10,16,19,15,18,17,8,7,6,5,16,15,6,12,5,2,12,20,20,14,19,9, 19,14, 312,23,1,22,22,22, 24,24,2,146,24, 312,4,3,3,287,25,27,26,27,25, 312,28,28,4,3,4,287,282,28,28,290,282,9,282,290, 126,126,126,126,132,131,131,102,126,131, 119,119,119,119,119,119,119,119,119,112,112,112,112,132,118,118,100,112,118, 119, 128,128,128,128,132,128,128,99,128,128,128, 115,115,115,115,115,115,115,115,115,114,114,114,114,132,114,114,97,114,114, 114,115, 29,30,280,284,31, 90,32,10, 89,33,11, 120,120,120,120,132,125,125,88,101,120,125, 122,122,122,122,132,122,122,87,98,122,122,122, 312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,14,38,13,12,11,10, 37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,247,38, 312,1,148,148,117,117,117,117,117,117,117,117,117,104,104,104,104,132,107, 107,4,3,15,287,41,104,107,117,124,130,2,124,40,41,9,41,40, 312,1,148,148,113,113,113,113,113,113,113,113,113,105,105,105,105,132,105, 105,4,3,16,287,43,105,105,105,113,121,127,2,121,42,43,9,43,42, 312,47,45,17,287,48,49,46,49,44,49,49,49,49,49,48,9,48,44, 312,47,45,18,287,51,52,46,52,50,52,52,52,52,52,51,9,51,50, 39,241,19,242, 312,1,148,148,6,6,6,6,6,6,6,6,6,16,16,16,16,132,15,15,4,3,2,20,287,238,13, 12,11,10,16,19,15,18,17,8,7,6,5,16,15,6,12,5,2,12,238,238,14,19,9,19,14, 3,21, 53,171, 312,23,54,54,54,55, 312,57,24,56,56,56, 58,25, 29,288,30,26,284,31, 59,27, 312,107,107,4,3,28,287,283,107,291,283,9,283,291, 312,62,62,62,62,62,62,61,63,64,301,66,60,65,65,65,65,65,29,65,60,65,65,65, 67,62,67,67,68,69,70,71,72,73,74,75,76,77,77, 312,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,299,30,86,79,78,82,80, 83,81,8,7,6,5,82,80,6,78,5,2,78,85,84,84,86, 87,298, 312,89,88,32,287,91,91,90,91, 312,93,92,33,287,94,94,46,94,94,94,94,94,94,94,90,94, 312,93,92,34,287,49,49,46,49,49,49,49,49,49,49,90,49, 312,93,92,35,287,52,52,46,52,52,52,52,52,52,52,90,52, 312,1,148,148,117,117,117,117,117,117,117,117,117,104,104,104,104,132,107, 107,89,88,36,287,95,104,107,117,124,130,2,124,95,90,95, 312,1,148,148,113,113,113,113,113,113,113,113,113,105,105,105,105,132,105, 105,89,88,37,287,96,105,105,105,113,121,127,2,121,96,90,96, 312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,38,223,13,12,11,10, 37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,252, 312,100,101,102,103,104,105,106,107,108,110,111,1,148,148,218,39,6,6,6,6,6, 6,6,6,6,37,37,37,37,132,36,36,109,62,62,62,62,62,62,61,63,64,66,60,65, 65,65,65,65,39,113,65,60,65,99,98,65,112,98,97,62,67,67,68,69,70,71,72, 73,74,75,76,98,109,115,13,12,11,10,37,36,35,34,8,7,6,5,37,36,6,12,114,2, 12,113,113,113,113,113,113,115,113, 312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,40,116,13,12,11,10, 37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,251,116, 39,202,117,202,41,92,246, 312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,42,118,13,12,11,10, 37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,250,118, 39,202,117,202,43,91,245, 312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,44,119,13,12,11,10, 37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,249,119, 312,47,122,45,287,120,25,121,123,123,121,120,27,26,27,25, 29,124,261,262,31, 312,125,125,47,126,47,287,282,125,125,46,265,290,272,265,265,272,282,9,282, 290, 39,258,244, 202,117,202,49,95, 312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,50,127,13,12,11,10, 37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,248,127, 39,258,243, 202,117,202,52,94, 312,53,54,54,54,128, 174,129,174,54,172, 169,130,55, 131,151, 312,1,148,148,134,134,134,134,134,134,134,134,134,135,135,57,133,135,136, 134,132,135,134,133,132,2,133,139,139,138,137, 29,124,293,294,31, 29,124,285,286,31, 10,13, 312,62,62,62,62,62,62,61,63,64,140,60,65,65,65,65,65,61,65,60,65,65,65,29, 62, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,62,65,60,65,65,65,28,62, 28, 312,62,62,62,62,62,62,61,63,64,141,60,65,65,65,65,65,63,65,60,65,65,65,27, 62, 312,62,62,62,62,62,62,61,63,64,141,60,65,65,65,65,65,64,65,60,65,65,65,26, 62, 22,21,142,143,145,144,25, 312,1,148,148,134,134,134,134,134,134,134,134,134,146,146,62,62,62,62,62,62, 61,63,64,66,60,65,65,65,65,65,66,65,60,65,65,149,65,149,97,62,67,148,67, 68,69,70,71,72,73,74,75,76,149,133,146,147,134,132,146,134,133,132,2, 133, 150,151,152,43, 153,154,46, 155,156,49, 157,158,159,160,54, 161,162,57, 163,59, 164,61, 165,63, 166,65, 167,168,67, 302,77, 120,120,120,120,132,125,125,101,120,125, 122,122,122,122,132,122,122,98,122,122,122, 312,1,148,148,117,117,117,117,117,117,117,117,117,104,104,104,104,132,107, 107,170,191,29,191,169,80,287,193,104,107,117,124,130,2,124,192,192,193, 90,193,192,192,31, 312,172,29,171,187,287,189,46,188,190,188,190,190,189,90,189,188,188,31, 312,1,148,148,113,113,113,113,113,113,113,113,113,105,105,105,105,132,105, 105,170,184,29,184,169,82,287,186,105,105,105,113,121,127,2,121,185,185, 186,90,186,185,185,31, 312,172,29,171,180,287,182,46,181,183,181,183,183,182,90,182,181,181,31, 173,176, 300,85, 174,292,86, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,87,65,60,65,65,65,67,62, 67,67,68,69,70,71,72,73,74,75,76,175,175, 312,89,88,88,287,27,176,27, 312,177,177,89,88,89,287,282,177,177,282,90,282, 29,124,280,284,31, 202,117,202,91,93, 312,93,178,92,287,120,121,123,123,121,120,27,176,27, 312,179,179,93,180,93,287,282,179,179,46,265,272,265,265,272,282,90,282, 202,117,202,94,96, 202,117,202,95,92, 202,117,202,96,91, 181,181,181,181,181,181,181,181,181,181,181,37,181, 182,86, 11,11,11,11,11,11,11,11,11,11,11,11,196,11,11,11,11,11,11,11,11,11,11,11,11, 11,11,11,11,11,11,11,11,11,11,11,11,11,11,99, 312,183,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,100,65,60,65,65,98, 65,98,97,62,67,67,68,69,70,71,72,73,74,75,76,98,183, 235,101, 234,102, 312,103,184,184,184, 185,104, 312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61, 63,64,66,60,65,65,65,65,65,105,186,65,60,65,99,98,65,112,98,97,62,67,67, 68,69,70,71,72,73,74,75,76,98,109,112,186,186,186,186,186,186, 187,106, 188,107, 189,108, 226,109, 190,110, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,111,65,60,65,65,65,67, 62,67,67,68,69,70,71,72,73,74,75,76,191,191, 192,112, 312,100,101,102,103,104,105,106,107,108,110,111,220,39,109,62,62,62,62,62, 62,61,63,64,66,60,65,65,65,65,65,113,225,65,60,65,99,98,65,112,98,97,62, 67,67,68,69,70,71,72,73,74,75,76,98,109,112,225,225,225,225,225,225, 129,129,129,129,129,129,129,129,197,129,129,114, 312,100,101,102,103,104,105,106,107,108,110,111,1,148,148,219,39,6,6,6,6,6, 6,6,6,6,37,37,37,37,132,36,36,109,62,62,62,62,62,62,61,63,64,66,60,65, 65,65,65,65,115,193,65,60,65,99,98,65,112,98,97,62,67,67,68,69,70,71,72, 73,74,75,76,98,109,223,13,12,11,10,37,36,35,34,8,7,6,5,37,36,6,12,114,2, 12,193,193,193,193,193,193,193, 312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,116,223,13,12,11, 10,37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,256, 312,194,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,117,65,60,65,65,65, 203,97,62,67,67,68,69,70,71,72,73,74,75,76,203,203, 312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,118,223,13,12,11, 10,37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,255, 312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,119,223,13,12,11, 10,37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,254, 29,124,120,195,31, 196,121, 312,47,122,122,287,197,25,121,123,123,121,197,27,26,27,25, 198,123, 312,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,299,124,79,78,82,80, 83,81,8,7,6,5,82,80,6,78,5,2,78,85,84,84, 312,107,107,47,199,125,287,283,107,46,266,291,273,266,266,273,283,9,283,291, 312,47,122,126,287,200,25,121,123,123,121,200,27,26,27,25, 312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,127,223,13,12,11, 10,37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,253, 170,130,128, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,129,65,60,65,65,65,67, 62,67,67,68,69,70,71,72,73,74,75,76,175,175, 312,130,201,201,201, 312,1,148,148,134,134,134,134,134,134,134,134,134,135,135,131,133,135,136, 134,132,135,134,133,132,2,133,202,202,138,137, 131,131,102,131, 125,125,101,125, 119,119,119,119,119,119,119,119,119,118,118,100,118,119, 312,1,148,148,117,117,117,117,117,117,117,117,117,107,107,203,89,88,135,287, 204,107,117,124,130,2,124,158,158,204,90,204, 312,203,93,92,136,287,205,205,46,160,160,205,205,205,205,205,205,205,90,205, 157,206,137, 156,207,138, 312,1,148,148,149,134,134,134,134,134,134,134,134,134,135,135,139,133,135, 136,134,132,135,134,133,132,2,133,155,138,137, 312,1,148,148,134,134,134,134,134,134,134,134,134,146,146,62,62,62,62,62,62, 61,63,64,66,60,65,65,65,65,65,140,65,60,65,65,149,65,149,97,62,67,208, 67,68,69,70,71,72,73,74,75,76,149,133,146,147,134,132,146,134,133,132,2, 133, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,141,65,60,65,65,149,65, 149,97,62,67,67,68,69,70,71,72,73,74,75,76,149, 312,142,20,20,20, 312,143,19,19,19, 312,62,62,62,62,62,62,61,63,64,17,66,60,65,65,65,65,65,144,65,60,65,65,65, 209,209,97,62,67,67,68,69,70,71,72,73,74,75,76,209, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,145,65,60,65,65,210,65, 210,97,62,67,67,68,69,70,71,72,73,74,75,76,210, 312,1,148,148,117,117,117,117,117,117,117,117,117,107,107,212,29,200,211, 146,107,117,124,130,2,124,201,201,201,201,31, 212,29,211,198,199,199,199,199,31, 213,148, 182,14,149, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,150,65,60,65,65,65,42, 62,42, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,151,65,60,65,65,65,41, 62,41, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,152,65,60,65,65,65,40, 62,40, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,153,65,60,65,65,65,214, 62,214,214, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,154,65,60,65,65,65,215, 62,215,215, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,155,65,60,65,65,65,67, 62,67,67,216, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,156,65,60,65,65,65,67, 62,67,67,217, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,157,65,60,65,65,65,67, 62,67,67,68,218, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,158,65,60,65,65,65,67, 62,67,67,68,219, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,159,65,60,65,65,65,67, 62,67,67,68,220, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,160,65,60,65,65,65,67, 62,67,67,68,221, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,161,65,60,65,65,65,67, 62,67,67,68,69,222, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,162,65,60,65,65,65,67, 62,67,67,68,69,223, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,163,65,60,65,65,65,67, 62,67,67,68,69,70,224, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,164,65,60,65,65,65,67, 62,67,67,68,69,70,71,225, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,165,65,60,65,65,65,67, 62,67,67,68,69,70,71,72,226, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,166,65,60,65,65,65,67, 62,67,67,68,69,70,71,72,73,227, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,167,65,60,65,65,228,65, 228,97,62,67,67,68,69,70,71,72,73,74,75,76,228, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,168,65,60,65,65,65,67, 62,67,67,68,69,70,71,72,73,74,229, 312,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,170,29,299,169,169, 287,79,78,82,80,83,81,8,7,6,5,82,80,6,78,5,2,78,85,84,84,230,27,176,27, 232,231,31, 312,233,233,170,29,169,304,287,282,233,233,306,306,282,90,282,306,306,31, 312,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,172,29,299,171,171, 287,79,78,82,80,83,81,8,7,6,5,82,80,6,78,5,2,78,85,84,84,230,123,123,27, 176,27,232,231,31, 312,234,234,172,29,171,304,287,282,234,234,46,306,265,306,265,265,282,90, 282,306,306,31, 312,177,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,173,79,78,82,80, 83,81,8,7,6,5,82,80,6,78,5,2,78,179, 312,174,195, 303,175, 29,288,124,176,284,31, 312,107,107,89,88,177,287,283,107,283,90,283, 312,93,178,178,287,197,121,123,123,121,197,27,176,27, 312,107,107,93,235,179,287,283,107,46,266,273,266,266,273,283,90,283, 312,93,178,180,287,200,121,123,123,121,200,27,176,27, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,181,65,60,65,65,65,70, 97,62,67,67,68,69,70,71,72,73,74,75,76,70, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,182,65,60,65,65,65,83, 97,62,67,67,68,69,70,71,72,73,74,75,76,83, 236,183, 233,184, 312,236,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,185,65,60,65,65,98, 65,98,97,62,67,67,68,69,70,71,72,73,74,75,76,98,236, 237,186, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,187,65,60,65,65,238,65, 238,97,62,67,67,68,69,70,71,72,73,74,75,76,238, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,188,65,60,65,65,239,65, 239,97,62,67,67,68,69,70,71,72,73,74,75,76,239, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,189,65,60,65,65,240,65, 240,97,62,67,67,68,69,70,71,72,73,74,75,76,240, 312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61, 63,64,66,60,65,65,65,65,65,190,217,65,60,65,99,98,65,112,98,97,62,67,67, 68,69,70,71,72,73,74,75,76,98,109,112,217,217,217,217,217,217, 241,191, 312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61, 63,64,66,60,65,65,65,65,65,192,215,65,60,65,99,98,65,112,98,97,62,67,67, 68,69,70,71,72,73,74,75,76,98,109,112,215,215,215,215,215,215, 312,100,101,102,103,104,105,106,107,108,110,111,221,39,109,62,62,62,62,62, 62,61,63,64,66,60,65,65,65,65,65,193,225,65,60,65,99,98,65,112,98,97,62, 67,67,68,69,70,71,72,73,74,75,76,98,109,112,225,225,225,225,225,225, 312,194,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,194,65,60,65,65,65, 242,97,62,67,67,68,69,70,71,72,73,74,75,76,242,242,242, 275,195, 29,124,274,276,31, 29,278,124,197,195,31, 29,124,267,268,31, 312,47,122,199,287,243,25,121,123,123,121,243,27,26,27,25, 29,270,124,200,195,31, 174,129,174,201,173, 312,1,148,148,150,134,134,134,134,134,134,134,134,134,135,135,202,133,135, 136,134,132,135,134,133,132,2,133,155,138,137, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,203,65,60,65,65,65,67, 62,67,67,68,69,70,71,72,73,74,75,76,168,168, 166,203,166,204,164,164, 166,203,166,205,162,162, 312,203,89,88,206,287,204,159,159,204,90,204, 312,203,93,92,207,287,205,205,46,161,161,205,205,205,205,205,205,205,90,205, 30,208, 244,18,209, 182,16,210, 312,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,212,29,299,211,211,79, 78,82,80,83,81,8,7,6,5,82,80,6,78,5,2,78,85,84,84,230,232,231,31, 245,245,212,29,211,304,245,245,306,306,306,306,31, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,213,65,60,65,65,65,38, 62,38, 150,151,152,45, 150,151,152,44, 153,154,48, 153,154,47, 155,156,53, 155,156,52, 155,156,51, 155,156,50, 157,158,159,160,56, 157,158,159,160,55, 161,162,58, 163,60, 164,62, 165,64, 246,182,228, 166,66, 310,230, 309,231, 247,232, 312,107,107,170,29,169,305,287,283,107,307,307,283,90,283,307,307,31, 312,107,107,172,29,171,305,287,283,107,46,307,266,307,266,266,283,90,283, 307,307,31, 312,93,178,235,287,243,121,123,123,121,243,27,176,27, 248,236, 249,237, 182,250,238, 182,251,239, 182,252,240, 312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61, 63,64,66,60,65,65,65,65,65,241,216,65,60,65,99,98,65,112,98,97,62,67,67, 68,69,70,71,72,73,74,75,76,98,109,112,216,216,216,216,216,216, 204,253,242, 29,271,124,243,195,31, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,244,65,60,65,65,65,24, 97,62,67,67,68,69,70,71,72,73,74,75,76,24, 107,107,212,29,211,305,107,307,307,307,307,31, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,246,65,60,65,65,65,67, 62,67,67,68,69,70,71,72,73,74,75,76,68, 29,124,308,311,31, 312,254,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,248,65,60,65,65,98, 65,98,97,62,67,67,68,69,70,71,72,73,74,75,76,98,254, 312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,249,65,60,65,65,255,65, 255,97,62,67,67,68,69,70,71,72,73,74,75,76,255, 312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61, 63,64,66,60,65,65,65,65,65,250,230,65,60,65,99,98,65,112,98,97,62,67,67, 68,69,70,71,72,73,74,75,76,98,109,112,230,230,230,230,230,230, 312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61, 63,64,66,60,65,65,65,65,65,251,229,65,60,65,99,98,65,112,98,97,62,67,67, 68,69,70,71,72,73,74,75,76,98,109,112,229,229,229,229,229,229, 312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61, 63,64,66,60,65,65,65,65,65,252,256,65,60,65,99,98,65,112,98,97,62,67,67, 68,69,70,71,72,73,74,75,76,98,109,112,256,256,256,256,256,256, 312,205,194,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,253,65,60,65,65, 65,208,97,62,67,67,68,69,70,71,72,73,74,75,76,208,208, 257,254, 182,258,255, 259,227, 312,62,62,62,62,62,62,61,63,64,260,66,60,65,65,65,65,65,257,65,60,65,65,98, 65,98,97,62,67,67,68,69,70,71,72,73,74,75,76,98,260, 231,258, 312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61, 63,64,66,60,65,65,65,65,65,259,228,65,60,65,99,98,65,112,98,97,62,67,67, 68,69,70,71,72,73,74,75,76,98,109,112,228,228,228,228,228,228, 261,260, 312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61, 63,64,66,60,65,65,65,65,65,261,232,65,60,65,99,98,65,112,98,97,62,67,67, 68,69,70,71,72,73,74,75,76,98,109,112,232,232,232,232,232,232, 0 }; static const unsigned short far ag_sbt[] = { 0, 56, 62, 67, 77, 92, 102, 122, 133, 154, 159, 162, 165, 176, 188, 232, 269, 307, 326, 345, 349, 402, 404, 406, 412, 418, 420, 426, 428, 442, 481, 525, 527, 536, 553, 570, 587, 622, 658, 701, 804, 848, 855, 899, 906, 950, 966, 971, 992, 995,1000,1044,1047,1052,1058,1063, 1066,1068,1099,1104,1109,1111,1136,1162,1187,1212,1219,1284,1288,1291, 1294,1299,1302,1304,1306,1308,1310,1313,1315,1325,1336,1379,1398,1442, 1461,1463,1465,1468,1506,1514,1527,1532,1537,1551,1570,1575,1580,1585, 1598,1600,1640,1681,1683,1685,1690,1692,1754,1756,1758,1760,1762,1764, 1802,1804,1867,1879,1981,2024,2064,2107,2150,2155,2157,2173,2175,2217, 2237,2253,2296,2299,2337,2342,2373,2377,2381,2395,2427,2447,2450,2453, 2484,2549,2588,2593,2598,2638,2677,2708,2717,2719,2722,2748,2774,2800, 2827,2854,2882,2910,2939,2968,2997,3026,3056,3086,3117,3149,3182,3216, 3255,3290,3343,3362,3417,3440,3480,3483,3485,3491,3503,3517,3535,3549, 3587,3625,3627,3629,3670,3672,3711,3750,3789,3851,3853,3915,3978,4019, 4021,4026,4032,4037,4053,4059,4064,4095,4133,4139,4145,4157,4177,4179, 4182,4185,4234,4247,4273,4277,4281,4284,4287,4290,4293,4296,4299,4304, 4309,4312,4314,4316,4318,4321,4323,4325,4327,4329,4347,4369,4383,4385, 4387,4390,4393,4396,4458,4461,4467,4505,4517,4554,4559,4600,4639,4701, 4763,4825,4866,4868,4871,4873,4914,4916,4978,4980,5042 }; static const unsigned short far ag_sbe[] = { 23, 58, 64, 70, 82, 99, 118, 129, 149, 156, 161, 164, 173, 184, 209, 254, 291, 310, 329, 347, 372, 403, 405, 407, 414, 419, 423, 427, 433, 460, 502, 526, 530, 539, 556, 573, 609, 644, 679, 751, 825, 852, 876, 903, 927, 953, 968, 976, 993, 998,1021,1045,1050,1053,1061,1065, 1067,1083,1101,1106,1110,1128,1153,1179,1204,1218,1250,1287,1290,1293, 1298,1301,1303,1305,1307,1309,1312,1314,1322,1332,1361,1383,1423,1446, 1462,1464,1467,1485,1509,1519,1529,1535,1540,1556,1573,1578,1583,1596, 1599,1639,1658,1682,1684,1686,1691,1722,1755,1757,1759,1761,1763,1781, 1803,1835,1878,1929,2002,2042,2085,2128,2152,2156,2160,2174,2196,2222, 2240,2274,2298,2316,2338,2357,2375,2379,2392,2413,2431,2449,2452,2469, 2515,2566,2589,2594,2616,2655,2696,2711,2718,2721,2739,2765,2791,2817, 2844,2871,2899,2927,2956,2985,3014,3043,3073,3103,3134,3166,3199,3233, 3272,3314,3349,3386,3423,3461,3481,3484,3488,3496,3506,3522,3538,3566, 3604,3626,3628,3647,3671,3689,3728,3767,3819,3852,3883,3946,3996,4020, 4023,4029,4034,4040,4056,4062,4080,4112,4136,4142,4149,4161,4178,4181, 4184,4209,4239,4264,4276,4280,4283,4286,4289,4292,4295,4298,4303,4308, 4311,4313,4315,4317,4320,4322,4324,4326,4328,4335,4353,4372,4384,4386, 4389,4392,4395,4426,4460,4464,4484,4510,4534,4556,4577,4617,4669,4731, 4793,4844,4867,4870,4872,4891,4915,4946,4979,5010,5042 }; static const unsigned char far ag_fl[] = { 1,0,1,2,1,1,1,1,1,1,2,1,1,1,3,1,4,3,4,3,3,2,2,1,3,1,2,2,2,2,4,1,1,1,1, 1,1,1,4,1,3,3,3,1,3,3,1,3,3,1,3,3,3,3,1,3,3,1,3,1,3,1,3,1,3,1,3,1,5,1, 3,1,1,1,1,1,1,1,1,1,1,1,1,3,1,0,1,2,2,2,2,3,3,4,3,3,4,1,1,1,1,1,1,1,2, 2,1,2,1,1,1,1,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,2,1,0,4,5,2,1,1,1,2,2,2,2,3,2,3,2,1,2,1,0,1,2,4,5,2,2,4,0, 2,1,3,1,3,1,2,2,2,1,2,2,1,2,2,2,1,2,2,1,3,1,1,1,2,1,2,0,2,3,4,1,1,3,1, 1,1,1,1,1,3,4,3,2,3,3,4,1,2,1,2,2,5,7,5,5,7,9,3,2,2,3,1,2,1,1,2,2,3,3, 3,3,2,3,3,3,3,3,4,4,4,4,1,1,1,1,1,2,1,1,2,3,3,4,1,4,5,2,3,3,4,4,1,3,1, 1,1,2,3,2,3,4,1,3,1,2,3,4,3,4,1,1,1,1,2,3,2,3,4,1,2,2,3,3,3,3,4,1 }; static const unsigned char far ag_ptt[] = { 0, 4, 4, 1, 6, 6, 6, 6, 6, 12, 12, 14, 14, 14, 14, 19, 19, 19, 19, 19, 19, 19, 19, 22, 22, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 32, 32, 41, 41, 41, 41, 44, 44, 44, 45, 45, 45, 48, 48, 48, 48, 48, 53, 53, 53, 56, 56, 57, 57, 59, 59, 61, 61, 63, 63, 65, 65, 28, 28, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 17, 17, 80, 81, 81, 82, 82, 82, 82, 87, 87, 87, 86, 86, 86, 92, 92, 92, 94, 94, 94, 88, 88, 88, 91, 91, 100,100,101,101, 95, 95, 95, 95, 97, 97, 97, 97, 83, 83, 83, 85, 85, 85, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99,104,104,104,104,104,104,104, 104,104,105,105,121,122,122,122,124,124,126,126,130,130,132,132,131,131, 134,134,133,133,135,135,136,123,123,123,138,138,139,139,140,140,141,141, 143,143,143,143,143,143,143,143,143,143,143,143,143,143,146,146, 24, 24, 34, 34, 34, 34, 90, 90,147,147,147,148,148, 2, 2, 2, 2, 2, 2,149, 149,149,150,150,150,150,157,157,158,158,151,152,152,152,153,153,153,154, 154,154,154, 3, 3,169,169,169,170,170,170,170,170,170,170,170,170,170, 170,170,170,170,170, 93, 93,172,172,145,145,145,175,175,175,176,176,173, 173,173,173,173,177,177,177,178,178, 89, 89,179,179,179,181,181,181,180, 180,171,171,171,182,182,182,144,144,144,174,174,174,185,185,185,183,183, 183,183,184,184,184,184, 15 }; static const unsigned char far *ag_valid(int ag_k) { const unsigned char far *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 cc_change_reduction(cc_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((cc_token_type) *ag_tp)) ag_tp++; (PCB).reduction_token = (cc_token_type) *ag_tp; } static void ag_ra(void) { switch(ag_rpx[(PCB).ag_ap]) { case 1: ag_rp_1(); break; case 2: ag_rp_2(V(0,(int *))); break; case 3: V(0,(int *)) = ag_rp_3(); break; case 4: ag_rp_4(V(0,(token *))); break; case 5: ag_default(&ag_rtt[0]); V(0,(token *)) = ag_rp_5(V(0,(token *))); break; } } #define TOKEN_NAMES cc_token_names const char *const cc_token_names[187] = { "prog start", "prog start", "statement", "translation unit", "", "eof", "constant", "FLOATINGconstant", "INTEGERconstant", "OCTALconstant", "HEXconstant", "CHARACTERconstant", "string literal list", "STRINGliteral", "primary expression", "IDENTIFIER", "'('", "expression", "')'", "postfix expression", "'['", "']'", "argument expression list", "'.'", "identifier or typedef name", "ARROW", "ICR", "DECR", "assignment expression", "','", "unary expression", "unary operator", "cast expression", "SIZEOF", "type name", "'&'", "'*'", "'+'", "'-'", "'~'", "'!'", "multiplicative expression", "'/'", "'%'", "additive expression", "shift expression", "LS", "RS", "relational expression", "'<'", "'>'", "LE", "GE", "equality expression", "EQ", "NE", "AND expression", "exclusive OR expression", "'^'", "inclusive OR expression", "'|'", "logical AND expression", "ANDAND", "logical OR expression", "OROR", "conditional expression", "'\\?'", "':'", "assignment operator", "'='", "MULTassign", "DIVassign", "MODassign", "PLUSassign", "MINUSassign", "LSassign", "RSassign", "ANDassign", "ERassign", "ORassign", "constant expression", "expression opt", "declaration", "sue declaration specifier", "';'", "sue type specifier", "declaring list", "default declaring list", "declaration qualifier list", "identifier declarator", "initializer opt", "type qualifier list", "declaration specifier", "declarator", "type specifier", "basic declaration specifier", "typedef declaration specifier", "basic type specifier", "typedef type specifier", "storage class", "declaration qualifier", "type qualifier", "CONST", "VOLATILE", "basic type name", "elaborated type name", "TYPEDEFname", "TYPEDEF", "EXTERN", "STATIC", "AUTO", "REGISTER", "VOID", "CHAR", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE", "SIGNED", "UNSIGNED", "save flag", "struct or union specifier", "enum specifier", "struct or union", "'{'", "struct declaration list", "'}'", "STRUCT", "UNION", "struct declaration", "struct declaring list", "struct default declaring list", "struct identifier declarator", "struct declarator", "bit field size opt", "bit field size", "ENUM", "enumerator list", "enumerator value opt", "parameter type list", "parameter list", "ELLIPSIS", "parameter declaration", "abstract declarator", "parameter typedef declarator", "identifier list", "initializer", "initializer list", "labeled statement", "compound statement", "expression statement", "selection statement", "iteration statement", "jump statement", "CASE", "DEFAULT", "declaration list", "statement list", "IF", "ELSE", "SWITCH", "WHILE", "DO", "FOR", "GOTO", "CONTINUE", "BREAK", "RETURN", "external definition", "function definition", "old function declarator", "typedef declarator", "paren typedef declarator", "postfixing abstract declarator", "clean typedef declarator", "clean postfix typedef declarator", "paren postfix typedef declarator", "simple paren typedef declarator", "unary identifier declarator", "paren identifier declarator", "postfix identifier declarator", "postfix old function declarator", "unary abstract declarator", "postfix abstract declarator", "array abstract declarator", "NAME", }; #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).input_code)) && ((PCB).input_code) != '\\') { char buf[20]; sprintf(buf, "\'%c\'", (char) ((PCB).input_code)); 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_action_10_proc(void) { (PCB).btsx = 0, (PCB).drt = -1; ag_track(); return 0; } static int ag_action_11_proc(void) { (PCB).btsx = 0, (PCB).drt = -1; (*(token *) &(PCB).vs[(PCB).ssx]) = (PCB).input_value; (PCB).ssx--; ag_ra(); (PCB).ssx++; ag_track(); return 0; } 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 = (cc_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 = (cc_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 = (cc_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; } (*(token *) &(PCB).vs[(PCB).ssx]) = (PCB).input_value; (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).ss[(PCB).ssx] = (PCB).sn; (PCB).ssx++; (PCB).sn = (PCB).ag_ap; return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_2_r_proc(void) { (PCB).ssx++; (PCB).sn = (PCB).ag_ap; return 0; } static int ag_action_7_proc(void) { --(PCB).ssx; (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_1_proc(void) { (PCB).exit_flag = AG_SUCCESS_CODE; ag_track(); 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 = (cc_token_type) ag_ptt[(PCB).ag_ap]; (PCB).btsx = 0, (PCB).drt = -1; (*(token *) &(PCB).vs[(PCB).ssx]) = (PCB).input_value; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (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 ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; } return 0; } static int ag_action_3_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; (PCB).btsx = 0, (PCB).drt = -1; (*(token *) &(PCB).vs[(PCB).ssx]) = (PCB).input_value; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (PCB).ss[(PCB).ssx] = (PCB).sn; ag_track(); (PCB).reduction_token = (cc_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 ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; } return 0; } static int ag_action_8_proc(void) { ag_undo(); ag_trace_error(); (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; ag_diagnose(); SYNTAX_ERROR; ag_track(); return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_5_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap]; (PCB).btsx = 0, (PCB).drt = -1; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else { (PCB).ss[(PCB).ssx] = (PCB).sn; } (PCB).reduction_token = (cc_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 ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break; } return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_6_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap]; (PCB).reduction_token = (cc_token_type) ag_ptt[(PCB).ag_ap]; if ((PCB).drt == -1) { (PCB).drt=(PCB).token_number; (PCB).dssx=(PCB).ssx; (PCB).dsn=(PCB).sn; } if (ag_sd) { (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; } else { ag_prot(); (PCB).vs[(PCB).ssx] = ag_null_value; (PCB).ss[(PCB).ssx] = (PCB).sn; } while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); if (ag_tstt[ag_t1] != (PCB).reduction_token) { (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; ag_trace_error(); REDUCTION_TOKEN_ERROR; break;} (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break; } return (PCB).exit_flag == AG_RUNNING_CODE; } void init_cc(void) { unsigned ag_t1; ag_t1 = 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; while (ag_tstt[ag_t1] == 0) { (PCB).ag_ap = ag_pstt[ag_t1]; (ag_gt_procs_scan[ag_astt[ag_t1]])(); ag_t1 = ag_sbt[(PCB).sn]; } } void cc(void) { (PCB).token_number = (cc_token_type) AG_TCV((PCB).input_code); while (1) { unsigned ag_t1 = ag_sbt[(PCB).sn]; unsigned ag_t2 = ag_sbe[(PCB).sn] - 1; 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]; if ((ag_gt_procs_scan[ag_astt[ag_t1]])() == 0) break; } }