Mercurial > ~dholland > hg > ag > index.cgi
view tests/agcl/oldagsrc/good/y2ag.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
/* YACC to AnaGram converter. Copyright (c) Jerome T. Holland, 1993 All Rights Reserved. Converts YACC files to AnaGram, attempting to preserve comments. Does not convert semantic actions. */ /* * 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 Y2AG_H #include "y2ag.h" #endif #ifndef Y2AG_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]) y2ag_pcb_type y2ag_pcb; #define PCB y2ag_pcb #line - "y2ag.syn" #include <ctype.h> #include <stdio.h> #include "charsink.h" #include "strdict.h" string_accumulator c_code(64000); string_accumulator comments(10000); string_accumulator name(100); string_accumulator white(100); string_accumulator config(1000); string_accumulator type_acc(100); string_dictionary decl_dict(100); char decl_name[100] = ""; int decl_table[100]; output_file out; char *cs; char *type_string = "int AG_RTV;\n"; int rvflag; char *grammar_tag = " $"; void dump_comments(char *ps, char *cs) { if (size(comments) == 0) return; out << (char *) white << ps << (char *) comments << cs; reset(comments); } void output_r(void) { char *rs = ""; char *ts = ""; if (size(c_code) == 0) return; out.printf(" ={%s%s%s}", ts,(char *) c_code,rs); reset(c_code); } void output_il(void) { char *rs = ""; char *ts = ""; if (size(c_code) == 0) return; out.printf("%s!{\n%s%s%s}", cs, ts, (char *) c_code,rs); reset(c_code); cs = ",\n "; } void main(void) { y2ag(); } #line - "y2ag.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 - "y2ag.syn" if (size(config)) out << "\n[\n" << (char *) config << "]\n"; #line - "y2ag.cpp" } #define ag_rp_2() (comments << "*/") #define ag_rp_3() (comments << "/*") #define ag_rp_4(x) (comments << x) #define ag_rp_5() (reset(white),out << '\n',dump_comments("", "")) #define ag_rp_6() (reset(white), dump_comments("\t", "")) #define ag_rp_7() (reset(white), dump_comments("", "")) #define ag_rp_8() (out << '\n', dump_comments("", "")) #define ag_rp_9() (dump_comments("\t", "")) #define ag_rp_10(c) (reset(white), dump_comments("", "")) #define ag_rp_11(c) (reset(white) << c,dump_comments("", "")) #define ag_rp_12() (reset(white),dump_comments("", "")) #define ag_rp_13(c) (dump_comments("\t", "")) #define ag_rp_14(c) (white << c, dump_comments("", "")) #define ag_rp_15(c) (reset(white),out << cs, cs = "", dump_comments("", "")) #define ag_rp_16(c) (reset(white) << c,dump_comments("", "")) #define ag_rp_17() (reset(white),dump_comments("", "")) #define ag_rp_18(c) (out << cs, cs = "",dump_comments("", "")) #define ag_rp_19(c) (white << c, dump_comments("", "")) #define ag_rp_20() (dump_comments("\n","\n")) static void ag_rp_21(void) { #line - "y2ag.syn" out.printf("[ grammar token = %s ]\n",(char *) name); grammar_tag = ""; #line - "y2ag.cpp" } #define ag_rp_22() (out << '\n') #define ag_rp_23() (config << "}\n") #define ag_rp_24() (config << "}\n") #define ag_rp_25() (config << "}\n") #define ag_rp_26() (out << '\n') #define ag_rp_27() (out << '\n') #define ag_rp_28() (reset(name)) static void ag_rp_29(void) { #line - "y2ag.syn" int decl_ndx = decl_dict << decl_name; int type_ndx = decl_dict << (char *) type_acc; decl_table[decl_ndx] = type_ndx; reset(type_acc); reset(name); *decl_name = 0; #line - "y2ag.cpp" } #define ag_rp_30() (type_acc << (char *) decl_name, strcpy(decl_name, name), reset(name)) static void ag_rp_31(void) { #line - "y2ag.syn" if (*decl_name) type_acc << (char *) decl_name << ' ', *decl_name = 0; #line - "y2ag.cpp" } #define ag_rp_32() (type_acc << (char *) decl_name << '*', *decl_name = 0) #define ag_rp_33(n) (out.printf("/* expect %d unresolved conflicts */\n",n)) #define ag_rp_34() (config << " left {") #define ag_rp_35() (config << " nonassoc {") #define ag_rp_36() (config << " right {") #define ag_rp_37() (out << '(' << decl_dict[decl_table[decl_dict[name]]] << ") ", reset(name)) #define ag_rp_38() (out << (char *) name, cs = ", ") #define ag_rp_39() (out << cs << (char *) name) #define ag_rp_40() (out << cs << (char *) name) #define ag_rp_41(n) (out.printf(" = %d\n",n)) #define ag_rp_42() (config<< (char *) name, cs = ", ") #define ag_rp_43() (config << cs << (char *) name) #define ag_rp_44() (config << cs << (char *) name) #define ag_rp_45(n) (config.printf("/* = %d*/",n)) #define ag_rp_46() (out << "\n{\n" << (char *) c_code << "\n}\n",reset(c_code)) #define ag_rp_47() (reset(c_code), rvflag = 0) #define ag_rp_48(x) (c_code << x) #define ag_rp_49() (c_code << '$') #define ag_rp_50() (c_code << '}') #define ag_rp_51() (c_code << '"') #define ag_rp_52() (c_code << "*/") #define ag_rp_53() (c_code << "/*") #define ag_rp_54(x) (c_code << x) #define ag_rp_55(d) (d - '0') #define ag_rp_56(n, d) (10*n + d - '0') #define ag_rp_57() (c_code << '{') #define ag_rp_58(x) (c_code << '\'' << x << '\'') #define ag_rp_59(x) (c_code << x) #define ag_rp_60(x) (c_code << x) #define ag_rp_61() (c_code << '"') #define ag_rp_62(x) (c_code << x) #define ag_rp_63(x) (c_code << '\\' << x) #define ag_rp_64() (output_r()) static void ag_rp_65(void) { #line - "y2ag.syn" out << (char *) name << grammar_tag; grammar_tag = ""; cs = "\n -> "; dump_comments("\t",""); #line - "y2ag.cpp" } #define ag_rp_66() (output_r(), out << "\n -> ", cs = "") #define ag_rp_67() (out << cs, cs = "") static void ag_rp_68(void) { #line - "y2ag.syn" output_il(); out.printf("%s%s",cs,(char *) name); cs = ", "; #line - "y2ag.cpp" } static void ag_rp_69(int x) { #line - "y2ag.syn" char *fmt = "%d"; if (isprint(x)) fmt ="'%c'"; reset(name).printf(fmt,x); output_il(); out.printf("%s%s",cs,(char *) name); cs = ", "; #line - "y2ag.cpp" } #define ag_rp_70() (out.printf(" /* %prec %s */",(char *) name)) #define ag_rp_71() (dump_comments("\t","")) static void ag_rp_72(int x) { #line - "y2ag.syn" char *fmt = "%d"; if (isprint(x)) fmt ="'%c'"; reset(name).printf(fmt,x); #line - "y2ag.cpp" } #define ag_rp_73(x) (x) #define ag_rp_74(x) (x) #define ag_rp_75() ('\n') #define ag_rp_76() ('\r') #define ag_rp_77() ('\b') #define ag_rp_78() ('\b') #define ag_rp_79() ('\v') #define ag_rp_80(x) (x&037) #define ag_rp_81(x) (x) #define ag_rp_82(x) (reset(name) << x) #define ag_rp_83(x) (name << x) #define ag_rp_84() (name << ' ') #define ag_rp_85(x) (x-'0') #define ag_rp_86(v, x) (8*v + x-'0') #define ag_rp_87() (out << "\n}\n") #define ag_rp_88() (out << "\n{\n") #define ag_rp_89(x) (out << x) #define READ_COUNTS #define WRITE_COUNTS #undef V #define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i])) #undef VS #define VS(i) (PCB).vs[(PCB).ssx + i] #ifndef GET_CONTEXT #define GET_CONTEXT CONTEXT = (PCB).input_context #endif typedef enum { ag_action_1, ag_action_2, ag_action_3, ag_action_4, ag_action_5, ag_action_6, ag_action_7, ag_action_8, ag_action_9, ag_action_10, ag_action_11, ag_action_12 } ag_parser_action; #ifndef NULL_VALUE_INITIALIZER #define NULL_VALUE_INITIALIZER = 0 #endif static int const ag_null_value NULL_VALUE_INITIALIZER; static const unsigned char ag_rpx[] = { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 3, 4, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 20, 21, 0, 0, 22, 0, 0, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 30, 0, 0, 31, 32, 0, 0, 0, 33, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 38, 39, 40, 41, 42, 43, 44, 45, 0, 46, 0, 0, 0, 47, 0, 48, 49, 0, 50, 0, 51, 52, 53, 54, 55, 56, 57, 0, 58, 0, 59, 60, 61, 0, 62, 63, 0, 0, 0, 0, 0, 0, 64, 65, 0, 0, 66, 0, 0, 0, 0, 67, 0, 0, 0, 68, 69, 0, 0, 70, 0, 0, 71, 0, 72, 73, 74, 0, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 0, 87, 88, 89 }; static const unsigned char ag_key_itt[] = { 0 }; static const unsigned short ag_key_pt[] = { 0 }; static const unsigned char ag_key_ch[] = { 0,101,111,121,255, 37, 48, 50, 60, 62, 98,101,108,110,114,115,116,117, 123,255, 37, 47,255, 42,255,101,111,121,255, 37, 48, 50, 60, 62, 98,101, 108,110,114,115,116,117,123,255, 37,255, 37,255, 47,255, 37, 47,255, 37, 123,255, 37, 47,255, 37,123,255, 37,255,101,111,121,255, 37, 48, 50, 60, 61, 62, 98,101,108,110,112,114,115,116,117,123,255, 37, 47,255, 61,112, 255, 37, 47,255, 37, 47,255, 61,112,255, 37,255 }; static const unsigned char ag_key_act[] = { 0,3,3,3,4,0,0,0,0,0,3,3,3,3,3,3,2,3,0,4,2,3,4,3,4,3,3,3,4,0,0,0,0,0,3, 3,3,3,3,3,2,3,0,4,2,4,3,4,3,4,3,3,4,0,0,4,2,3,4,0,0,4,2,4,3,3,3,4,0,0, 0,0,0,0,3,3,3,3,3,3,3,2,3,0,4,2,3,4,0,3,4,2,3,4,3,3,4,0,3,4,2,4 }; static const unsigned char ag_key_parm[] = { 0, 73, 72, 76, 0, 12, 74, 66, 61, 69, 65, 58, 60, 64, 68, 71, 0, 79, 83, 0, 0, 19, 0, 18, 0, 73, 72, 76, 0, 12, 74, 66, 61, 69, 65, 58, 60, 64, 68, 71, 0, 79, 83, 0, 0, 0, 12, 0, 19, 0, 85, 19, 0, 12, 83, 0, 0, 19, 0, 12, 83, 0, 0, 0, 73, 72, 76, 0, 12, 74, 66, 61, 126, 69, 65, 58, 60, 64,125, 68, 71, 0, 79, 83, 0, 0, 19, 0,126,125, 0, 0, 19, 0, 12, 19, 0,126,125, 0, 0, 0 }; static const unsigned char ag_key_jmp[] = { 0, 34, 37, 41, 0, 0, 0, 0, 0, 0, 0, 6, 12, 16, 24, 29, 1, 44, 0, 0, 5, 49, 0, 51, 0, 87, 90, 94, 0, 0, 0, 0, 0, 0, 53, 59, 65, 69, 77, 82, 25, 97, 0, 0, 29, 0,102, 0,104, 0,106,108, 0, 0, 0, 0, 53,110, 0, 0, 0, 0, 59, 0,150,153,157, 0, 0, 0, 0, 0, 0, 0,112,118,124,128,136,140,145, 64,160, 0, 0, 68,165, 0, 0,167, 0, 88,171, 0,173,175, 0, 0,177, 0, 97, 0 }; static const unsigned char ag_key_index[] = { 20, 23, 20, 20, 44, 44, 20, 20, 44, 46, 48, 48, 48, 48, 48, 48, 50, 48, 48, 20, 0, 0, 0, 0, 0, 0, 0, 56, 0, 48, 20, 50, 48, 0, 48, 0, 20, 20, 20, 0, 20, 48, 20, 0, 0, 20, 20, 62, 20, 23, 0, 0, 48, 20, 0, 20, 0, 85, 85, 44, 44, 44, 44, 44, 44, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 0, 46, 0, 0, 0, 48, 48, 44, 48, 20, 85, 85, 48, 20, 48, 0, 48, 91, 94, 46, 46, 0, 0, 0,100, 0, 0, 0, 91, 91,100, 91, 91, 100, 91, 0, 0, 0, 48, 48, 91, 91, 91, 48, 48, 91, 48, 0, 48, 0, 48, 0, 0, 0, 48 }; static const unsigned char ag_key_ends[] = { 105,110,97,114,121,0, 120,112,101,99,116,0, 101,102,116,0, 111,110,97,115,115,111,99,0, 105,103,104,116,0, 116,97,114,116,0, 114,109,0, 107,101,110,0, 112,101,0, 110,105,111,110,0, 42,0, 47,0, 105,110,97,114,121,0, 120,112,101,99,116,0, 101,102,116,0, 111,110,97,115,115,111,99,0, 105,103,104,116,0, 116,97,114,116,0, 114,109,0, 107,101,110,0, 112,101,0, 110,105,111,110,0, 37,0, 42,0, 125,0, 42,0, 42,0, 105,110,97,114,121,0, 120,112,101,99,116,0, 101,102,116,0, 111,110,97,115,115,111,99,0, 114,101,99,0, 105,103,104,116,0, 116,97,114,116,0, 114,109,0, 107,101,110,0, 112,101,0, 110,105,111,110,0, 42,0, 114,101,99,0, 42,0, 37,0, 42,0, 114,101,99,0, }; #define AG_TCV(x) (((int)(x) >= -1 && (int)(x) <= 255) ? ag_tcv[(x) + 1] : 0) static const unsigned char ag_tcv[] = { 11, 11,143,143,143,143,143,143,143,143,140, 21, 21, 21,141,143,143,143, 143,143,143,143,143,143,143,143,143, 11,143,143,143,143,143,142,144, 97, 144, 91,144,144, 94,144,144, 55,144, 82,144,138,144,103,103,103,103,103, 103,103,103,145,145,113, 53, 77, 88, 78,144,144,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,144,101,144,144,146,144,146,131,146,146,146,133,146,146,146,146, 146,146,146,129,146,146,146,130,146,132,146,146,146,146,146,146, 41,116, 43,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,143,143, 143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, 143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, 143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, 143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, 143,143,143,143,143 }; #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 = (y2ag_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 = (y2ag_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 = (y2ag_token_type) ag_key_pt[ag_k1+1]; break; } case ag_set_key: save_index = (PCB).rx; (PCB).token_number = (y2ag_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 = (y2ag_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 = (y2ag_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) { (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 = (y2ag_token_type) (PCB).drt; (PCB).ssx = (PCB).dssx; (PCB).sn = (PCB).dsn; (PCB).drt = -1; } static const unsigned char ag_tstt[] = { 142,140,83,79,76,74,73,72,71,69,68,66,65,64,61,60,58,21,19,12,0,2,3,4,16,17, 146,145,144,143,142,141,140,138,133,132,131,130,129,116,113,103,101,97,94, 91,88,82,78,77,55,53,43,41,21,18,0, 146,145,142,140,138,133,132,131,130,129,103,97,94,83,82,79,78,77,76,74,73, 72,71,69,68,66,65,64,61,60,58,21,19,12,11,0,16,17,22, 146,145,142,140,138,133,132,131,130,129,103,97,94,83,82,79,78,77,76,74,73, 72,71,69,68,66,65,64,61,60,58,21,19,12,11,0,16,17,22, 142,140,21,0, 83,79,76,74,73,72,71,69,68,66,65,64,61,60,58,12,0,5,13, 146,145,142,140,138,133,132,131,130,129,103,97,94,83,82,79,78,77,76,74,73, 72,71,69,68,66,65,64,61,60,58,21,19,12,11,0,16,17,22, 146,145,142,140,138,133,132,131,130,129,103,97,94,83,82,79,78,77,76,74,73, 72,71,69,68,66,65,64,61,60,58,21,19,12,11,0,16,17,22, 83,79,76,74,73,72,71,69,68,66,65,64,61,60,58,0,7,26,27,29,31,33,36,37,38,40, 62,67,70,75, 12,0,6, 145,142,140,103,21,19,0,3,4,16,17, 142,141,140,21,19,0,14,16,17,54, 146,142,141,140,138,133,132,131,130,129,97,94,77,21,19,0,14,16,17,54,63, 146,142,141,140,138,133,132,131,130,129,97,94,77,21,19,0,14,16,17,54,63, 146,142,141,140,138,133,132,131,130,129,97,94,77,21,19,0,14,16,17,54,63, 146,142,141,140,138,133,132,131,130,129,97,94,77,21,19,0,14,16,17,54,63, 146,145,144,143,142,141,140,138,133,132,131,130,129,116,113,103,101,97,94, 91,88,85,82,78,77,55,53,41,21,19,0,84, 142,141,140,41,21,19,0,14,16,17,54,63, 146,142,141,140,138,133,132,131,130,129,97,94,21,19,0,14,16,17,54,63, 142,140,83,79,76,74,73,72,71,69,68,66,65,64,61,60,58,21,19,12,0,3,4,16,17, 77,0,39, 146,138,133,132,131,130,129,97,94,77,0,34,80,81, 146,138,133,132,131,130,129,97,94,77,0,34,80,81, 146,138,133,132,131,130,129,97,94,77,0,34,80,81, 146,138,133,132,131,130,129,97,94,77,0,32,80,81, 41,0,30, 146,138,133,132,131,130,129,97,94,0,1,28,122, 146,142,140,138,133,132,131,130,129,97,94,83,21,19,12,11,0,3,4,16,17, 145,103,0,59, 142,141,140,21,19,0,14,16,17, 142,141,140,21,19,0,14,16,17, 146,145,144,143,142,141,140,138,133,132,131,130,129,116,113,103,101,97,94, 91,88,85,82,78,77,55,53,41,21,19,0,89,92,96,98, 146,142,141,140,138,133,132,131,130,129,21,19,0,14,16,17,54,63, 146,138,133,132,131,130,129,97,94,77,0,32,80,81, 146,142,140,138,133,132,131,130,129,97,94,21,19,0,3,4,16,17, 146,138,133,132,131,130,129,97,94,0,1,28,122, 142,140,83,82,79,76,74,73,72,71,69,68,66,65,64,61,60,58,21,19,12,0,16,17,24, 35, 142,140,83,82,79,76,74,73,72,71,69,68,66,65,64,61,60,58,21,19,12,0,16,17,24, 35, 142,140,83,82,79,76,74,73,72,71,69,68,66,65,64,61,60,58,21,19,12,0,16,17,24, 35, 146,138,133,132,131,130,129,97,94,0,1,28,122, 142,140,83,82,79,76,74,73,72,71,69,68,66,65,64,61,60,58,21,19,12,0,3,4,16, 17, 146,142,141,140,138,133,132,131,130,129,55,53,21,19,0,1,14,16,17,42,44,45, 46,47,48,49,50,51,52,54,56,57, 142,140,83,79,76,74,73,72,71,69,68,66,65,64,61,60,58,21,19,12,0,3,4,16,17, 146,145,144,142,138,133,132,131,130,129,116,113,103,101,97,94,91,88,82,78, 77,55,53,43,41,0,128, 146,145,144,142,138,133,132,131,130,129,116,113,103,101,97,94,91,88,82,78, 77,55,53,43,41,0,128, 146,145,138,133,132,131,130,129,103,0, 142,140,83,79,76,74,73,72,71,69,68,66,65,64,61,60,58,21,19,12,0,3,4,16,17, 146,138,133,132,131,130,129,97,94,83,12,11,0,7,8, 145,103,0, 146,145,144,143,142,141,140,138,133,132,131,130,129,116,113,103,101,97,94, 91,88,82,78,77,55,53,43,41,21,18,0, 146,145,144,142,138,133,132,131,130,129,116,113,103,101,97,94,91,88,82,78, 77,55,53,43,41,0,104, 146,145,144,142,138,133,132,131,130,129,116,113,103,101,97,94,91,88,82,78, 77,55,53,43,41,0,95, 146,145,144,143,142,141,140,138,133,132,131,130,129,116,113,103,101,97,94, 91,88,82,78,77,55,53,43,41,21,19,0,93, 146,142,141,140,138,133,132,131,130,129,97,94,83,79,76,74,73,72,71,69,68,66, 65,64,61,60,58,21,19,12,11,0,14,16,17,54,63, 146,138,133,132,131,130,129,0,1, 142,140,83,82,79,76,74,73,72,71,69,68,66,65,64,61,60,58,21,19,12,0,3,4,16, 17, 146,138,133,132,131,130,129,97,94,0,1,28,122, 146,145,142,140,138,133,132,131,130,129,126,125,116,103,97,94,88,83,82,79, 76,74,73,72,71,69,68,66,65,64,61,60,58,53,41,21,19,12,0,16,17,22, 146,145,142,140,138,133,132,131,130,129,126,125,116,103,97,94,88,83,82,79, 76,74,73,72,71,69,68,66,65,64,61,60,58,53,41,21,19,12,0,16,17,22, 146,145,142,140,138,133,132,131,130,129,103,97,94,21,0,1,28,59,122, 82,0, 82,0, 82,0, 146,145,142,140,138,133,132,131,130,129,103,97,94,21,0,1,28,59,122, 82,0, 55,0,56, 142,141,140,21,19,0,14,16,17, 146,145,138,133,132,131,130,129,103,0, 146,142,141,140,138,133,132,131,130,129,55,21,19,0,1,14,16,17,44,45,46,54, 56,57, 146,142,141,140,138,133,132,131,130,129,53,21,19,0,1,14,16,17,44,45,47,54, 146,138,133,132,131,130,129,55,53,0,1,44,46,47,56,57, 142,141,140,55,53,21,19,0,14,16,17,45,46,47,54,56,57, 43,0, 146,145,144,142,138,133,132,131,130,129,116,113,103,101,97,94,91,88,82,78, 77,55,53,43,41,0,135, 97,0, 94,0, 146,138,133,132,131,130,129,97,94,12,11,0,1,9,28,107,108,109,110,111,122, 146,145,144,142,138,133,132,131,130,129,116,113,103,101,97,94,91,88,82,78, 77,55,53,43,41,0, 103,0,102, 94,0, 146,145,144,143,142,141,140,138,133,132,131,130,129,116,113,103,101,97,94, 91,88,82,78,77,55,53,43,41,21,19,0,89,92,96,98, 146,145,142,141,140,138,133,132,131,130,129,103,78,21,19,0,14,16,17,54,63, 82,0, 142,140,78,21,19,0,3,4,16,17, 145,103,0, 146,145,142,140,138,133,132,131,130,129,126,125,116,103,97,94,88,83,82,79, 76,74,73,72,71,69,68,66,65,64,61,60,58,53,41,21,19,12,0,16,17,22, 146,145,142,140,138,133,132,131,130,129,126,125,116,103,97,94,88,83,82,79, 76,74,73,72,71,69,68,66,65,64,61,60,58,53,41,21,19,12,0,16,17,22, 146,142,140,138,133,132,131,130,129,97,94,21,19,0,16,17,24,35, 145,103,0, 146,142,140,138,133,132,131,130,129,97,94,21,19,0,3,4,16,17, 103,0, 142,141,140,113,21,19,0,14,16,17,54,63, 146,142,140,138,133,132,131,130,129,126,125,116,97,94,88,53,41,21,19,0,16, 17,25,112,114,115,117,119,120,121, 146,142,140,138,133,132,131,130,129,97,94,21,19,12,11,0,3,4,16,17, 146,138,133,132,131,130,129,97,94,0,1,28,107,108,111,122, 12,11,0,6,10, 103,0, 78,0, 78,0, 142,140,21,0, 146,138,133,132,131,130,129,97,94,0,1,28,122, 146,138,133,132,131,130,129,97,94,0,1,28,122, 113,0, 146,142,140,138,133,132,131,130,129,126,125,116,97,94,88,53,41,21,19,0,16, 17,22, 146,142,140,138,133,132,131,130,129,126,125,116,97,94,88,53,41,21,19,0,16, 17,22, 142,140,21,0, 146,142,140,138,133,132,131,130,129,126,125,116,97,94,88,53,41,21,19,0,16, 17,24,35, 146,142,140,138,133,132,131,130,129,126,125,116,97,94,88,53,41,21,19,0,16, 17,24,35, 146,138,133,132,131,130,129,126,125,97,94,88,41,0,1,86,87,118,122,123,124, 127, 146,142,140,138,133,132,131,130,129,126,125,116,97,94,88,53,41,21,19,0,16, 17,25,114,117,119,120,121, 116,53,0, 146,145,144,143,142,141,140,138,133,132,131,130,129,116,113,103,101,97,94, 91,88,82,78,77,55,53,43,41,21,11,0,139, 11,0, 146,142,140,138,133,132,131,130,129,97,94,77,21,19,0,3,4,16,17, 146,142,140,138,133,132,131,130,129,97,94,21,19,0,3,4,16,17, 146,142,140,138,133,132,131,130,129,126,125,116,97,94,88,53,41,21,19,0,16, 17,22, 146,142,140,138,133,132,131,130,129,126,125,116,97,94,88,53,41,21,19,0,16, 17,22, 146,145,138,133,132,131,130,129,103,0, 146,145,144,143,142,141,140,138,133,132,131,130,129,116,113,103,101,97,94, 91,88,82,78,77,55,53,43,41,21,19,0,84, 142,141,140,41,21,19,0,14,16,17,54,63, 146,142,140,138,133,132,131,130,129,126,125,116,97,94,88,53,41,21,19,0,16, 17,24,35, 146,142,141,140,138,133,132,131,130,129,97,94,21,19,0,14,16,17,54,63, 146,138,133,132,131,130,129,97,94,0,1,28,122, 142,140,88,41,21,19,0,16,17,24,35, 146,145,144,143,142,141,140,138,133,132,131,130,129,116,113,103,101,97,94, 91,88,82,78,77,55,53,43,41,21,0, 146,145,144,143,142,141,140,138,133,132,131,130,129,116,113,103,101,97,94, 91,88,82,78,77,55,53,43,41,21,19,0,89,92,96,98, 41,0,87, 88,41,0,86,87, 142,140,116,88,53,41,21,0, 142,140,116,53,21,19,0,16,17,24,35, }; static unsigned const char ag_astt[2277] = { 1,1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,2,5,7,0,1,1,2,1,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,10,10,10,10,2,7,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,5,5,7,2,1,2, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,5,5,7,2, 1,2,1,1,1,5,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,7,1,1,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,5,5,7,2,1,2,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,5,5,7,2,1,2,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,4,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,8,1,1,8,1,2,7,1,1,2,1,1, 1,1,1,2,7,1,1,1,1,5,1,1,1,5,5,5,5,5,5,5,5,5,1,2,7,1,1,1,1,2,5,1,1,1,5,5,5, 5,5,5,5,5,5,1,2,7,1,1,1,1,2,5,1,1,1,5,5,5,5,5,5,5,5,5,1,2,7,1,1,1,1,2,5,1, 1,1,5,5,5,5,5,5,5,5,5,1,2,7,1,1,1,1,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,5,1,2,7,1,1,1,1,3,5,1,1,1,5,5,5,5,5,5,5, 5,1,2,7,1,1,1,1,3,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,2,5,7,1,2,2,1,1,7,1, 8,8,8,8,8,8,8,8,8,1,7,1,1,1,8,8,8,8,8,8,8,8,8,1,7,1,1,1,8,8,8,8,8,8,8,8,8, 1,7,1,1,1,8,8,8,8,8,8,8,8,8,1,7,1,1,1,1,7,1,2,2,2,2,2,2,2,1,1,7,1,1,2,5,1, 1,5,5,5,5,5,5,5,5,8,1,2,5,5,7,1,1,2,1,2,2,7,1,9,9,9,9,2,5,3,3,1,9,9,9,9,2, 5,3,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,1,2,2,7,3,3, 1,1,8,1,1,1,8,8,8,8,8,8,1,2,7,1,1,1,1,1,8,8,8,8,8,8,8,8,8,1,7,1,1,1,8,1,1, 8,8,8,8,8,8,8,8,1,2,7,1,1,2,1,2,2,2,2,2,2,2,1,1,7,1,2,2,1,1,5,8,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,1,2,5,7,2,1,1,1,1,1,5,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,2, 5,7,2,1,1,1,1,1,5,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,2,5,7,2,1,1,1,2,2,2,2,2, 2,2,1,1,7,1,2,2,1,1,5,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,2,5,7,1,1,2,1,2,1,1, 1,2,2,2,2,2,2,2,2,1,2,7,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,1,2,5,7,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,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,7,1,10,10, 10,10,10,10,10,10,10,5,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,2,5,7,1,2,2,1,8, 8,8,8,8,8,8,8,8,1,5,5,7,1,1,10,10,4,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,10,10,10,10,2,7,2,2,2,2,2,2,2,2,2,2,2, 2,2,1,2,2,2,2,2,2,2,2,2,2,2,7,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2, 2,2,2,2,7,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7, 1,5,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,1,2,5,5,7,1,1,1,1, 2,2,2,2,2,2,2,2,7,1,1,1,5,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,2,5,7,1,1,2,1,2, 2,2,2,2,2,2,1,1,7,1,1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,2,5,7,2,1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,5,7,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,1,1,5, 1,2,1,2,1,4,1,4,1,4,2,2,1,1,2,2,2,2,2,2,2,1,1,1,5,1,2,1,2,1,4,2,5,3,9,9,9, 9,2,4,3,3,1,10,10,10,10,10,10,10,10,10,4,2,1,1,1,2,2,2,2,2,2,2,1,2,5,1,1,1, 1,3,3,3,1,1,1,2,1,1,1,2,2,2,2,2,2,2,1,2,5,1,1,1,1,3,3,3,1,2,2,2,2,2,2,2,2, 2,5,1,3,3,3,1,1,1,1,1,2,2,1,2,5,1,1,1,3,3,3,1,1,1,3,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,7,1,2,7,2,7,2,2,2,2,2,2,2,1,1,5,5,7,1,1,1,1, 1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,2,7,1,3,7,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,2,2,7,3,3,1,1,10,10, 1,1,1,10,10,10,10,10,10,10,8,1,2,7,1,1,1,1,1,1,4,1,1,8,1,2,7,1,1,2,1,10,10, 4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 2,5,7,2,1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,2,5,7,2,1,2,8,1,1,8,8,8,8,8,8,8,8,1,2,7,2,1,1,1,10,10,4,8,1,1,8, 8,8,8,8,8,8,8,1,2,7,1,1,2,1,10,4,1,1,1,8,1,2,7,1,1,1,1,1,5,1,1,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,1,2,7,2,1,1,1,1,1,1,2,1,1,5,1,1,5,5,5,5,5,5,5,5,1,2,5,5,7, 1,3,2,1,2,2,2,2,2,2,2,1,1,5,1,1,1,3,1,2,1,8,7,1,1,10,5,1,7,1,7,1,1,1,5,2,2, 2,2,2,2,2,1,1,7,1,2,2,2,2,2,2,2,2,2,1,1,7,1,2,2,2,7,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,2,7,2,1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,7,2,1,2,1,1, 1,5,5,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,2,7,2,1,1,3,5,1,1,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,1,2,7,2,1,1,3,2,2,2,2,2,2,2,1,1,1,1,1,1,5,1,1,1,3,2,1,1,1,5,1, 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,2,7,2,1,1,3,1,2,1,1,2,2,7,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,3,7,5,1,1,5,5,5,5,5,5,5,5, 5,1,2,7,1,2,2,1,5,1,1,5,5,5,5,5,5,5,5,1,2,7,1,3,2,1,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,2,7,2,1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,7,2,1,2,10, 10,10,10,10,10,10,10,10,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,7,1,1,1,1,8,1,2,7,1,1,1,1,1,5,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 1,2,7,2,1,1,3,5,1,1,1,5,5,5,5,5,5,5,5,1,2,7,1,1,1,1,2,2,2,2,2,2,2,2,1,1,7, 1,2,2,1,1,8,8,1,2,7,2,1,1,1,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,10,10,10,10,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,1,2,2,2,2,2,2,2,3,1,2,2,7,3,3,1,1,1,7,3,1,1,7,1,1,1,1,5,5,5,5,1,7,1, 1,5,5,1,2,7,2,1,1,3 }; static const unsigned char ag_pstt[] = { 2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,11,1,0,0,4,5,17,1, 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, 12,12,12,12,10,1, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, 13,13,13,13,13,13,13,11,13,13,2,16,1,16, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, 13,13,13,13,13,13,13,11,13,13,3,15,1,15, 6,6,7,2, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,30,5,9,8, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, 13,13,13,13,13,13,13,11,13,13,6,19,1,19, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, 13,13,13,13,13,13,13,11,13,13,7,18,1,18, 16,17,11,15,15,15,18,13,13,12,12,12,14,14,10,7,31,31,26,25,24,23,22,21,20, 19,14,12,13,15, 27,9,27, 28,2,2,28,3,11,10,4,28,17,1, 29,29,29,29,11,11,29,29,1,29, 77,30,30,30,77,77,77,77,77,77,77,77,77,30,11,12,30,30,1,30,83, 77,30,30,30,77,77,77,77,77,77,77,77,77,30,11,13,30,30,1,30,86, 77,30,30,30,77,77,77,77,77,77,77,77,77,30,11,14,30,30,1,30,79, 77,30,30,30,77,77,77,77,77,77,77,77,77,30,11,15,30,30,1,30,91, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,16,31, 30,30,30,77,30,11,17,30,30,1,30,94, 77,30,30,30,77,77,77,77,77,77,77,77,30,11,18,30,30,1,30,87, 2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,11,1,19,4,42,17,1, 32,20,33, 35,35,35,35,35,35,35,35,35,34,21,36,35,35, 35,35,35,35,35,35,35,35,35,34,22,37,35,35, 35,35,35,35,35,35,35,35,35,34,23,38,35,35, 39,39,39,39,39,39,39,39,39,34,24,40,39,39, 41,25,42, 172,172,172,172,172,172,172,43,44,26,45,46,161, 1,2,2,1,1,1,1,1,1,1,1,47,3,11,1,1,27,4,47,17,1, 121,121,28,48, 68,68,68,68,11,92,68,68,1, 68,68,68,68,11,78,68,68,1, 112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,129,51, 113,112,53,112,112,112,112,112,52,112,119,31,111,111,50,49, 54,30,30,30,54,54,54,54,54,54,30,11,32,30,30,1,30,54, 39,39,39,39,39,39,39,39,39,34,33,55,39,39, 56,2,2,56,56,56,56,56,56,56,56,3,11,34,4,56,17,1, 172,172,172,172,172,172,172,43,44,35,45,101,161, 57,57,36,60,36,36,36,36,36,36,36,36,36,36,36,36,36,36,58,11,36,36,22,1,59, 60, 57,57,36,61,36,36,36,36,36,36,36,36,36,36,36,36,36,36,58,11,36,37,22,1,59, 61, 57,57,36,62,36,36,36,36,36,36,36,36,36,36,36,36,36,36,58,11,36,38,22,1,59, 62, 172,172,172,172,172,172,172,43,44,39,45,97,161, 2,2,1,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,11,1,40,63,64,17,1, 172,66,66,66,172,172,172,172,172,172,70,65,66,11,41,67,66,66,1,72,71,70,69, 68,71,70,69,68,64,66,65,65, 2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,11,1,42,4,33,17,1, 74,74,74,74,74,74,74,74,74,74,74,74,74,73,74,74,74,74,74,74,74,74,74,74,74, 43,74, 75,75,75,75,75,75,75,75,75,75,75,75,75,73,75,75,75,75,75,75,75,75,75,75,75, 44,75, 173,173,174,173,173,173,173,173,173,160, 2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,11,1,46,4,32,17,1, 76,76,76,76,76,76,76,76,76,16,3,3,47,76,76, 122,122,74, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,118,49, 131,131,131,131,131,131,131,131,131,131,131,131,131,77,117,131,131,131,131, 131,131,131,131,131,131,50,130, 125,125,125,125,125,125,125,125,125,125,125,125,125,78,125,125,125,125,125, 125,125,125,125,125,125,51,79, 123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, 123,123,123,123,123,123,123,123,123,123,123,52,80, 77,30,30,30,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77, 77,77,30,11,77,77,53,30,30,1,30,106, 172,172,172,172,172,172,172,54,81, 2,2,1,82,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,11,1,55,63,82,17,1, 172,172,172,172,172,172,172,43,44,56,45,83,161, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, 13,13,13,13,13,13,13,13,13,13,13,11,13,57,21,1,21, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, 13,13,13,13,13,13,13,13,13,13,13,11,13,58,20,1,20, 172,121,85,85,172,172,172,172,172,172,121,43,44,86,37,45,102,84,161, 87,40, 87,39, 87,38, 172,121,6,6,172,172,172,172,172,172,121,43,44,7,2,45,98,88,161, 89,35, 70,73,72, 68,68,68,68,11,69,68,68,1, 173,173,174,173,173,173,173,173,173,66, 172,66,66,66,172,172,172,172,172,172,70,66,11,63,67,66,66,1,47,51,55,66,65, 65, 172,66,66,66,172,172,172,172,172,172,65,66,11,62,67,66,66,1,46,50,58,66, 172,172,172,172,172,172,172,70,65,61,67,45,53,57,65,65, 66,66,66,70,65,66,11,60,66,66,1,48,52,56,66,65,65, 43,72, 170,170,170,170,170,169,168,167,166,165,170,170,175,170,170,170,170,170,170, 170,170,170,170,170,170,73,90, 163,74, 162,75, 172,172,172,172,172,172,172,43,44,136,136,76,45,95,91,93,94,94,95,92,161, 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, 132,132,132,132,132,132,77, 127,78,96, 116,79, 112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,129,51, 113,112,112,112,112,112,112,115,52,112,119,80,124,124,50,49, 173,173,30,30,30,174,173,173,173,173,173,173,97,30,11,81,30,30,1,30,97, 89,41, 2,2,98,3,11,83,4,98,17,1, 122,122,104, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, 13,13,13,13,13,13,13,13,13,13,13,11,13,85,24,1,24, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, 13,13,13,13,13,13,13,13,13,13,13,11,13,86,23,1,23, 100,57,57,100,100,100,100,100,100,100,100,58,11,87,22,1,99,100, 122,122,100, 101,2,2,101,101,101,101,101,101,101,101,3,11,89,4,101,17,1, 176,171, 30,30,30,102,30,11,91,30,30,1,30,102, 146,103,103,146,146,146,146,146,146,146,146,146,146,146,146,146,146,104,11, 92,27,1,105,110,110,109,108,148,107,106, 1,2,2,1,1,1,1,1,1,1,1,3,11,1,1,93,4,133,17,1, 172,172,172,172,172,172,172,43,44,137,45,91,93,135,92,161, 111,112,95,111,112, 128,126, 113,97, 114,98, 85,85,86,37, 172,172,172,172,172,172,172,43,44,100,45,103,161, 172,172,172,172,172,172,172,43,44,101,45,99,161, 140,102, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,11,103,26,1,26, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,11,104,25,1,25, 115,115,116,147, 36,57,57,36,36,36,36,36,36,36,36,36,36,36,36,36,36,58,11,106,22,1,99,150, 36,57,57,36,36,36,36,36,36,36,36,36,36,36,36,36,36,58,11,107,22,1,99,149, 172,172,172,172,172,172,172,121,121,43,44,119,118,144,117,120,120,145,153, 123,122,121, 146,103,103,146,146,146,146,146,146,146,146,146,146,146,146,146,146,104,11, 109,27,1,105,142,108,148,107,106, 143,139,110, 179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, 179,179,179,179,179,179,179,179,179,179,179,111,124, 5,112, 1,2,2,1,1,1,1,1,1,1,1,1,3,11,113,4,93,17,1, 1,2,2,1,1,1,1,1,1,1,1,3,11,114,4,105,17,1, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,11,115,29,1,29, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,11,116,28,1,28, 173,173,174,173,173,173,173,173,173,152, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,118,125, 30,30,30,126,30,11,119,30,30,1,30,126, 36,57,57,36,36,36,36,36,36,36,36,36,36,36,36,36,36,58,11,120,22,1,99,151, 77,30,30,30,77,77,77,77,77,77,77,77,30,11,121,30,30,1,30,159, 172,172,172,172,172,172,172,43,44,122,45,156,161, 57,57,127,127,58,11,123,22,1,128,127, 180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, 180,180,180,180,180,180,180,180,180,180,178, 112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,129,51, 113,112,112,112,112,112,112,109,52,112,119,125,111,111,50,49, 118,126,108, 119,118,127,129,129, 85,85,154,37,154,37,86,128, 57,57,36,36,58,11,129,22,1,99,155, }; static const unsigned short ag_sbt[] = { 0, 26, 57, 96, 135, 139, 158, 197, 236, 266, 269, 280, 290, 311, 332, 353, 374, 406, 418, 438, 463, 466, 480, 494, 508, 522, 525, 538, 559, 563, 572, 581, 616, 634, 648, 666, 679, 705, 731, 757, 770, 796, 828, 853, 880, 907, 917, 942, 957, 960, 991,1018,1045,1077,1114,1123, 1149,1162,1204,1246,1265,1267,1269,1271,1290,1292,1295,1304,1314,1338, 1360,1376,1393,1395,1422,1424,1426,1447,1473,1476,1478,1513,1534,1536, 1546,1549,1591,1633,1651,1654,1672,1674,1686,1716,1736,1752,1757,1759, 1761,1763,1767,1780,1793,1795,1818,1841,1845,1869,1893,1915,1943,1946, 1978,1980,1999,2017,2040,2063,2073,2105,2117,2141,2161,2174,2185,2215, 2250,2253,2258,2266,2277 }; static const unsigned short ag_sbe[] = { 20, 56, 92, 131, 138, 155, 193, 232, 251, 267, 275, 285, 305, 326, 347, 368, 404, 412, 432, 458, 464, 476, 490, 504, 518, 523, 534, 554, 561, 568, 577, 611, 628, 644, 661, 675, 700, 726, 752, 766, 791, 810, 848, 878, 905, 916, 937, 954, 959, 990,1016,1043,1075,1108,1121,1144, 1158,1200,1242,1260,1266,1268,1270,1285,1291,1293,1300,1313,1327,1351, 1369,1383,1394,1420,1423,1425,1437,1472,1474,1477,1508,1528,1535,1541, 1548,1587,1629,1646,1653,1667,1673,1680,1705,1731,1745,1754,1758,1760, 1762,1766,1776,1789,1794,1814,1837,1844,1864,1888,1906,1934,1945,1976, 1979,1994,2012,2036,2059,2072,2103,2111,2136,2155,2170,2180,2214,2245, 2251,2255,2265,2272,2277 }; static const unsigned char ag_fl[] = { 1,0,1,0,1,8,1,1,1,1,2,1,2,0,1,2,2,1,3,3,2,2,1,3,3,2,2,1,3,3,0,2,3,3,1, 3,0,1,3,3,3,4,2,3,1,2,2,2,2,1,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1, 1,1,2,1,3,1,1,0,1,2,1,1,1,2,1,1,2,2,1,1,1,2,2,6,2,0,1,2,3,5,3,2,3,5,3, 6,4,1,3,3,0,2,1,1,1,3,3,2,2,1,2,1,2,0,2,1,2,1,2,1,2,1,2,2,1,2,0,1,1,3, 3,1,2,2,1,2,0,1,1,2,2,3,2,2,2,4,2,1,1,2,1,1,3,3,1,2,2,2,2,2,2,2,1,2,2, 1,2,0,2,0,2 }; static const unsigned char ag_ptt[] = { 0, 4, 4, 8, 8, 2, 6, 5, 14, 14, 16, 17, 17, 22, 22, 3, 3, 3, 3, 3, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 13, 13, 26, 26, 26, 26, 35, 35, 26, 26, 26, 26, 26, 30, 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 52, 52, 42, 47, 44, 54, 54, 45, 56, 57, 57, 46, 40, 62, 62, 63, 63, 33, 67, 67, 67, 37, 70, 70, 36, 27, 75, 75, 75, 31, 38, 39, 29, 81, 81, 32, 32, 32, 32, 34, 34, 34, 34, 80, 7, 86, 86, 87, 84, 84, 89, 89, 89, 89, 89, 89, 92, 98, 98, 59, 59, 93, 93, 95, 95,102,102, 96, 96,104,104,108,109,109,110,110, 9,107,111,112,112,115, 114,114,119,119,117,117,117,117,120,121,118,118,123,127,127,124, 28, 28, 122,122,128,128,128,128,128,128,128,128, 1, 1, 1,135,135, 10, 10,139, 139 }; static void ag_ra(void) { switch(ag_rpx[(PCB).ag_ap]) { case 1: ag_rp_1(); break; case 2: ag_rp_2(); break; case 3: ag_rp_3(); break; case 4: ag_rp_4(VS(1)); break; case 5: ag_rp_5(); break; case 6: ag_rp_6(); break; case 7: ag_rp_7(); break; case 8: ag_rp_8(); break; case 9: ag_rp_9(); break; case 10: ag_rp_10(VS(0)); break; case 11: ag_rp_11(VS(0)); break; case 12: ag_rp_12(); break; case 13: ag_rp_13(VS(1)); break; case 14: ag_rp_14(VS(1)); break; case 15: ag_rp_15(VS(0)); break; case 16: ag_rp_16(VS(0)); break; case 17: ag_rp_17(); break; case 18: ag_rp_18(VS(1)); break; case 19: ag_rp_19(VS(1)); break; case 20: ag_rp_20(); break; case 21: ag_rp_21(); break; case 22: ag_rp_22(); break; case 23: ag_rp_23(); break; case 24: ag_rp_24(); break; case 25: ag_rp_25(); break; case 26: ag_rp_26(); break; case 27: ag_rp_27(); break; case 28: ag_rp_28(); break; case 29: ag_rp_29(); break; case 30: ag_rp_30(); break; case 31: ag_rp_31(); break; case 32: ag_rp_32(); break; case 33: ag_rp_33(VS(2)); break; case 34: ag_rp_34(); break; case 35: ag_rp_35(); break; case 36: ag_rp_36(); break; case 37: ag_rp_37(); break; case 38: ag_rp_38(); break; case 39: ag_rp_39(); break; case 40: ag_rp_40(); break; case 41: ag_rp_41(VS(2)); break; case 42: ag_rp_42(); break; case 43: ag_rp_43(); break; case 44: ag_rp_44(); break; case 45: ag_rp_45(VS(2)); break; case 46: ag_rp_46(); break; case 47: ag_rp_47(); break; case 48: ag_rp_48(VS(0)); 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(VS(1)); break; case 55: VS(0) = ag_rp_55(VS(0)); break; case 56: VS(0) = ag_rp_56(VS(0), VS(1)); break; case 57: ag_rp_57(); break; case 58: ag_rp_58(VS(0)); break; case 59: ag_rp_59(VS(0)); break; case 60: ag_rp_60(VS(1)); break; case 61: ag_rp_61(); break; case 62: ag_rp_62(VS(0)); break; case 63: ag_rp_63(VS(1)); 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(VS(1)); break; case 70: ag_rp_70(); break; case 71: ag_rp_71(); break; case 72: ag_rp_72(VS(0)); break; case 73: VS(0) = ag_rp_73(VS(1)); break; case 74: VS(0) = ag_rp_74(VS(1)); break; case 75: VS(0) = ag_rp_75(); break; case 76: VS(0) = ag_rp_76(); break; case 77: VS(0) = ag_rp_77(); break; case 78: VS(0) = ag_rp_78(); break; case 79: VS(0) = ag_rp_79(); break; case 80: VS(0) = ag_rp_80(VS(1)); break; case 81: VS(0) = ag_rp_81(VS(1)); break; case 82: ag_rp_82(VS(0)); break; case 83: ag_rp_83(VS(1)); break; case 84: ag_rp_84(); break; case 85: VS(0) = ag_rp_85(VS(0)); break; case 86: VS(0) = ag_rp_86(VS(0), VS(1)); break; case 87: ag_rp_87(); break; case 88: ag_rp_88(); break; case 89: ag_rp_89(VS(1)); break; } } #define TOKEN_NAMES y2ag_token_names const char *const y2ag_token_names[147] = { "grammar", "name", "grammar", "elc", "", "definition block", "mark", "c code block", "", "rule section", "tail", "eof", "\"%%\"", "definitions", "white", "", "comment", "comment text", "\"*/\"", "\"/*\"", "anything", "", "", "", "blc", "clc", "definition", "start", "identifier", "union", "union text", "token", "print token list", "left", "print prec list", "", "right", "nonassoc", "type", "type name", "expect statement", "'{'", "decl", "'}'", "decl name", "decl white", "decl star", "decl term", "", "", "", "", "", "';'", "", "'*'", "", "", "\"%expect\"", "number", "\"%left\"", "\"%<\"", "", "", "\"%nonassoc\"", "\"%binary\"", "\"%2\"", "", "\"%right\"", "\"%>\"", "", "\"%start\"", "\"%token\"", "\"%term\"", "\"%0\"", "", "\"%type\"", "'<'", "'>'", "\"%union\"", "tag", "", "','", "\"%{\"", "c text", "\"%}\"", "action", "embedded c", "'='", "c char", "simple c char", "'$'", "c code comment", "nested c text", "'\\''", "c literal character", "literal string", "'\\\"'", "c code comment text", "digit", "", "'\\\\'", "octal digits", "", "string character", "", "", "production", "", "", "", "production head", "complete rules", "':'", "complete rule", "rule set continuation", "'|'", "rule", "explicit precedence", "", "rule name continuation", "rule literal continuation", "literal", "explicit precedence head", "prec", "\"%prec\"", "\"%=\"", "", "literal character", "'n'", "'r'", "'b'", "'t'", "'f'", "", "octal number", "", "", "dot", "tail code", "", "", "", "", "", "", "", }; #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_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 = (y2ag_token_type) AG_TCV((PCB).input_code);} else { GET_INPUT; (PCB).lab[(PCB).fx++] = (PCB).input_code; (PCB).token_number = (y2ag_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 == (y2ag_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 { (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 = (y2ag_token_type) AG_TCV((PCB).input_code);} else { GET_INPUT; (PCB).lab[(PCB).fx++] = (PCB).input_code; (PCB).token_number = (y2ag_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 == (y2ag_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 = (y2ag_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 = (y2ag_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 = (y2ag_token_type) ag_ptt[(PCB).ag_ap]; return 1; } static int ag_action_2_proc(void) { (PCB).btsx = 0, (PCB).drt = -1; if ((PCB).ssx >= 128) { (PCB).exit_flag = AG_STACK_ERROR_CODE; PARSER_STACK_OVERFLOW; } (PCB).vs[(PCB).ssx] = *(PCB).lab; (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; (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 = (y2ag_token_type) ag_ptt[(PCB).ag_ap]; (PCB).btsx = 0, (PCB).drt = -1; (PCB).vs[(PCB).ssx] = *(PCB).lab; 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); (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; } return 0; } static int ag_action_3_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; (PCB).btsx = 0, (PCB).drt = -1; (PCB).vs[(PCB).ssx] = *(PCB).lab; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (PCB).ss[(PCB).ssx] = (PCB).sn; ag_track(); (PCB).reduction_token = (y2ag_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; } return 0; } static int ag_action_8_proc(void) { ag_undo(); (PCB).rx = 0; (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; ag_diagnose(); SYNTAX_ERROR; {(PCB).rx = 1; 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).rx = 0; (PCB).reduction_token = (y2ag_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break; } return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_6_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap]; (PCB).reduction_token = (y2ag_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; } (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); (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_y2ag(void) { (PCB).rx = (PCB).fx = 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 y2ag(void) { init_y2ag(); (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 = (y2ag_token_type) AG_TCV((PCB).input_code);} else { GET_INPUT; (PCB).lab[(PCB).fx++] = (PCB).input_code; (PCB).token_number = (y2ag_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]; (ag_gt_procs_scan[ag_astt[ag_t1]])(); } }