comparison tests/agcl/oldagsrc/good/pgg24-2.cpp @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:13d2b8934445
1 /*
2 AnaGram Syntax Analyzer.
3 Copyright (c) Jerome T. Holland, 1989, 1990, 1991, 1992
4 All Rights Reserved.
5 */
6
7 //#define INCLUDE_LOGGING
8
9 #include "assert.h" //ASSERT
10 #include "config.h"
11 #include "csexp.h"
12 #include "data.h" //DATA
13 #include "error.h"
14 #include "log.hpp"
15 #include "myalloc.h"
16 #include "rproc.h"
17 #include "rule.h"
18 #include "stk.h" //STK
19 #include "symbol.h"
20 #include "token.h"
21 #include "tree.h"
22 #include "tsd.h"
23 #include "ut.h" //UT
24 #include <ctype.h> //CTYPE
25 #include <stdio.h> //STDIO
26 #include <stdlib.h> //STDLIB
27 #include <string.h> //STRING
28
29 #include "pgg24.h" //PGG
30
31 #undef MODULE
32 #define MODULE 3
33
34
35 /*
36 * AnaGram, A System for Syntax Directed Programming
37 * File generated by: ...
38 *
39 * AnaGram Parsing Engine
40 * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
41 *
42 * This software is provided 'as-is', without any express or implied
43 * warranty. In no event will the authors be held liable for any damages
44 * arising from the use of this software.
45 *
46 * Permission is granted to anyone to use this software for any purpose,
47 * including commercial applications, and to alter it and redistribute it
48 * freely, subject to the following restrictions:
49 *
50 * 1. The origin of this software must not be misrepresented; you must not
51 * claim that you wrote the original software. If you use this software
52 * in a product, an acknowledgment in the product documentation would be
53 * appreciated but is not required.
54 * 2. Altered source versions must be plainly marked as such, and must not be
55 * misrepresented as being the original software.
56 * 3. This notice may not be removed or altered from any source distribution.
57 */
58
59 #ifndef PGG24-2_H
60 #include "pgg24-2.h"
61 #endif
62
63 #ifndef PGG24-2_H
64 #error Mismatched header file
65 #endif
66
67 #include <ctype.h>
68 #include <stdio.h>
69
70 #define RULE_CONTEXT (&((PCB).cs[(PCB).ssx]))
71 #define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx])
72 #define CONTEXT ((PCB).cs[(PCB).ssx])
73
74
75 #define CHANGE_REDUCTION(x) pgg_change_reduction(pgg_##x##_token)
76 int pgg_change_reduction(pgg_token_type);
77
78 #define TOKEN_NAMES pgg_token_names
79 const char *const pgg_token_names[248] = {
80 "syntax definition",
81 "",
82 "\"->\"",
83 "",
84 "",
85 "",
86 "",
87 "','",
88 "",
89 "",
90 "",
91 "\"...\"",
92 "",
93 "'='",
94 "",
95 "'!'",
96 "",
97 "'{'",
98 "",
99 "'['",
100 "",
101 "'('",
102 "",
103 "'-'",
104 "",
105 "'+'",
106 "",
107 "']'",
108 "",
109 "'}'",
110 "",
111 "')'",
112 "",
113 "single quote",
114 "",
115 "'~'",
116 "",
117 "'|'",
118 "syntax definition",
119 "",
120 "",
121 "statement list",
122 "statement",
123 "",
124 "eof",
125 "production",
126 "definition",
127 "embedded c",
128 "configuration section",
129 "",
130 "left hand side",
131 "right hand side",
132 "",
133 "",
134 "",
135 "token name list",
136 "type definition",
137 "",
138 "symbol name",
139 "'$'",
140 "",
141 "wrapper type",
142 "wrapper list",
143 "",
144 "vp rule spec",
145 "",
146 "",
147 "reduction procedure",
148 "vp rules",
149 "grammar rule",
150 "",
151 "init grammar rule",
152 "rule element",
153 "parameter name",
154 "c expression",
155 "';'",
156 "type name",
157 "",
158 "",
159 "",
160 "\"::\"",
161 "",
162 "",
163 "",
164 "",
165 "template field head",
166 "'>'",
167 "'<'",
168 "",
169 "",
170 "'*'",
171 "",
172 "",
173 "letter",
174 "",
175 "",
176 "\"enum\"",
177 "blank char",
178 "c comment",
179 "continuation",
180 "comment",
181 "",
182 "carriage return",
183 "",
184 "newline",
185 "",
186 "vertical space",
187 "\"//\"",
188 "",
189 "",
190 "",
191 "character",
192 "signed number",
193 "'^'",
194 "",
195 "quoted character",
196 "char const",
197 "",
198 "",
199 "",
200 "decimal number",
201 "octal number",
202 "\"0x\"",
203 "\"0X\"",
204 "",
205 "hex number",
206 "",
207 "",
208 "'0'",
209 "",
210 "hex digit",
211 "",
212 "token",
213 "immediate action",
214 "set union",
215 "virtual production",
216 "set intersection",
217 "set difference",
218 "set complement",
219 "'&'",
220 "character set",
221 "",
222 "escape sequence",
223 "octal escape",
224 "",
225 "hex escape",
226 "character range",
227 "\"..\"",
228 "proc def",
229 "enum definition",
230 "enum statement",
231 "keyword string",
232 "keyword string head",
233 "string",
234 "double quote",
235 "",
236 "",
237 "",
238 "string char",
239 "simple string char",
240 "\"\\\\a\"",
241 "\"\\\\b\"",
242 "\"\\\\f\"",
243 "\"\\\\n\"",
244 "\"\\\\r\"",
245 "\"\\\\t\"",
246 "\"\\\\v\"",
247 "\"\\\\\\\\\"",
248 "\"\\\\?\"",
249 "\"\\\\\\'\"",
250 "\"\\\\\\\"\"",
251 "",
252 "backslash",
253 "",
254 "\"\\\\x\"",
255 "any digit",
256 "nonoctal digit",
257 "':'",
258 "",
259 "",
260 "configuration parameters",
261 "configuration parameter list",
262 "",
263 "configuration parameter",
264 "attribute statement",
265 "keyword kluge",
266 "\"distinguish\"",
267 "\"left\"",
268 "token list",
269 "\"right\"",
270 "\"nonassoc\"",
271 "\"sticky\"",
272 "\"subgrammar\"",
273 "\"hidden\"",
274 "",
275 "",
276 "\"disregard\"",
277 "\"extend\"",
278 "\"pcb\"",
279 "\"lexeme\"",
280 "\"reserve\"",
281 "\"keywords\"",
282 "\"rename\"",
283 "\"macro\"",
284 "macro name",
285 "\"wrapper\"",
286 "",
287 "tokens",
288 "'\\?'",
289 "\"}...\"",
290 "\"]...\"",
291 "\"?...\"",
292 "\"}/...\"",
293 "\"]/...\"",
294 "embedded c head",
295 "",
296 "",
297 "",
298 "",
299 "c code first",
300 "",
301 "",
302 "c character constant",
303 "c string constant",
304 "",
305 "simple c char",
306 "",
307 "",
308 "",
309 "",
310 "\"\\\\\\n\"",
311 "",
312 "\"*/\"",
313 "\"/*\"",
314 "",
315 "c literal elem",
316 "",
317 "",
318 "",
319 "",
320 "",
321 "",
322 "",
323 "",
324 "",
325 "",
326 "",
327 "",
328
329 };
330
331
332 #line - "pgg24-2.syn"
333 int null_warning(int n) {
334 extern void warning_here(const char *,...);
335 if (n == 0) log_error("Null character in string");
336 return n;
337 }
338 #line - "pgg24-2.cpp"
339 #line - "pgg24-2.syn"
340 pgg_pcb_type pgcb;
341 #define PCB pgcb
342
343 #define PARSER_STACK_OVERFLOW parse_stack_overflow()
344 #define SYNTAX_ERROR log_syntax_error()
345 #define GET_CONTEXT CONTEXT.y = PCB.line, CONTEXT.x = PCB.column;
346
347 #define REDUCTION_TOKEN_ERROR reduction_token_error()
348
349 extern AgStack< AgStack<RuleElement> > ruleElementStack;
350
351 AgStack<CSegment> extensionStack;
352 AgStack<CSegment> cSegmentStack;
353 int nPrologueSegments;
354
355 CSegment::CSegment()
356 : begin(PCB.pointer), end(PCB.pointer), line(PCB.line)
357 {
358 LOGSECTION("CSegment::CSegment");
359 // Nothing to do
360 }
361
362 static class PggErrorHandler : public ConfigParam::ErrorHandler {
363 void badParam(const char *s){log_error(s);}
364 } pggErrorHandler;
365
366
367 void reduction_token_error(void) {
368 #ifdef INCLUDE_LOGGING
369 LOGSECTION("reduction_token_error");
370 LOGV(PCB.sn) LCV(PCB.ssx) LCV(PCB.reduction_token);
371 for (int i = 0; i < PCB.ssx; i++) LOGV(i) LCV(PCB.ss[i]);
372 #endif
373 assert(0);
374 }
375
376 extern AgString infile_name;
377 extern AgString errorReportFile;
378
379 Error::Error(AgString msg, int contextFlag)
380 : file(errorReportFile),
381 line(contextFlag? ERROR_CONTEXT.y : PCB.line),
382 column(contextFlag? ERROR_CONTEXT.x : PCB.column),
383 key(warn),
384 message(msg)
385 {
386 LOGSECTION("Error::Error(AgString, int)");
387 LOGV(PCB.line) LCV(PCB.column) LCV(contextFlag) LCV(msg.pointer());
388 LOGV(ERROR_CONTEXT.x) LCV(ERROR_CONTEXT.y);
389 // Nothing here
390 }
391
392 Error::Error(int l, int c, AgString msg)
393 : file(errorReportFile),
394 line(l),
395 column(c),
396 key(warn),
397 message(msg)
398 {
399 LOGSECTION("Error::Error(int, int, AgString)");
400 // Nothing here
401 }
402
403 extern tsd *rename_macro_list;
404 extern int parse_abort_flag;
405
406 void parse_stack_overflow(void) {
407 reset_stk();
408 log_error("Nesting too deep. Analysis aborted.");
409 errorList.top().setFatal();
410 parse_abort_flag = 1;
411 PCB.exit_flag = AG_SEMANTIC_ERROR_CODE;
412 }
413
414 extern int character_seen;
415 extern int enum_base;
416 extern unsigned char *input_base;
417 extern int precedence_level;
418 extern int syntax_error_flag;
419
420 CharSetExpression *ss2(void);
421
422 void acs(int);
423 void aws(int);
424 void atkn(Token);
425 void defineImmediateProc(Procedure p);
426 void definition_1(CharSetExpression *);
427 void definition_2(int);
428 void definition_3(int);
429 int form_element_1(CharSetExpression *);
430 int form_spec_2(int, int);
431 int form1(void);
432 int form2(void);
433 int head_list_1(int);
434 int head_list_2(int);
435 static int head_list_3(int);
436 void ics(void);
437 int identify_node(CharSetExpression *);
438 void iws(void);
439 int makeRule(const AgIndexedContainer<RuleElement> &);
440 int mid_line(int);
441 int null_warning(int);
442 int proc_spec_4(int);
443 void production(int);
444 void range(int, int);
445 void scs(int);
446 static void set_prec(int,int);
447 void sws(int);
448 int vp_form3(int);
449 int vp_s(void);
450 int vp_1(void);
451 int vp_2(void);
452 int vp_3(void);
453 int vp_4(void);
454 int vp_5(int);
455 int vp_6(int);
456 int vp_7(int);
457 int vp_8(int);
458 int vp_8a(int);
459 int vp_9(void);
460 int vp_10(void);
461
462 int *disregard_list = NULL;
463 int n_disregard_list = 0;
464
465 static void disregard(int tn) {
466 LOGSECTION("disregard");
467 iws();
468 if (n_disregard_list) {
469 int *p = disregard_list;
470 while (n_disregard_list--) aws(*p++);
471 DEALLOCATE(disregard_list);
472 }
473 xws(tn);
474 disregard_list = build_list();
475 n_disregard_list = fis();
476 }
477
478 static void log_syntax_error(void) {
479 LOGSECTION("log_syntax_error");
480
481 #ifdef INCLUDE_LOGGING
482 {
483 LOGV(PCB.sn) LCV(PCB.ssx) LCV(PCB.token_number);
484 for (int i = 0; i < PCB.ssx; i++) LOGV(i) LCV(PCB.ss[i]);
485 }
486 #endif
487 int flag = PCB.error_frame_token == pgg_c_comment_token ||
488 PCB.error_frame_token == pgg_embedded_c_token;
489 LOGV(flag);
490 reset_stk();
491
492 #ifdef INCLUDE_LOGGING
493 {
494 LOGV(PCB.sn) LCV(PCB.ssx) LCV(PCB.token_number);
495 for (int i = 0; i < PCB.ssx; i++) LOGV(i) LCV(PCB.ss[i]);
496 }
497 #endif
498 ssprintf("%s in %s", PCB.error_message, pgg_token_names[PCB.error_frame_token]);
499 LOGS(string_base);
500 errorList.push(Error(string_base, flag && PCB.token_number == pgg_eof_token));
501 rcs();
502 #ifdef INCLUDE_LOGGING
503 {
504 LOGV(PCB.sn) LCV(PCB.ssx) LCV(PCB.token_number);
505 for (int i = 0; i < PCB.ssx; i++) LOGV(i) LCV(PCB.ss[i]);
506 }
507 #endif
508 LOGS("error logged");
509 errorList.top().setFatal();
510 LOGS("fatal flag set");
511 syntax_error_flag++;
512 #ifdef INCLUDE_LOGGING
513 {
514 LOGV(PCB.sn) LCV(PCB.ssx) LCV(PCB.token_number);
515 for (int i = 0; i < PCB.ssx; i++) LOGV(i) LCV(PCB.ss[i]);
516 }
517 #endif
518 if (errorList.size() < 50) return;
519 log_error("Too many errors. Parse aborted.");
520 errorList.top().setFatal();
521 PCB.exit_flag = AG_SYNTAX_ERROR_CODE;
522 }
523
524 static int head_list_3(int type) {
525 LOGSECTION("head_list_3");
526 LOGV(type);
527 int i, n = tis();
528 for (i = 0; i < n; i ++) {
529 Token token(list_base[i]);
530 int ptt = token->value_type;
531 LOGV(ptt) LCV(type);
532 if (ptt && ptt != type) {
533 ssprintf("Type Redefinition of T%03d: ", (int) token);
534 atkn(token);
535 log_error();
536 }
537 token->value_type = type;
538 /*
539 if (ptt == 0 && token->rp_arg && type == void_token_type) {
540 //ssprintf("Void token, %s, used as parameter", dict_str(tkn_dict,token->token_name));
541 ssprintf("Void token, %s, used as parameter", token->token_name->string.pointer());
542 log_error();
543 }
544 */
545 }
546 return type;
547 }
548
549 static void set_prec(int left, int right){
550 LOGSECTION("set_prec");
551 int n = tis();
552 precedence_level++;
553 while (n--) {
554 Token token(list_base[n]);
555 token->left_associative = left;
556 token->right_associative = right;
557 token->precedence_level = precedence_level;
558 token->operatorCandidate = 1;
559 }
560 rws();
561 }
562
563 static void set_sticky(void){
564 LOGSECTION("set_sticky");
565 int n = tis();
566 while (n--) {
567 Token token(list_base[n]);
568 token->sticky = 1;
569 }
570 rws();
571 }
572
573 static void set_subgrammar(void){
574 LOGSECTION("set_subgrammar");
575 int n = tis();
576 while (n--) {
577 Token token = list_base[n];
578 token->subgrammar = 1;
579 }
580 rws();
581 }
582
583 void set_hidden(void) {
584 LOGSECTION("set_hidden");
585 int *lb = list_base;
586 int n = tis();
587 //while (n--) map_token_number[*lb++].fine_structure = 1;
588 while (n--) Token(*lb++)->fine_structure = 1;
589 rws();
590 }
591
592 void set_lexeme(void) {
593 LOGSECTION("set_lexeme");
594 int n = tis();
595 while (n--) {
596 Token token = list_base[n];
597 token->lexeme = 1;
598 }
599 rws();
600 }
601
602 void set_reserved_words(void) {
603 LOGSECTION("set_reserved_words");
604 int n = tis();
605 while (n--) {
606 Token token(list_base[n]);
607 token->reserved_word = 1;
608 }
609 rws();
610 }
611
612 void parse(void) {
613 pgcb.pointer = input_base;
614 pgg();
615 }
616 #line - "pgg24-2.cpp"
617
618 #ifndef CONVERT_CASE
619 #define CONVERT_CASE(c) (c)
620 #endif
621 #ifndef TAB_SPACING
622 #define TAB_SPACING 8
623 #endif
624
625 #define ag_rp_1(t) (production(t))
626
627 #define ag_rp_2() (nPrologueSegments = 1)
628
629 #define ag_rp_4(t) (production(t))
630
631 #define ag_rp_5(type) (iws(),type)
632
633 #define ag_rp_6(type) (concat_list(),type)
634
635 #define ag_rp_7() (0)
636
637 #define ag_rp_8(d) (head_list_3(d))
638
639 #define ag_rp_9(x) (sws(head_list_2(x)))
640
641 #define ag_rp_10(x) (aws(head_list_2(x)))
642
643 #define ag_rp_11() (0)
644
645 #define ag_rp_12() (1)
646
647 #define ag_rp_13() (Cast::create())
648
649 #define ag_rp_14() (Cast::create().requireWrapper())
650
651 #define ag_rp_15(n) (sws(n))
652
653 #define ag_rp_16(n) (aws(n))
654
655 #define ag_rp_17(pn) (sws((iws(),vp_form3(pn))))
656
657 #define ag_rp_18(s) (vp_form3(s))
658
659 #define ag_rp_19(n) (sws(form_spec_2(form1(),n)))
660
661 #define ag_rp_20(n) (sws(n))
662
663 #define ag_rp_21(n) (aws(n))
664
665 #define ag_rp_22(s) (form_spec_2(makeRule(ruleElementStack.pop()),s))
666
667 #define ag_rp_23(e, p) (ruleElementStack.top().push(RuleElement(e,p)))
668
669 #define ag_rp_24(e, p) (ruleElementStack.top().push(RuleElement(e,p)))
670
671 #define ag_rp_25() (ruleElementStack.push(AgStack<RuleElement>()))
672
673 #define ag_rp_26() (0)
674
675 #define ag_rp_27() (proc_spec_4(0))
676
677 #define ag_rp_28() (proc_spec_4(1))
678
679 #define ag_rp_29() (concat_string())
680
681 #define ag_rp_30() (sss("::"))
682
683 #define ag_rp_31() (concat_string())
684
685 #define ag_rp_32() (ass("::"))
686
687 #define ag_rp_33() (concat_string())
688
689 #define ag_rp_34() (concat_string())
690
691 #define ag_rp_35() (acs('>'), concat_string())
692
693 #define ag_rp_36() (acs('<'))
694
695 #define ag_rp_37() (acs(','), concat_string())
696
697 #define ag_rp_38() (scs('('))
698
699 #define ag_rp_39() (concat_string(), acs(')'))
700
701 #define ag_rp_40() (sss(" *"))
702
703 #define ag_rp_41() (concat_string())
704
705 #define ag_rp_42() (concat_string())
706
707 #define ag_rp_43(c) (scs(c))
708
709 #define ag_rp_44(c) (acs(c))
710
711 #define ag_rp_45(c) (acs(' '), acs(c))
712
713 #define ag_rp_46(c) (sss("enum "), acs(c))
714
715 #define ag_rp_47(c) (acs(c))
716
717 #define ag_rp_48(c) (acs(' '), acs(c))
718
719 #define ag_rp_49(x) (x & 0x1f)
720
721 #define ag_rp_50(c) ((character_seen=1),c)
722
723 #define ag_rp_51(s, n) (s*n)
724
725 #define ag_rp_52() (1)
726
727 #define ag_rp_53() (-1)
728
729 #define ag_rp_54(n) (n)
730
731 #define ag_rp_55(n) (n)
732
733 #define ag_rp_56(d) (d - '0')
734
735 #define ag_rp_57(n, d) (10*n + d - '0')
736
737 #define ag_rp_58() (0)
738
739 #define ag_rp_59(n, d) (8*n + d - '0')
740
741 #define ag_rp_60(d) (d)
742
743 #define ag_rp_61(n, d) (16*n + d)
744
745 #define ag_rp_62(d) (d-'0')
746
747 #define ag_rp_63(d) ((d&7)+9)
748
749 #define ag_rp_64(p) (vp_8a(mid_line(p)))
750
751 #define ag_rp_65(n) (form_element_1(n))
752
753 #define ag_rp_66(u, i) (new CharSetUnion(u,i))
754
755 #define ag_rp_67(u, i) (new CharSetDifference(u,i))
756
757 #define ag_rp_68(i, n) (new CharSetIntersection(i,n))
758
759 #define ag_rp_69(n) (new CharSetComplement(n))
760
761 #define ag_rp_70(c) (new IndividualCode(c))
762
763 #define ag_rp_71(c) (new IndividualChar(c))
764
765 #define ag_rp_72() (ss2())
766
767 #define ag_rp_73(x) (x)
768
769 #define ag_rp_74(l, r) ((character_seen=1),new CharRange(l,r))
770
771 #define ag_rp_75(l, r) (new CodeRange(l,r))
772
773 #define ag_rp_76(n) (definition_1(n))
774
775 #define ag_rp_77(p) (definition_2(p))
776
777 #define ag_rp_78(p) (defineImmediateProc(Procedure(p)))
778
779 #define ag_rp_79() (definition_3(enum_base++))
780
781 #define ag_rp_80(n) (definition_3(enum_base = n), enum_base++)
782
783 #define ag_rp_81(n) (definition_3(enum_base = n), enum_base++)
784
785 #define ag_rp_82() (ics())
786
787 #define ag_rp_83(n) (null_warning(n))
788
789 #define ag_rp_84() ('\a')
790
791 #define ag_rp_85() ('\b')
792
793 #define ag_rp_86() ('\f')
794
795 #define ag_rp_87() ('\n')
796
797 #define ag_rp_88() ('\r')
798
799 #define ag_rp_89() ('\t')
800
801 #define ag_rp_90() ('\v')
802
803 #define ag_rp_91() ('\\')
804
805 #define ag_rp_92() ('\?')
806
807 #define ag_rp_93() ('\'')
808
809 #define ag_rp_94() ('"')
810
811 #define ag_rp_95(n) (n&7)
812
813 #define ag_rp_96(n, d) (n*8 + (d&7))
814
815 #define ag_rp_97(n, d) (n*8 + (d&7))
816
817 #define ag_rp_98(x) (x)
818
819 #define ag_rp_99(c) (acs(c))
820
821 #define ag_rp_100(c) (acs(c))
822
823 #define ag_rp_101(c) (acs(c))
824
825 #define ag_rp_102(c) (acs(c))
826
827 #define ag_rp_103(c) (acs(c))
828
829 #define ag_rp_104(c) (acs(null_warning(c)))
830
831 #define ag_rp_105(c) (acs(null_warning(c)))
832
833 #define ag_rp_106(c) (acs(null_warning(c)))
834
835 #define ag_rp_107(c) (acs(null_warning(c)))
836
837 #define ag_rp_108() (0)
838
839 #define ag_rp_109() (cVariableList << buildAgString())
840
841 #define ag_rp_110(c) (scs(c))
842
843 #define ag_rp_111(c) (acs(c))
844
845 #define ag_rp_112() (ConfigParam::set(1, pggErrorHandler))
846
847 #define ag_rp_113() (ConfigParam::set(0, pggErrorHandler))
848
849 #define ag_rp_114() (ConfigParam::set(pggErrorHandler))
850
851 #define ag_rp_115() (ConfigParam::set(pggErrorHandler))
852
853 #define ag_rp_116() (ConfigParam::set(pggErrorHandler))
854
855 #define ag_rp_117(n) (ConfigParam::set(n, pggErrorHandler))
856
857 #define ag_rp_118() (concat_string(), ConfigParam::set(1, pggErrorHandler))
858
859 #define ag_rp_119() (sss("distinguish "))
860
861 #define ag_rp_120() (set_prec(1,0))
862
863 #define ag_rp_121() (set_prec(0,1))
864
865 #define ag_rp_122() (set_prec(0,0))
866
867 #define ag_rp_123() (set_sticky())
868
869 #define ag_rp_124() (set_subgrammar())
870
871 #define ag_rp_125() (set_hidden())
872
873 #define ag_rp_126(t) (disregard(t))
874
875 #define ag_rp_127() (extensionStack.push(cSegmentStack.pop()))
876
877 #define ag_rp_128() (set_lexeme())
878
879 #define ag_rp_129() (set_reserved_words())
880
881 #define ag_rp_130(oldName, newName) (at(rename_macro_list,oldName,newName))
882
883 #define ag_rp_131() ((PCB).pointer-input_base-1)
884
885 #define ag_rp_132(n) (distinguishSets.push(ParseTree(n)))
886
887 #define ag_rp_133(n) (distinguishSets.push(ParseTree(n)))
888
889 #define ag_rp_134(t) (sws(t))
890
891 #define ag_rp_135(t) (aws(t))
892
893 #define ag_rp_136() (vp_s())
894
895 #define ag_rp_137() (vp_5(vp_s()))
896
897 #define ag_rp_138() (vp_1())
898
899 #define ag_rp_139() (vp_2())
900
901 #define ag_rp_140() (vp_3())
902
903 #define ag_rp_141() (vp_4())
904
905 #define ag_rp_142(n) (vp_5(form_element_1(n)))
906
907 #define ag_rp_143(n) (vp_6(form_element_1(n)))
908
909 #define ag_rp_144(n) (vp_7(form_element_1(n)))
910
911 #define ag_rp_145() (vp_9())
912
913 #define ag_rp_146() (vp_10())
914
915 #define ag_rp_147() (proc_spec_4(0))
916
917 #define ag_rp_148() (proc_spec_4(1))
918
919 #define ag_rp_149() (proc_spec_4(0))
920
921 #define ag_rp_150() (proc_spec_4(1))
922
923 #define ag_rp_151(y) (cSegmentStack.top().end = y)
924
925 #define ag_rp_152() (cSegmentStack.push(CSegment()))
926
927 #define ag_rp_153() (PCB.pointer)
928
929 #define ag_rp_154() (PCB.pointer)
930
931 #define ag_rp_155() (cSegmentStack.push(CSegment()))
932
933 #define ag_rp_156() (cSegmentStack.top().end = PCB.pointer)
934
935 static void ag_rp_157(void) {
936 #line - "pgg24-2.syn"
937 if (nest_comments) PCB.reduction_token = pgg_c_comment_head_token;
938 #line - "pgg24-2.cpp"
939 }
940
941
942 #define READ_COUNTS
943 #define WRITE_COUNTS
944 #undef V
945 #define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i]))
946 #undef VS
947 #define VS(i) (PCB).vs[(PCB).ssx + i]
948
949 #ifndef GET_CONTEXT
950 #define GET_CONTEXT CONTEXT = (PCB).input_context
951 #endif
952
953 typedef enum {
954 ag_action_1,
955 ag_action_2,
956 ag_action_3,
957 ag_action_4,
958 ag_action_5,
959 ag_action_6,
960 ag_action_7,
961 ag_action_8,
962 ag_action_9,
963 ag_action_10,
964 ag_action_11,
965 ag_action_12
966 } ag_parser_action;
967
968
969 #ifndef NULL_VALUE_INITIALIZER
970 #define NULL_VALUE_INITIALIZER = { 0 }
971 #endif
972
973 static pgg_vs_type const ag_null_value NULL_VALUE_INITIALIZER;
974
975 static const unsigned char ag_rpx[] = {
976 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
977 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 3, 0, 4, 0,
978 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14,
979 0, 0, 15, 0, 16, 17, 0, 0, 0, 18, 19, 20, 0, 21, 22, 23, 24, 25,
980 26, 27, 28, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 0, 34, 35, 36,
981 37, 38, 39, 40, 0, 41, 0, 42, 43, 44, 45, 46, 47, 48, 0, 0, 0, 0,
982 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
983 0, 0, 0, 49, 50, 51, 0, 0, 52, 53, 0, 54, 0, 0, 55, 56, 57, 58,
984 59, 60, 61, 62, 63, 0, 64, 65, 0, 0, 66, 0, 67, 0, 68, 0, 69, 0,
985 0, 0, 0, 0, 0, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 0,
986 0, 0, 0, 0, 0, 82, 0, 0, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
987 93, 94, 95, 96, 97, 0, 0, 98, 99,100,101,102,103,104,105,106,107,108,
988 109,110,111, 0, 0, 0, 0, 0, 0, 0,112,113,114,115,116,117, 0,118,
989 119,120,121,122,123,124,125, 0, 0,126,127,128,129,130, 0,131, 0, 0,
990 0, 0, 0,132,133, 0,134,135,136,137,138,139,140,141,142,143,144,145,
991 146,147,148,149,150,151, 0, 0, 0, 0, 0,152,153,154, 0, 0, 0, 0,
992 0, 0, 0, 0, 0, 0, 0, 0, 0,155,156, 0, 0, 0, 0, 0, 0, 0,
993 0, 0, 0,157
994 };
995
996 static const unsigned char ag_key_itt[] = {
997 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
998 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
999 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1000 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1001 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1002 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1003 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1004 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1005 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1006 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1007 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1008 0
1009 };
1010
1011 static const unsigned short ag_key_pt[] = {
1012 0, 11, 0,147,0
1013 };
1014
1015 static const unsigned char ag_key_ch[] = {
1016 0, 42, 47,255, 47,255, 42, 47,255, 46,255, 46,255, 42, 47,255, 88,120,
1017 255, 46, 47,255,114,116,255,115,255,105,255,110,120,255,102,120,255,101,
1018 255,110,115,255,101,105,255,116,117,255, 46, 47,255, 45, 46, 47, 48, 58,
1019 63, 93,100,101,104,108,110,114,115,119,125,255, 47,255, 42, 47,255,114,
1020 116,255,115,255,105,255,110,120,255,102,120,255,101,255,110,115,255,101,
1021 105,255,116,117,255, 47,100,101,104,108,110,114,115,119,255, 42, 47,255,
1022 88,120,255, 47, 48, 58,255, 58,255, 42, 47,255, 46, 47,255, 46, 47,255,
1023 45, 46, 47, 58, 63, 93,125,255, 45, 47,255, 42, 47,255, 88,120,255, 47,
1024 48, 58, 92,125,255, 47,255, 47, 58,255,114,116,255,115,255,105,255,110,
1025 120,255,102,120,255,101,255,110,115,255,101,105,255,116,117,255, 47,100,
1026 101,104,108,110,114,115,119,255, 42, 47,255, 88,120,255, 47, 48, 58, 92,
1027 255, 88,120,255, 48,255, 42, 47,255, 45, 47,255, 42, 47,255, 88,120,255,
1028 47, 48,255, 88,120,255, 47, 48,255, 88,120,255, 47, 48, 58, 92,125,255,
1029 47, 58,255,114,116,255,115,255,105,255,110,120,255,102,120,255,101,255,
1030 110,115,255,101,105,255,116,117,255,100,101,104,108,110,114,115,119,255,
1031 42, 47,255, 46, 47,255, 46, 47,255, 47, 93,125,255, 42, 47,255, 47, 92,
1032 255, 92,255, 42, 47,255, 88,120,255, 47, 48, 58,125,255, 34, 39, 63, 92,
1033 97, 98,102,110,114,116,118,120,255, 92,255, 88,120,255, 48,125,255, 46,
1034 47,255, 46, 47,255, 47, 93,125,255, 46,255, 46,255, 46, 47,255, 46, 47,
1035 255, 46, 47, 63, 93,125,255, 46, 47,255, 46, 47,255, 46, 47, 63, 93,125,
1036 255, 46, 47, 63,255, 46, 47,255, 46, 47,255, 93,125,255, 46, 47,255, 93,
1037 255, 46, 47,255,125,255,125,255, 46,255, 46,255, 42, 47,255, 46, 47,255,
1038 46, 47,255, 46, 47, 63, 93,125,255, 47,107,255, 47,109,255, 47,112,255,
1039 88,120,255, 47, 48,255, 88,120,255, 48, 58,255, 47, 92,255, 42, 47,255,
1040 46, 47,255, 46, 47,255, 46, 47, 63, 93,125,255
1041 };
1042
1043 static const unsigned char ag_key_act[] = {
1044 0,0,0,4,2,4,3,3,4,5,4,6,4,0,0,4,0,0,4,3,3,4,3,3,4,2,4,2,4,3,3,4,3,3,4,
1045 2,4,3,3,4,2,3,4,3,3,4,3,3,4,3,2,2,2,3,3,2,2,2,3,2,3,2,2,3,2,4,3,4,0,0,
1046 4,3,3,4,2,4,2,4,3,3,4,3,3,4,2,4,3,3,4,2,3,4,3,3,4,2,2,2,3,2,3,2,2,3,4,
1047 0,0,4,0,0,4,2,2,3,4,3,4,0,0,4,3,3,4,3,3,4,3,7,2,3,3,2,2,4,3,3,4,0,0,4,
1048 0,0,4,2,2,3,3,3,4,3,4,3,3,4,3,3,4,2,4,2,4,3,3,4,3,3,4,2,4,3,3,4,2,3,4,
1049 3,3,4,3,2,2,3,2,3,2,2,3,4,0,0,4,0,0,4,2,2,3,3,4,0,0,4,2,4,0,0,4,3,2,4,
1050 0,0,4,0,0,4,2,2,4,0,0,4,3,2,4,0,0,4,3,2,3,3,3,4,3,3,4,3,3,4,2,4,2,4,3,
1051 3,4,3,3,4,2,4,3,3,4,2,3,4,3,3,4,2,2,3,2,3,2,2,3,4,0,0,4,3,3,4,3,3,4,2,
1052 2,2,4,0,0,4,2,3,4,3,4,0,0,4,0,0,4,2,2,3,3,4,0,0,0,0,0,0,0,0,0,0,0,0,4,
1053 2,4,0,0,4,2,3,4,3,3,4,3,3,4,3,2,2,4,5,4,6,4,3,3,4,3,3,4,2,3,3,2,2,4,3,
1054 3,4,3,3,4,7,3,3,2,2,4,7,3,3,4,3,3,4,3,3,4,2,2,4,3,3,4,2,4,3,3,4,2,4,3,
1055 4,5,4,6,4,0,0,4,3,3,4,3,3,4,2,2,3,2,2,4,3,3,4,3,3,4,3,3,4,0,0,4,3,2,4,
1056 0,0,4,2,3,4,3,3,4,0,0,4,3,3,4,3,3,4,7,2,3,2,2,4
1057 };
1058
1059 static const unsigned char ag_key_parm[] = {
1060 0,233,107, 0, 0, 0,232,233, 0, 0, 0, 2, 0,233,107, 0,123,122,
1061 0,210,213, 0,196,186, 0, 0, 0, 0, 0, 96,197, 0,187,199, 0, 0,
1062 0,202,200, 0, 0,189, 0,191,192, 0,209,212, 0, 2, 0, 0, 0, 80,
1063 211, 0, 0, 0,193, 0,190, 0, 0,205, 0, 0,107, 0,233,107, 0,196,
1064 186, 0, 0, 0, 0, 0, 96,197, 0,187,199, 0, 0, 0,202,200, 0, 0,
1065 189, 0,191,192, 0, 0, 0, 0,193, 0,190, 0, 0,205, 0,233,107, 0,
1066 123,122, 0, 0, 0, 80, 0, 80, 0,233,107, 0,210,213, 0,209,212, 0,
1067 2, 0, 0, 80,211, 0, 0, 0, 2,107, 0,233,107, 0,123,122, 0, 0,
1068 0, 80,230,209, 0,233, 0,107, 80, 0,196,186, 0, 0, 0, 0, 0, 96,
1069 197, 0,187,199, 0, 0, 0,202,200, 0, 0,189, 0,191,192, 0,107, 0,
1070 0,193, 0,190, 0, 0,205, 0,233,107, 0,123,122, 0, 0, 0, 80,230,
1071 0,123,122, 0, 0, 0,233,107, 0, 2, 0, 0,233,107, 0,123,122, 0,
1072 0, 0, 0,123,122, 0,107, 0, 0,123,122, 0,233, 0, 80,230,209, 0,
1073 233, 80, 0,196,186, 0, 0, 0, 0, 0, 96,197, 0,187,199, 0, 0, 0,
1074 202,200, 0, 0,189, 0,191,192, 0, 0, 0,193, 0,190, 0, 0,205, 0,
1075 233,107, 0,210,213, 0,209,212, 0, 0, 0, 0, 0,233,107, 0, 0,230,
1076 0,230, 0,233,107, 0,123,122, 0, 0, 0, 80,209, 0,170,169,168,167,
1077 160,161,162,163,164,165,166,174, 0, 0, 0,123,122, 0, 0,209, 0,210,
1078 213, 0,209,212, 0,107, 0, 0, 0, 0, 0, 2, 0,210,213, 0,209,212,
1079 0, 0,107,211, 0, 0, 0,210,213, 0,209,212, 0, 0,107,211, 0, 0,
1080 0, 0,107,211, 0,210,213, 0,209,212, 0, 0, 0, 0,210,213, 0, 0,
1081 0,209,212, 0, 0, 0,209, 0, 0, 0, 2, 0,233,107, 0,210,213, 0,
1082 209,212, 0, 0, 0,211, 0, 0, 0,233,201, 0,233,203, 0,233,198, 0,
1083 123,122, 0,233, 0, 0,123,122, 0, 0, 80, 0,233,230, 0,233,107, 0,
1084 210,213, 0,209,212, 0, 0, 0,211, 0, 0, 0
1085 };
1086
1087 static const unsigned short ag_key_jmp[] = {
1088 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0,
1089 0, 12, 15, 0, 19, 25, 0, 22, 0, 25, 0, 33, 36, 0, 47, 49, 0, 32,
1090 0, 61, 65, 0, 37, 70, 0, 74, 79, 0, 95, 98, 0, 4, 11, 13, 16, 6,
1091 8, 19, 27, 29, 41, 35, 53, 40, 43, 88, 46, 0,102, 0, 0, 0, 0,104,
1092 110, 0, 71, 0, 74, 0,118,121, 0,132,134, 0, 81, 0,146,150, 0, 86,
1093 155, 0,159,164, 0, 68, 76, 78,126, 84,138, 89, 92,173, 0, 0, 0, 0,
1094 0, 0, 0,105,108,180, 0,182, 0, 0, 0, 0,195,198, 0,202,205, 0,
1095 184,186,117,189,191,120,123, 0,209,211, 0, 0, 0, 0, 0, 0, 0,137,
1096 140,213,215,217, 0,221, 0,223,225, 0,229,235, 0,154, 0,157, 0,243,
1097 246, 0,257,259, 0,164, 0,271,275, 0,169,280, 0,284,289, 0,227,159,
1098 161,251,167,263,172,175,298, 0, 0, 0, 0, 0, 0, 0,188,191,305,307,
1099 0, 0, 0, 0,199, 0, 0, 0, 0,309,204, 0, 0, 0, 0, 0, 0, 0,
1100 210,213, 0, 0, 0, 0,311,219, 0, 0, 0, 0,313,225,315,317,319, 0,
1101 323,325, 0,327,333, 0,237, 0,240, 0,341,344, 0,355,357, 0,247, 0,
1102 369,373, 0,252,378, 0,382,387, 0,242,244,349,250,361,255,258,396, 0,
1103 0, 0, 0,403,406, 0,410,413, 0,270,273,276, 0, 0, 0, 0,283,417,
1104 0,419, 0, 0, 0, 0, 0, 0, 0,291,294,421,423, 0, 0, 0, 0, 0,
1105 0, 0, 0, 0, 0, 0, 0, 0, 0,302, 0, 0, 0, 0,317,427, 0,433,
1106 436, 0,440,443, 0,431,323,326, 0, 0, 0,333, 0,453,456, 0,460,463,
1107 0,335,447,449,337,340, 0,476,479, 0,483,486, 0,467,470,472,349,352,
1108 0,490,493,495, 0,499,502, 0,506,509, 0,365,368, 0,513,516, 0,374,
1109 0,520,523, 0,379, 0,527, 0, 0, 0,386, 0, 0, 0, 0,535,538, 0,
1110 542,545, 0,388,390,531,393,396, 0,549,551, 0,559,561, 0,566,568, 0,
1111 0, 0, 0,571,414, 0, 0, 0, 0,420,573, 0,575,577, 0, 0, 0, 0,
1112 586,589, 0,593,596, 0,579,429,582,432,435, 0
1113 };
1114
1115 static const unsigned short ag_key_index[] = {
1116 4, 6, 49, 66, 0, 0, 0, 95, 0, 0, 0, 0, 0,111,115, 4,126, 0,
1117 134, 95, 4,134,134, 66, 66, 66, 66, 0, 0, 0, 0,143,149,151, 0, 0,
1118 4,126,134,134,111, 0,178, 0, 0, 0, 0, 0, 0, 4, 0,194,202,207,
1119 216,222, 4, 4, 4,207, 66, 66, 0,228,149,149, 0,234,115, 66, 4,261,
1120 279, 0, 0, 0, 0, 0, 4,279,286,289,216,297,315,202,320,329,216,216,
1121 202, 0,315,216,202,343,202,355,361,202, 66,289, 66,216,202, 66, 4,207,
1122 228, 0,149, 4, 66, 0, 66, 0,149,149,149,149,149,149,149, 66, 66,149,
1123 149,149,149,149,149, 4, 0,149, 0, 66, 66, 0, 0, 0, 4,289, 0, 0,
1124 0,315,315,315,315,315,371,377,382,384,384,279, 0,399,399,399,399, 0,
1125 0,216,216,279,279,279,202,202,289,355,329,202, 0, 0, 0,234, 4,405,
1126 0,408,405,149,411,417, 0, 0,202, 0, 4, 0,149,423, 95, 0, 4, 0,
1127 0,426, 4,315,279,279,279,202,279,279,399,315,438,438,202,202,355,355,
1128 0, 4,329,279,149,115,149,149,202,149, 66, 66, 0, 0, 0,279, 0,149,
1129 0,149, 66, 0,202,279,202,115,149,202,315, 66,149, 0, 66
1130 };
1131
1132 static const unsigned char ag_key_ends[] = {
1133 47,0, 42,0, 62,0, 58,0, 46,46,46,0, 46,46,0, 46,46,46,0,
1134 101,103,97,114,100,0, 105,110,103,117,105,115,104,0, 117,109,0,
1135 116,101,110,100,0, 105,100,100,101,110,0, 116,0, 101,109,101,0,
1136 111,110,97,115,115,111,99,0, 97,109,101,0, 101,114,118,101,0,
1137 103,104,116,0, 105,99,107,121,0, 98,103,114,97,109,109,97,114,0,
1138 114,97,112,112,101,114,0, 46,46,0, 46,46,46,0, 47,0,
1139 101,103,97,114,100,0, 105,110,103,117,105,115,104,0, 117,109,0,
1140 116,101,110,100,0, 105,100,100,101,110,0, 116,0, 101,109,101,0,
1141 111,110,97,115,115,111,99,0, 97,109,101,0, 101,114,118,101,0,
1142 103,104,116,0, 105,99,107,121,0, 98,103,114,97,109,109,97,114,0,
1143 114,97,112,112,101,114,0, 58,0, 58,0, 62,0, 46,46,0, 58,0,
1144 46,46,46,0, 46,46,0, 46,46,46,0, 46,46,0, 46,46,46,0, 62,0,
1145 47,0, 58,0, 10,0, 46,46,46,0, 42,0, 47,0, 58,0, 47,0,
1146 101,103,97,114,100,0, 105,110,103,117,105,115,104,0, 117,109,0,
1147 116,101,110,100,0, 105,100,100,101,110,0, 116,0, 101,109,101,0,
1148 111,110,97,115,115,111,99,0, 97,109,101,0, 101,114,118,101,0,
1149 103,104,116,0, 105,99,107,121,0, 98,103,114,97,109,109,97,114,0,
1150 114,97,112,112,101,114,0, 58,0, 10,0, 62,0, 47,0, 42,0, 58,0,
1151 10,0, 46,46,46,0, 42,0, 58,0, 101,103,97,114,100,0,
1152 105,110,103,117,105,115,104,0, 117,109,0, 116,101,110,100,0,
1153 105,100,100,101,110,0, 116,0, 101,109,101,0,
1154 111,110,97,115,115,111,99,0, 97,109,101,0, 101,114,118,101,0,
1155 103,104,116,0, 105,99,107,121,0, 98,103,114,97,109,109,97,114,0,
1156 114,97,112,112,101,114,0, 46,46,0, 46,46,46,0, 46,46,0,
1157 46,46,46,0, 10,0, 10,0, 58,0, 46,46,46,0, 46,46,46,0, 47,0,
1158 46,46,0, 46,46,46,0, 46,46,0, 46,46,46,0, 47,0, 46,46,46,0,
1159 46,46,0, 46,46,46,0, 46,46,0, 46,46,46,0, 46,46,0, 47,0,
1160 46,46,46,0, 46,46,0, 46,46,46,0, 46,46,0, 46,46,46,0, 46,46,0,
1161 47,0, 46,46,46,0, 46,46,0, 46,46,46,0, 46,46,0, 46,46,46,0,
1162 46,46,0, 46,46,46,0, 46,46,0, 46,46,46,0, 46,46,46,0,
1163 46,46,46,0, 46,46,0, 46,46,46,0, 46,46,0, 46,46,46,0, 42,0,
1164 101,121,119,111,114,100,115,0, 42,0, 97,99,114,111,0, 42,0,
1165 99,98,0, 42,0, 58,0, 42,0, 10,0, 46,46,0, 46,46,46,0, 46,46,0,
1166 46,46,46,0, 46,46,0, 46,46,46,0,
1167 };
1168
1169 #define AG_TCV(x) ag_tcv[(x)]
1170
1171 static const unsigned char ag_tcv[] = {
1172 44,246,246,246,246,246,246,246,246, 97,104,106,106,102,246,246,246,246,
1173 246,246,246,246,246,246,246,246, 44,246,246,246,246,246, 97, 15,154,247,
1174 59,247,139, 33, 21, 31, 90, 25, 7, 23,247,247,128,244,244,244,244,244,
1175 244,244,245,245,177, 75, 87, 13, 86,208,247,131,131,131,131,131,131,243,
1176 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
1177 243, 19,172, 27,113,243,247,131,131,131,131,131,131,243,243,243,243,243,
1178 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, 17, 37, 29,
1179 35,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
1180 246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
1181 246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
1182 246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
1183 246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
1184 246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
1185 246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
1186 246,246,246,246
1187 };
1188
1189 #ifndef SYNTAX_ERROR
1190 #define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \
1191 (PCB).error_message, (PCB).line, (PCB).column)
1192 #endif
1193
1194 #ifndef FIRST_LINE
1195 #define FIRST_LINE 1
1196 #endif
1197
1198 #ifndef FIRST_COLUMN
1199 #define FIRST_COLUMN 1
1200 #endif
1201
1202 #ifndef PARSER_STACK_OVERFLOW
1203 #define PARSER_STACK_OVERFLOW {fprintf(stderr, \
1204 "\nParser stack overflow, line %d, column %d\n",\
1205 (PCB).line, (PCB).column);}
1206 #endif
1207
1208 #ifndef REDUCTION_TOKEN_ERROR
1209 #define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
1210 "\nReduction token error, line %d, column %d\n", \
1211 (PCB).line, (PCB).column);}
1212 #endif
1213
1214
1215 #ifndef INPUT_CODE
1216 #define INPUT_CODE(T) (T)
1217 #endif
1218
1219 typedef enum
1220 {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key,
1221 ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words;
1222
1223 static void ag_get_key_word(int ag_k) {
1224 int ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
1225 const unsigned char *ag_p;
1226 int ag_ch;
1227 while (1) {
1228 switch (ag_key_act[ag_k]) {
1229 case ag_cf_end_key: {
1230 const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
1231 do {
1232 if ((ag_ch = *sp++) == 0) {
1233 int ag_k1 = ag_key_parm[ag_k];
1234 int ag_k2 = ag_key_pt[ag_k1];
1235 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail;
1236 (PCB).token_number = (pgg_token_type) ag_key_pt[ag_k1 + 1];
1237 return;
1238 }
1239 } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
1240 goto ag_fail;
1241 }
1242 case ag_end_key: {
1243 const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
1244 do {
1245 if ((ag_ch = *sp++) == 0) {
1246 (PCB).token_number = (pgg_token_type) ag_key_parm[ag_k];
1247 return;
1248 }
1249 } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
1250 }
1251 case ag_no_match_key:
1252 ag_fail:
1253 (PCB).la_ptr = (PCB).pointer + ag_save;
1254 return;
1255 case ag_cf_set_key: {
1256 int ag_k1 = ag_key_parm[ag_k];
1257 int ag_k2 = ag_key_pt[ag_k1];
1258 ag_k = ag_key_jmp[ag_k];
1259 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break;
1260 ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
1261 (PCB).token_number = (pgg_token_type) ag_key_pt[ag_k1+1];
1262 break;
1263 }
1264 case ag_set_key:
1265 ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
1266 (PCB).token_number = (pgg_token_type) ag_key_parm[ag_k];
1267 case ag_jmp_key:
1268 ag_k = ag_key_jmp[ag_k];
1269 break;
1270 case ag_accept_key:
1271 (PCB).token_number = (pgg_token_type) ag_key_parm[ag_k];
1272 return;
1273 case ag_cf_accept_key: {
1274 int ag_k1 = ag_key_parm[ag_k];
1275 int ag_k2 = ag_key_pt[ag_k1];
1276 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)])
1277 (PCB).la_ptr = (PCB).pointer + ag_save;
1278 else (PCB).token_number = (pgg_token_type) ag_key_pt[ag_k1+1];
1279 return;
1280 }
1281 }
1282 ag_ch = CONVERT_CASE(*(PCB).la_ptr++);
1283 ag_p = &ag_key_ch[ag_k];
1284 if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++;
1285 if (ag_ch > 255 || *ag_p != ag_ch) {
1286 (PCB).la_ptr = (PCB).pointer + ag_save;
1287 return;
1288 }
1289 ag_k = (int) (ag_p - ag_key_ch);
1290 }
1291 }
1292
1293
1294 #ifndef AG_NEWLINE
1295 #define AG_NEWLINE 10
1296 #endif
1297
1298 #ifndef AG_RETURN
1299 #define AG_RETURN 13
1300 #endif
1301
1302 #ifndef AG_FORMFEED
1303 #define AG_FORMFEED 12
1304 #endif
1305
1306 #ifndef AG_TABCHAR
1307 #define AG_TABCHAR 9
1308 #endif
1309
1310 static void ag_track(void) {
1311 int ag_k = (int) ((PCB).la_ptr - (PCB).pointer);
1312 while (ag_k--) {
1313 switch (*(PCB).pointer++) {
1314 case AG_NEWLINE:
1315 (PCB).column = 1, (PCB).line++;
1316 case AG_RETURN:
1317 case AG_FORMFEED:
1318 break;
1319 case AG_TABCHAR:
1320 (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING);
1321 break;
1322 default:
1323 (PCB).column++;
1324 }
1325 }
1326 }
1327
1328
1329 static void ag_prot(void) {
1330 int ag_k;
1331 ag_k = 128 - ++(PCB).btsx;
1332 if (ag_k <= (PCB).ssx) {
1333 (PCB).exit_flag = AG_STACK_ERROR_CODE;
1334 PARSER_STACK_OVERFLOW;
1335 return;
1336 }
1337 (PCB).bts[(PCB).btsx] = (PCB).sn;
1338 (PCB).bts[ag_k] = (PCB).ssx;
1339 (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx];
1340 (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx];
1341 (PCB).cs[ag_k] = (PCB).cs[(PCB).ssx];
1342 }
1343
1344 static void ag_undo(void) {
1345 if ((PCB).drt == -1) return;
1346 while ((PCB).btsx) {
1347 int ag_k = 128 - (PCB).btsx;
1348 (PCB).sn = (PCB).bts[(PCB).btsx--];
1349 (PCB).ssx = (PCB).bts[ag_k];
1350 (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k];
1351 (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k];
1352 (PCB).cs[(PCB).ssx] = (PCB).cs[ag_k];
1353 }
1354 (PCB).token_number = (pgg_token_type) (PCB).drt;
1355 (PCB).ssx = (PCB).dssx;
1356 (PCB).sn = (PCB).dsn;
1357 (PCB).drt = -1;
1358 }
1359
1360
1361
1362 static const int ag_rtt[] = {
1363 98,231, 0
1364 };
1365
1366 static const unsigned char ag_tstt[] = {
1367 243,233,131,107,104,102,97,21,19,17,0,3,4,5,38,98,231,
1368 247,246,245,244,243,233,232,208,177,172,154,139,131,128,113,106,104,102,97,
1369 90,87,86,75,59,37,35,33,31,29,27,25,23,21,19,17,15,13,7,0,98,231,
1370 233,97,0,3,98,231,
1371 243,131,107,104,102,21,19,17,0,39,40,100,103,
1372 247,246,245,244,243,208,177,172,154,139,131,128,113,106,104,102,97,90,87,86,
1373 75,59,37,35,33,31,29,27,25,23,21,19,17,15,13,7,0,109,110,
1374 104,0,
1375 104,102,0,103,
1376 243,233,205,202,200,199,197,196,193,192,191,190,189,187,186,131,107,106,104,
1377 102,97,96,35,27,21,19,17,0,3,98,100,103,105,231,
1378 243,131,21,19,17,0,20,41,45,46,47,48,50,55,56,57,58,92,214,
1379 247,246,245,244,243,208,177,172,154,139,131,128,113,106,97,90,87,86,75,59,
1380 37,35,33,31,29,27,25,23,21,19,17,15,13,7,0,
1381 104,0,
1382 104,102,0,103,
1383 104,0,
1384 245,244,243,233,131,128,123,122,113,107,104,102,97,90,80,35,33,25,23,21,0,3,
1385 4,8,9,98,99,100,101,103,231,
1386 243,131,80,0,58,60,76,92,
1387 247,246,245,244,243,233,208,177,172,154,139,131,128,113,107,106,104,102,97,
1388 90,87,86,75,59,37,35,33,31,29,27,25,23,21,19,15,13,7,0,103,216,217,218,
1389 245,244,243,233,213,212,211,210,209,208,177,139,131,128,107,104,102,97,90,
1390 87,86,80,59,44,37,31,29,27,25,23,21,13,11,7,2,0,3,4,5,98,231,
1391 243,131,0,55,57,58,92,
1392 7,0,6,
1393 243,233,205,202,200,199,197,196,193,192,191,190,189,187,186,131,107,104,102,
1394 97,96,35,27,0,3,4,5,98,180,231,
1395 247,246,245,244,243,233,208,177,172,154,139,131,128,113,107,106,97,90,87,86,
1396 75,59,37,35,33,31,29,27,25,23,21,19,15,13,7,0,98,100,215,219,222,223,
1397 231,
1398 59,13,0,12,
1399 2,0,1,51,
1400 107,104,102,0,39,100,103,
1401 107,104,102,0,39,100,103,
1402 107,104,102,0,39,100,103,
1403 107,104,102,0,39,100,103,
1404 243,131,44,21,19,17,0,20,42,43,45,46,47,48,49,50,55,56,57,58,92,214,
1405 104,0,
1406 104,0,
1407 104,102,0,101,103,
1408 247,246,245,244,243,233,230,209,208,177,172,154,139,131,128,123,122,113,107,
1409 106,104,102,97,90,87,86,80,59,37,35,33,31,29,27,25,23,21,19,17,15,13,7,
1410 0,3,98,99,100,101,103,231,
1411 243,233,131,97,0,81,
1412 107,104,102,90,87,86,80,31,29,27,21,7,0,77,78,85,
1413 31,0,
1414 104,0,
1415 247,246,245,244,243,233,208,177,172,154,139,131,128,113,107,106,104,102,97,
1416 90,87,86,75,59,37,35,33,31,29,27,25,23,21,19,15,13,7,0,103,216,
1417 245,244,243,233,131,128,97,0,3,98,231,
1418 59,0,
1419 7,0,6,
1420 245,244,243,233,154,131,128,123,122,113,107,104,102,97,80,35,33,29,25,23,21,
1421 19,17,15,0,3,4,8,9,98,99,100,101,103,231,
1422 243,131,0,57,58,92,
1423 243,205,202,200,199,197,196,193,192,191,190,189,187,186,131,107,104,102,96,
1424 35,27,0,39,40,100,103,
1425 27,0,26,
1426 247,246,245,244,243,208,177,172,154,139,131,128,113,106,97,90,87,86,75,59,
1427 37,35,33,31,29,27,25,23,21,19,17,15,13,7,0,237,238,239,
1428 247,246,245,244,243,208,177,172,154,139,131,128,113,106,97,90,87,86,75,59,
1429 37,35,33,31,29,27,25,23,21,19,17,15,13,7,0,240,241,242,
1430 154,0,
1431 33,0,
1432 104,102,0,103,
1433 247,246,245,244,243,233,208,177,172,154,139,131,128,113,107,106,104,102,97,
1434 90,87,86,75,59,37,35,33,31,29,27,25,23,21,19,17,15,13,7,0,220,
1435 29,0,28,
1436 247,246,245,244,243,233,230,208,177,172,154,139,131,128,123,122,113,107,106,
1437 104,102,97,90,87,86,80,59,37,35,33,31,27,25,23,21,19,17,15,13,7,0,3,4,8,
1438 9,98,99,100,101,103,231,
1439 245,244,243,154,131,128,123,122,113,35,33,25,23,21,19,17,15,0,14,16,18,20,
1440 22,24,34,58,92,111,112,115,117,119,134,135,136,137,138,140,146,148,151,
1441 152,
1442 233,107,104,102,97,44,7,2,0,3,4,5,98,231,
1443 245,244,243,233,154,131,128,123,122,113,107,104,102,97,44,37,35,33,25,23,21,
1444 19,17,15,13,0,3,4,5,98,231,
1445 245,244,243,154,131,128,123,122,113,107,104,102,44,37,35,33,25,23,21,19,17,
1446 15,13,0,12,54,67,69,70,71,
1447 243,233,131,107,106,104,102,97,44,21,19,17,0,3,98,100,103,105,231,
1448 243,233,131,107,106,104,102,97,44,21,19,17,0,3,98,100,103,105,231,
1449 243,233,131,107,106,104,102,97,44,21,19,17,0,3,98,100,103,105,231,
1450 243,233,131,107,106,104,102,97,44,37,21,19,17,2,0,1,3,36,51,52,53,98,100,
1451 103,105,231,
1452 107,104,102,44,0,39,100,103,
1453 107,104,102,44,0,39,100,103,
1454 44,0,
1455 233,97,0,3,4,98,231,
1456 243,233,131,97,0,3,4,5,98,231,
1457 243,233,131,97,0,82,
1458 90,21,0,20,79,83,84,88,89,91,
1459 243,233,131,97,80,0,3,4,5,98,231,
1460 243,131,80,0,58,60,76,92,
1461 107,104,102,90,86,31,29,27,21,7,0,
1462 243,233,131,107,104,102,97,0,3,4,8,9,98,99,100,101,103,231,
1463 243,205,202,200,199,197,196,193,192,191,190,189,187,186,131,96,35,27,0,34,
1464 58,92,95,150,181,182,183,184,185,194,
1465 233,213,212,210,209,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1466 247,246,245,244,243,208,177,172,154,139,131,128,113,106,104,102,97,90,87,86,
1467 75,59,37,35,33,31,29,27,25,23,21,19,17,15,13,7,0,236,
1468 247,246,245,244,243,208,177,172,139,131,128,113,106,97,90,87,86,75,59,37,35,
1469 33,31,29,27,25,23,21,19,17,15,13,7,0,237,
1470 247,246,245,244,243,208,177,172,154,139,131,128,113,106,104,102,97,90,87,86,
1471 75,59,37,35,33,31,29,27,25,23,21,19,17,15,13,7,0,236,
1472 247,246,245,244,243,208,177,172,154,139,131,128,113,106,97,90,87,86,75,59,
1473 37,35,31,29,27,25,23,21,19,17,15,13,7,0,240,
1474 104,0,
1475 247,246,245,244,243,233,208,177,172,154,139,131,128,113,107,106,104,102,97,
1476 90,87,86,75,59,37,35,33,31,27,25,23,21,19,17,15,13,7,0,98,100,222,223,
1477 224,231,
1478 233,213,212,210,209,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1479 247,246,245,244,243,233,230,208,177,172,154,139,131,128,113,107,106,104,102,
1480 97,90,87,86,59,37,35,33,31,27,25,23,21,19,17,15,13,7,0,3,4,8,9,98,99,
1481 100,101,103,231,
1482 247,246,245,244,243,230,208,177,172,154,139,131,128,113,106,90,87,86,59,37,
1483 35,33,31,27,25,23,21,19,17,15,13,7,0,47,74,214,226,
1484 245,244,243,233,154,131,128,123,122,113,107,104,102,97,35,33,25,23,21,19,17,
1485 15,0,3,4,8,9,98,99,100,101,103,231,
1486 245,244,243,233,209,154,131,128,123,122,113,107,104,102,97,80,37,35,33,29,
1487 25,23,21,19,17,15,13,0,3,4,8,9,98,99,100,101,103,231,
1488 247,246,245,244,243,208,177,174,172,170,169,168,167,166,165,164,163,162,161,
1489 160,139,131,128,113,106,97,90,87,86,75,59,37,35,33,31,29,27,25,23,21,19,
1490 17,15,13,7,0,142,143,144,145,153,155,156,157,158,171,173,
1491 245,244,243,154,131,128,123,122,113,35,33,25,23,21,19,17,15,0,63,64,69,71,
1492 245,244,243,209,154,131,128,123,122,113,37,35,33,29,25,23,21,19,17,15,13,0,
1493 12,63,64,66,67,68,69,71,
1494 208,0,
1495 245,244,243,233,131,128,123,122,113,107,104,102,97,35,33,25,23,21,0,3,4,8,9,
1496 98,99,100,101,103,231,
1497 245,244,243,233,131,128,123,122,113,107,104,102,97,35,33,25,23,21,0,3,4,8,9,
1498 98,99,100,101,103,231,
1499 245,244,128,123,122,0,118,120,121,124,
1500 247,245,244,243,208,177,172,154,139,131,128,113,90,87,86,75,59,37,35,33,31,
1501 29,27,25,23,21,19,17,15,13,7,0,
1502 247,246,245,244,243,208,177,174,172,170,169,168,167,166,165,164,163,162,161,
1503 160,154,139,131,128,113,106,97,90,87,86,75,59,37,35,31,29,27,25,23,21,
1504 19,17,15,13,7,0,116,142,143,144,145,171,173,
1505 245,244,243,233,131,128,123,122,113,107,104,102,97,35,33,25,23,21,0,3,4,8,9,
1506 98,99,100,101,103,231,
1507 245,244,243,131,128,123,122,113,35,33,25,23,21,0,20,22,24,34,58,92,111,112,
1508 115,117,119,134,136,137,138,140,146,
1509 147,0,
1510 245,244,243,131,128,123,122,113,35,33,25,23,21,0,20,22,24,34,58,92,111,112,
1511 115,117,119,138,140,146,
1512 139,0,
1513 211,208,25,23,11,0,10,22,24,
1514 245,244,243,154,131,128,123,122,113,35,33,25,23,21,19,17,15,0,14,16,18,20,
1515 22,24,34,58,72,92,111,112,115,117,119,132,133,134,135,136,137,138,140,
1516 146,151,152,
1517 107,104,102,44,37,13,7,0,6,12,67,
1518 247,246,245,244,243,230,208,177,172,154,139,131,128,113,106,90,87,86,59,37,
1519 35,33,31,27,25,23,21,19,17,15,13,7,0,47,74,214,226,
1520 37,0,36,52,
1521 245,244,243,233,154,131,128,123,122,113,107,104,102,97,35,33,25,23,21,19,17,
1522 15,0,3,4,8,9,98,99,100,101,103,231,
1523 245,244,243,154,131,128,123,122,113,35,33,25,23,21,19,17,15,0,69,70,71,
1524 37,0,36,52,
1525 243,233,131,107,106,104,102,97,44,21,19,17,0,3,98,100,103,105,231,
1526 243,233,131,107,106,104,102,97,44,37,21,19,17,2,0,1,3,36,51,52,53,98,100,
1527 103,105,231,
1528 233,97,0,3,98,231,
1529 243,131,0,58,92,
1530 243,233,131,97,0,3,4,5,98,231,
1531 243,233,131,107,104,102,97,90,86,31,29,27,21,7,0,3,4,5,98,231,
1532 243,131,0,58,92,
1533 90,21,0,20,79,83,84,88,89,91,
1534 90,21,0,20,84,88,89,91,
1535 86,7,0,
1536 233,97,0,3,4,98,231,
1537 233,97,17,0,3,4,5,98,231,
1538 233,97,0,3,4,98,231,
1539 233,97,0,3,4,98,231,
1540 233,97,0,3,4,98,188,231,
1541 233,97,0,3,4,98,231,
1542 233,97,0,3,4,98,231,
1543 107,104,102,29,7,0,6,99,100,101,103,195,206,
1544 107,104,102,29,7,0,6,99,100,101,103,195,206,
1545 233,97,0,3,4,98,188,231,
1546 233,97,0,3,4,98,188,231,
1547 233,97,0,3,4,98,188,231,
1548 233,97,0,3,4,98,188,231,
1549 233,97,0,3,4,98,188,231,
1550 233,97,0,3,4,98,188,231,
1551 233,107,104,102,97,0,3,4,8,98,99,100,101,103,231,
1552 243,131,0,58,92,
1553 245,244,243,233,131,128,97,13,0,3,4,5,98,231,
1554 243,131,0,58,92,
1555 13,0,12,
1556 107,104,102,27,0,39,40,100,103,
1557 154,0,
1558 33,0,
1559 104,102,0,103,
1560 247,246,245,244,243,233,208,177,172,154,139,131,128,113,107,106,104,102,97,
1561 90,87,86,75,59,37,35,33,31,29,27,25,23,21,19,17,15,13,7,0,220,
1562 247,246,245,244,243,230,208,177,172,154,139,131,128,113,106,90,87,86,59,37,
1563 35,33,31,27,25,23,21,19,15,13,7,0,222,223,227,228,
1564 75,0,
1565 244,128,0,
1566 245,244,131,128,0,125,130,
1567 244,128,0,
1568 244,128,0,
1569 245,131,0,
1570 245,244,131,128,0,
1571 247,246,243,208,177,174,172,170,169,168,167,166,165,164,163,162,161,160,154,
1572 139,113,106,97,90,87,86,75,59,37,35,33,31,29,27,25,23,21,19,17,15,13,7,
1573 0,142,143,144,145,158,171,173,
1574 213,212,210,209,37,29,27,13,7,0,6,12,67,
1575 213,210,37,27,0,26,36,65,
1576 212,37,0,36,65,
1577 37,0,36,65,
1578 209,29,0,28,
1579 233,213,212,210,209,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1580 245,244,131,128,0,125,130,
1581 244,128,0,
1582 245,244,128,0,
1583 233,213,212,211,210,209,208,177,147,139,107,104,102,97,44,37,31,29,27,25,23,
1584 13,11,7,0,3,4,5,98,231,
1585 233,213,212,211,210,209,208,177,147,139,107,104,102,97,44,37,31,29,27,25,23,
1586 13,11,7,0,3,4,5,98,231,
1587 33,23,0,32,
1588 31,25,23,0,22,24,30,
1589 245,244,233,128,123,122,113,107,104,102,97,25,23,0,3,4,8,9,98,99,100,101,
1590 103,231,
1591 245,244,243,233,131,128,123,122,113,107,104,102,97,35,33,25,23,21,0,3,4,8,9,
1592 98,99,100,101,103,231,
1593 233,213,212,210,209,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1594 233,213,212,210,209,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1595 233,213,212,210,209,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1596 245,244,243,131,128,123,122,113,35,33,25,23,21,0,20,22,24,34,58,92,111,112,
1597 115,117,119,136,138,140,146,
1598 245,244,243,131,128,123,122,113,35,33,25,23,21,0,20,22,24,34,58,92,111,112,
1599 115,117,119,136,138,140,146,
1600 247,246,245,244,243,230,208,177,172,154,139,131,128,113,106,90,87,86,59,37,
1601 35,33,31,27,25,23,21,19,17,15,13,7,0,47,74,214,226,
1602 211,208,25,23,11,0,10,22,24,
1603 213,212,210,209,177,107,104,102,44,37,29,27,13,7,0,73,
1604 245,244,243,154,131,128,123,122,113,35,33,25,23,21,19,17,15,0,14,16,18,20,
1605 22,24,34,58,72,92,111,112,115,117,119,132,133,134,135,136,137,138,140,
1606 146,151,152,
1607 75,0,
1608 243,131,0,58,92,
1609 31,0,30,
1610 243,233,131,97,80,0,3,4,5,98,231,
1611 233,107,104,102,97,90,86,31,29,27,21,7,0,3,4,5,98,231,
1612 233,201,97,0,3,98,231,
1613 17,0,16,
1614 233,203,97,0,3,98,231,
1615 233,201,97,0,3,98,231,
1616 233,97,17,0,3,16,98,231,
1617 233,198,97,0,3,98,231,
1618 245,244,243,233,154,131,128,123,122,113,97,35,33,25,23,21,19,17,0,3,16,18,
1619 20,22,24,34,58,92,98,111,112,115,117,119,132,134,135,136,137,138,140,
1620 146,151,152,231,
1621 29,0,28,
1622 243,131,0,58,92,149,
1623 245,244,243,131,128,123,122,113,35,33,29,25,23,21,0,20,22,24,34,58,92,111,
1624 112,115,117,119,134,136,137,138,140,146,
1625 17,0,16,
1626 245,244,243,233,131,128,107,104,102,97,17,0,3,98,99,100,101,103,231,
1627 13,0,12,
1628 245,244,243,233,131,128,97,0,3,98,231,
1629 245,244,243,154,131,128,123,122,80,25,23,0,22,24,58,60,76,92,112,117,119,
1630 151,152,
1631 243,233,205,202,200,199,197,196,193,192,191,190,189,187,186,131,107,106,104,
1632 102,97,96,35,27,0,3,34,58,92,95,98,100,103,105,150,183,184,185,194,231,
1633 104,0,
1634 247,246,245,244,243,233,208,177,172,154,139,131,128,113,107,106,104,102,97,
1635 90,87,86,75,59,37,35,33,31,29,27,25,23,21,19,17,15,13,7,0,98,100,222,
1636 223,224,231,
1637 154,0,
1638 33,0,
1639 247,246,245,244,243,233,230,208,177,172,154,139,131,128,113,106,97,90,87,86,
1640 59,37,35,33,31,27,25,23,21,19,15,13,7,0,3,98,222,223,228,231,
1641 233,107,104,102,97,44,0,3,4,5,98,231,
1642 245,244,131,128,0,130,
1643 233,213,212,210,209,208,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1644 233,213,212,210,209,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1645 233,213,212,210,209,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1646 245,244,243,154,131,128,123,122,113,35,33,25,23,21,19,17,15,0,64,69,71,
1647 233,213,212,210,209,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1648 233,213,212,210,209,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1649 245,244,131,128,0,130,
1650 247,246,245,244,243,208,177,174,172,170,169,168,167,166,165,164,163,162,161,
1651 160,154,139,131,128,113,106,97,90,87,86,75,59,37,35,31,29,27,25,23,21,
1652 19,17,15,13,7,0,116,142,143,144,145,171,173,
1653 233,213,212,211,210,209,208,177,139,107,104,102,97,44,37,31,29,27,25,23,13,
1654 11,7,0,3,4,5,98,231,
1655 233,213,212,211,210,209,208,177,139,107,104,102,97,86,44,37,31,29,27,25,23,
1656 13,11,7,0,3,4,5,98,231,
1657 245,244,128,123,122,113,25,23,0,22,24,111,112,117,119,
1658 245,244,243,131,128,123,122,113,35,33,25,23,21,0,20,22,24,34,58,92,111,112,
1659 115,117,119,138,140,146,
1660 139,0,
1661 139,0,
1662 75,0,
1663 243,233,131,107,104,102,97,0,3,4,8,9,98,99,100,101,103,231,
1664 213,212,210,209,177,107,104,102,44,37,29,27,13,7,0,73,
1665 233,213,212,210,209,107,104,102,97,44,37,29,27,0,3,4,5,98,231,
1666 233,97,0,3,4,98,231,
1667 243,131,80,0,58,60,61,62,76,92,
1668 233,97,0,3,4,98,231,
1669 233,97,0,3,4,98,188,231,
1670 245,244,243,154,131,128,123,122,113,35,33,25,23,21,19,17,0,16,18,20,22,24,
1671 34,58,92,111,112,115,117,119,132,134,135,136,137,138,140,146,151,152,
1672 207,
1673 233,97,17,0,3,4,5,98,231,
1674 13,0,12,
1675 25,23,0,22,24,
1676 243,131,0,58,92,149,
1677 154,0,151,152,
1678 33,0,32,
1679 233,213,212,210,209,177,107,104,102,97,44,37,29,27,13,7,0,3,4,5,98,231,
1680 243,131,0,178,179,
1681 233,97,17,0,3,16,98,231,
1682 29,7,0,6,28,
1683 243,233,131,97,0,3,98,204,231,
1684 107,104,102,29,7,0,6,99,100,101,103,195,206,
1685 17,0,47,214,
1686 245,244,128,123,122,113,33,25,23,0,22,24,111,112,115,117,119,
1687 245,244,243,233,213,212,210,209,131,128,107,104,102,97,44,37,29,27,13,7,0,3,
1688 4,5,98,231,
1689 245,244,243,131,128,123,122,113,35,33,25,23,21,0,20,22,24,34,58,92,111,112,
1690 115,117,119,134,136,137,138,140,146,
1691 243,131,80,0,58,60,61,76,92,
1692 245,244,243,233,131,128,97,0,3,4,98,231,
1693 245,244,243,154,131,128,123,122,113,35,33,29,25,23,21,19,17,0,16,18,20,22,
1694 24,34,58,92,111,112,115,117,119,132,134,135,136,137,138,140,146,151,152,
1695 247,246,245,244,243,208,177,174,172,170,169,168,167,166,165,164,163,162,161,
1696 160,154,139,131,128,113,106,97,90,87,86,75,59,37,35,31,29,27,25,23,21,
1697 19,17,15,13,7,0,116,142,143,144,145,171,173,
1698 25,23,0,22,24,
1699 243,233,131,97,0,3,98,204,231,
1700 33,0,32,
1701 245,244,243,131,128,0,
1702
1703 };
1704
1705
1706 static unsigned const char ag_astt[4088] = {
1707 5,1,5,8,8,8,1,5,5,5,7,1,1,1,0,1,1,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
1708 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,2,1,1,9,5,3,3,1,8,8,1,8,1,8,8,8,7,1,
1709 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1710 1,1,7,1,3,3,7,8,1,7,1,5,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,9,8,1,9,5,5,5,5,5,
1711 5,7,3,3,1,1,3,1,2,2,1,1,1,7,1,1,1,1,1,1,1,1,1,2,1,1,1,9,9,9,9,9,9,9,9,9,9,
1712 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,5,3,7,8,1,7,1,3,7,5,5,5,1,
1713 5,5,5,5,5,1,8,1,1,5,5,5,5,5,5,5,7,1,1,3,3,1,3,1,3,1,1,2,2,1,7,1,1,1,1,5,5,
1714 5,5,5,5,5,5,5,5,5,5,5,5,5,5,8,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,7,1,
1715 1,1,2,10,10,10,1,5,5,5,5,5,5,5,5,10,10,5,5,5,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1716 5,5,5,7,1,1,3,1,1,2,2,7,1,2,1,1,1,4,1,5,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8,8,
1717 8,1,5,5,5,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,
1718 1,4,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,4,1,1,4,1,3,1,8,1,7,1,1,1,1,8,1,7,
1719 1,1,1,1,8,1,7,1,1,1,1,8,1,7,1,1,1,2,2,8,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,2,1,
1720 1,1,3,7,1,7,8,1,7,3,1,5,5,5,5,5,1,5,5,5,5,5,5,5,5,5,5,5,5,1,5,8,1,9,5,5,5,
1721 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,7,3,3,3,1,3,1,1,4,4,4,4,7,1,5,5,5,8,1,5,1,
1722 5,5,5,8,5,7,1,1,1,1,7,3,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8,1,5,5,5,5,5,5,
1723 5,5,5,5,5,5,5,5,5,5,5,5,5,7,1,3,2,2,2,1,2,2,9,5,3,3,1,1,4,1,4,1,5,5,5,1,5,
1724 5,5,5,5,5,1,8,1,1,5,5,5,5,5,5,5,5,5,5,7,1,1,3,3,1,3,1,3,1,1,2,2,7,2,1,1,8,
1725 8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,8,1,8,8,5,7,1,1,1,1,1,7,3,1,1,1,1,1,1,1,1,5,
1726 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,3,1,1,1,1,1,1,1,1,
1727 1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,7,1,1,3,3,7,3,7,8,1,7,
1728 1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,8,8,8,8,8,8,8,
1729 8,8,7,1,1,7,2,5,5,5,5,5,1,5,5,5,5,5,5,5,5,5,5,5,1,5,8,1,1,5,5,5,5,5,5,5,5,
1730 5,5,5,5,5,5,5,5,5,5,7,1,1,3,3,1,3,1,3,1,1,5,5,2,2,2,5,5,5,1,1,1,1,1,1,1,1,
1731 1,7,1,1,1,1,2,2,1,2,1,1,1,2,1,2,1,2,1,1,1,1,1,2,1,1,1,5,5,5,1,5,5,5,7,1,1,
1732 2,1,1,5,5,5,1,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,5,5,5,5,5,7,1,1,3,1,1,4,4,4,
1733 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,7,1,1,2,1,2,1,5,1,5,1,9,8,1,9,5,5,
1734 5,5,7,3,3,1,1,3,1,4,1,4,1,9,8,1,9,4,4,4,4,7,3,3,1,1,3,1,5,1,5,1,9,8,1,9,5,
1735 5,5,5,7,3,3,1,1,3,1,4,1,4,1,9,8,1,9,4,1,4,4,4,1,7,1,3,1,2,1,1,3,1,1,3,1,1,
1736 8,1,5,7,1,1,1,1,8,1,4,7,1,1,1,3,7,1,1,5,1,1,1,1,8,1,8,1,7,1,1,1,1,1,4,4,4,
1737 4,7,1,1,1,7,2,2,1,2,1,1,1,5,1,5,1,5,7,1,1,2,1,1,2,2,1,7,1,1,1,1,5,5,5,5,5,
1738 5,5,5,5,5,7,5,1,5,1,8,1,1,7,1,1,2,2,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,
1739 1,2,1,1,5,7,1,1,1,1,1,1,3,1,1,1,1,1,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,7,1,1,3,
1740 1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
1741 3,7,3,9,9,9,9,9,9,9,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,5,
1742 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
1743 7,3,9,9,9,9,9,9,9,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,5,3,
1744 3,7,9,9,9,9,9,1,9,9,9,1,9,9,9,9,1,9,9,9,9,9,9,9,9,9,9,9,1,9,9,9,9,9,9,1,9,
1745 9,9,4,3,1,1,1,3,1,1,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,7,1,1,3,1,1,5,5,5,5,5,1,
1746 5,5,5,5,5,5,5,5,5,1,5,8,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,7,1,1,3,3,1,
1747 3,1,3,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,4,4,4,
1748 7,2,1,1,1,5,5,5,1,5,5,5,5,5,5,1,8,1,1,5,5,5,5,5,5,5,5,7,1,1,3,3,1,3,1,3,1,
1749 1,5,5,5,1,5,5,5,5,5,5,5,1,8,1,1,5,5,5,5,5,5,5,5,5,5,5,5,7,1,1,3,3,1,3,1,3,
1750 1,1,2,2,2,2,2,2,2,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,
1751 2,2,2,2,2,2,2,2,2,2,7,2,2,2,2,1,1,1,1,2,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
1752 4,4,7,1,2,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,7,1,1,2,1,2,1,1,1,
1753 1,4,5,5,5,1,5,5,5,5,5,1,8,1,1,5,5,5,5,5,7,1,1,3,3,1,3,1,3,1,1,5,5,5,1,5,5,
1754 5,5,5,1,8,1,1,5,5,5,5,5,7,1,1,3,3,1,3,1,3,1,1,2,2,2,1,1,7,1,1,1,1,1,1,1,1,
1755 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,
1756 2,2,2,2,2,2,2,2,2,2,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,7,
1757 1,1,1,1,1,1,1,5,5,5,1,5,5,5,5,5,1,8,1,1,5,5,5,5,5,7,1,1,3,3,1,3,1,3,1,1,5,
1758 5,2,2,5,5,5,1,1,1,1,1,1,7,1,2,2,1,2,1,1,1,2,1,2,1,1,1,1,1,1,1,4,5,5,2,2,5,
1759 5,5,1,1,1,1,1,1,7,1,2,2,1,2,1,1,1,2,1,2,2,2,2,1,5,1,1,1,1,1,4,2,1,1,5,5,2,
1760 2,2,5,5,5,1,1,1,1,1,1,1,1,1,7,1,1,1,1,2,2,1,2,1,1,1,1,2,1,2,1,2,1,1,1,1,1,
1761 1,1,1,1,4,4,4,4,4,1,1,7,1,1,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
1762 4,4,4,4,4,4,1,4,4,4,7,2,1,1,1,1,5,1,3,5,5,5,1,5,5,5,5,5,5,1,8,1,1,5,5,5,5,
1763 5,5,5,5,7,1,1,3,3,1,3,1,3,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,2,1,1,
1764 5,1,3,5,1,5,1,9,8,1,9,5,5,5,5,7,3,3,1,1,3,1,4,1,4,1,9,8,1,9,4,1,4,4,4,1,7,
1765 1,3,1,2,1,1,3,1,1,3,1,1,9,5,3,3,1,2,2,7,2,1,8,1,8,1,7,1,1,1,1,1,5,1,5,5,5,
1766 5,1,5,5,5,5,5,5,5,7,1,1,2,1,1,2,2,5,2,1,1,1,7,2,1,1,1,1,1,1,1,1,5,2,2,1,1,
1767 2,1,1,7,1,1,7,1,1,1,1,1,1,8,7,1,1,1,1,1,1,1,7,1,1,1,1,1,1,7,1,1,1,1,1,1,7,
1768 1,1,1,2,1,1,1,7,1,1,1,1,1,1,7,1,1,1,1,1,8,1,8,1,7,1,1,1,1,1,3,1,1,8,1,8,1,
1769 7,1,1,1,1,1,3,1,1,1,7,1,1,1,2,1,1,1,7,1,1,1,2,1,1,1,7,1,1,1,2,1,1,1,7,1,1,
1770 1,2,1,1,1,7,1,1,1,2,1,1,1,7,1,1,1,2,1,1,1,8,1,1,7,1,1,1,1,1,1,1,1,1,2,2,7,
1771 2,1,10,10,10,1,10,10,1,8,7,1,1,1,1,1,2,2,7,2,1,1,4,1,1,8,1,5,7,1,3,1,1,3,7,
1772 3,7,8,1,7,1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
1773 8,8,8,8,8,8,8,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,
1774 1,1,1,7,1,1,1,1,1,7,2,2,7,2,2,2,2,7,1,2,2,2,5,2,2,5,2,2,5,10,10,10,10,5,2,
1775 2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1776 2,2,2,2,7,2,2,2,2,2,1,1,4,4,4,4,4,4,4,1,1,7,1,1,2,1,1,1,1,7,2,1,3,1,1,5,1,
1777 3,1,5,1,3,1,1,7,2,1,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,7,1,1,2,1,1,2,2,2,2,7,1,
1778 2,10,10,4,10,10,10,5,1,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,5,5,5,5,7,1,1,
1779 2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,5,5,5,5,7,1,1,2,1,1,1,1,7,2,
1780 1,1,1,7,1,1,2,8,8,1,8,8,8,8,1,8,1,1,8,8,7,1,1,1,1,1,1,1,1,1,1,8,8,8,1,8,8,
1781 8,8,8,1,8,1,1,8,8,8,8,8,7,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,1,5,5,5,5,
1782 5,5,7,1,1,3,1,1,1,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,7,1,1,2,1,1,1,5,5,5,5,5,5,
1783 5,5,1,5,5,5,5,5,5,7,1,1,2,1,1,5,5,2,2,5,5,5,1,1,1,1,1,1,7,1,2,2,1,2,1,1,1,
1784 2,1,2,1,1,1,1,5,5,2,2,5,5,5,1,1,1,1,1,1,7,1,2,2,1,2,1,1,1,2,1,2,1,1,1,1,4,
1785 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,4,4,4,7,2,1,1,1,1,
1786 1,1,1,1,4,2,1,1,4,4,4,4,1,4,4,4,4,4,4,4,4,4,7,2,5,5,2,2,2,5,5,5,1,1,1,1,1,
1787 1,1,1,1,7,1,1,1,1,2,2,1,2,1,1,1,1,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,7,2,2,7,2,
1788 1,1,7,2,5,1,5,1,5,7,1,1,2,1,1,1,5,5,5,1,5,5,5,5,5,5,5,7,1,1,2,1,1,1,1,9,4,
1789 3,3,1,1,7,1,1,1,9,7,3,3,1,1,1,9,7,3,3,1,1,9,1,7,3,1,3,1,1,1,9,7,3,3,1,5,5,
1790 2,1,2,2,5,5,5,1,9,1,1,1,1,1,1,1,7,3,1,1,1,2,2,1,2,1,3,1,1,2,1,2,2,1,2,1,1,
1791 1,1,1,1,1,1,1,7,3,2,2,5,1,1,3,5,5,2,2,5,5,5,1,1,1,5,1,1,1,7,1,2,2,1,2,1,1,
1792 1,2,1,2,1,1,1,1,1,1,1,7,1,2,2,2,1,2,2,1,8,1,9,5,7,3,3,3,1,3,1,1,1,7,1,2,2,
1793 2,1,2,2,9,5,3,3,1,5,5,2,2,2,5,5,5,1,1,1,7,2,2,1,2,1,1,2,1,2,2,1,2,1,1,1,1,
1794 1,1,1,1,1,1,1,1,1,1,2,1,9,8,1,9,1,1,5,7,3,1,1,1,1,3,1,1,3,1,3,3,1,1,1,3,7,
1795 9,9,9,9,9,1,9,9,9,1,9,9,9,9,1,9,9,9,9,9,9,9,9,9,9,9,1,9,3,9,9,9,9,9,1,9,9,
1796 9,7,3,1,1,1,3,1,3,7,3,7,9,9,9,9,9,1,9,9,9,9,1,9,9,9,9,9,9,9,9,9,9,9,9,1,9,
1797 9,9,9,9,9,9,9,9,4,3,3,1,1,3,1,1,5,5,5,1,5,7,1,1,2,1,1,2,2,2,2,4,2,1,5,5,5,
1798 5,5,5,5,5,5,1,5,5,5,5,5,5,7,1,1,3,1,1,1,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,7,1,
1799 1,2,1,1,1,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,7,1,1,2,1,1,4,4,4,4,4,4,4,4,4,4,4,
1800 4,4,4,4,4,4,7,2,1,1,1,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,7,1,1,2,1,1,1,5,5,5,5,
1801 5,5,5,5,1,5,5,5,5,5,5,7,1,1,2,1,1,2,2,2,2,4,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,
1802 2,2,2,2,2,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,7,1,1,1,1,1,
1803 1,1,1,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,5,5,5,5,7,1,1,3,1,1,1,5,5,5,5,5,
1804 5,5,5,5,5,5,1,5,5,5,5,5,5,5,5,5,5,5,7,1,1,3,1,1,5,5,5,5,5,1,1,1,7,2,2,2,2,
1805 1,2,5,5,2,2,5,5,5,1,1,1,1,1,1,7,1,2,2,1,2,1,1,1,2,1,2,2,2,2,1,4,1,4,1,7,8,
1806 1,8,1,8,1,1,7,1,1,1,1,1,1,1,1,1,1,4,4,4,4,1,4,4,4,4,4,4,4,4,4,7,2,1,5,5,5,
1807 5,5,5,5,1,5,5,5,5,7,1,1,2,1,1,1,1,7,1,1,1,1,2,2,1,7,1,2,1,1,1,1,1,1,7,1,1,
1808 1,1,1,1,7,1,1,1,2,1,5,5,2,2,2,5,5,5,1,1,1,1,1,1,1,1,7,1,1,1,2,2,1,2,1,1,1,
1809 2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,8,7,1,1,1,1,1,1,4,1,1,1,4,1,1,2,2,7,1,1,3,
1810 2,7,2,1,1,7,2,1,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,7,1,1,2,1,1,2,2,7,2,1,1,9,1,
1811 7,3,1,3,1,1,1,7,1,3,2,1,2,9,7,3,3,1,1,1,8,1,8,1,7,1,1,1,1,1,3,1,1,7,2,1,5,
1812 5,5,5,5,1,1,1,1,7,2,2,2,2,2,1,2,10,10,10,1,5,5,5,5,10,10,5,5,5,1,5,5,5,5,5,
1813 5,7,1,1,3,1,1,5,5,2,2,5,5,5,1,1,1,1,1,1,7,1,2,2,1,2,1,1,1,2,1,2,1,1,1,1,1,
1814 1,2,2,1,7,1,2,3,1,1,9,9,9,1,9,9,1,7,1,1,1,1,5,5,2,2,2,5,5,5,1,1,1,5,1,1,1,
1815 1,1,7,1,1,1,2,2,1,2,1,1,1,2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
1816 2,2,2,2,2,2,2,2,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,7,1,1,
1817 1,1,1,1,1,1,1,4,1,1,2,1,2,9,7,3,3,1,1,1,7,2,9,9,9,9,9,4
1818 };
1819
1820
1821 static const unsigned short ag_pstt[] = {
1822 3,1,3,3,3,3,2,3,3,3,0,2,2,3,0,2,1,
1823 308,308,308,308,308,1,306,308,308,308,308,308,308,308,308,308,308,308,308,
1824 308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
1825 308,1,309,1,
1826 1,2,4,2,2,1,
1827 8,8,4,5,5,8,8,8,3,7,8,6,5,
1828 9,9,9,9,9,9,9,9,9,9,9,9,9,9,125,125,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
1829 4,9,127,
1830 120,5,
1831 10,10,6,10,
1832 24,1,24,24,24,24,24,24,24,24,24,24,24,24,24,24,4,122,12,12,121,24,24,24,24,
1833 24,24,7,121,121,11,12,121,1,
1834 98,98,13,19,15,8,14,27,26,25,24,23,22,18,17,48,21,16,20,
1835 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1836 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,126,
1837 119,10,
1838 28,28,11,28,
1839 117,12,
1840 6,6,6,1,6,6,6,6,6,4,29,29,31,6,6,6,6,6,6,6,13,31,31,14,14,31,14,30,14,29,1,
1841 98,98,32,14,33,34,33,16,
1842 279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,35,35,279,
1843 279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,
1844 15,35,36,36,281,
1845 99,99,99,1,3,3,3,3,3,3,3,3,99,99,3,3,3,37,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
1846 16,37,37,104,37,1,
1847 98,98,17,39,48,38,16,
1848 40,46,41,
1849 3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,42,42,42,2,3,3,3,19,2,2,42,2,43,1,
1850 49,49,49,49,49,1,49,49,49,44,49,49,49,49,4,49,49,49,49,49,49,49,49,49,45,49,
1851 282,49,49,49,49,49,49,49,49,20,49,48,50,49,47,46,1,
1852 53,51,50,52,
1853 54,36,55,37,
1854 4,5,5,23,56,6,5,
1855 4,5,5,24,57,6,5,
1856 4,5,5,25,58,6,5,
1857 4,5,5,26,59,6,5,
1858 98,98,62,13,19,15,27,14,62,62,61,60,60,60,60,22,18,17,48,21,16,20,
1859 118,28,
1860 63,29,
1861 29,29,30,110,29,
1862 107,107,107,107,107,1,107,107,107,107,107,107,107,107,107,107,107,107,4,107,
1863 29,29,2,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
1864 107,107,107,31,2,2,108,30,108,29,1,
1865 81,81,81,81,32,64,
1866 75,75,75,66,67,75,65,75,75,75,66,75,33,69,66,68,
1867 70,34,
1868 276,35,
1869 280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,35,35,280,
1870 280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,
1871 36,35,278,
1872 100,100,100,1,100,100,2,4,2,2,1,
1873 53,50,
1874 40,47,41,
1875 6,6,6,1,6,6,6,6,6,6,4,29,29,31,6,6,6,6,6,6,6,6,6,6,40,31,31,8,8,31,8,30,8,
1876 29,1,
1877 98,98,41,49,38,16,
1878 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,4,5,5,71,71,23,42,7,71,6,5,
1879 72,43,220,
1880 74,74,74,74,74,74,74,73,315,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
1881 74,74,74,74,74,74,74,74,74,44,74,74,317,
1882 76,76,76,76,76,76,76,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,323,76,76,
1883 76,76,76,76,76,76,76,76,76,45,76,76,325,
1884 288,46,
1885 287,47,
1886 77,77,48,77,
1887 78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,
1888 78,78,78,289,78,78,78,78,78,78,78,78,78,49,78,
1889 79,50,275,
1890 6,6,6,6,6,1,6,6,6,6,6,6,6,6,6,6,6,4,6,29,29,31,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
1891 6,6,6,6,51,31,31,10,10,31,10,30,10,29,1,
1892 132,132,98,185,98,132,132,132,91,93,92,88,89,13,82,83,80,52,81,86,85,94,135,
1893 134,96,169,16,95,95,168,90,134,98,174,97,98,97,97,97,175,87,84,
1894 1,3,3,3,2,3,3,3,53,2,2,51,2,1,
1895 3,3,3,1,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,54,2,2,5,2,1,
1896 71,71,71,71,71,71,71,71,71,72,72,72,72,72,71,71,71,71,71,71,71,71,51,55,101,
1897 102,64,100,65,99,
1898 31,1,31,4,122,12,12,121,31,31,31,31,56,121,121,11,12,121,1,
1899 30,1,30,4,122,12,12,121,30,30,30,30,57,121,121,11,12,121,1,
1900 29,1,29,4,122,12,12,121,29,29,29,29,58,121,121,11,12,121,1,
1901 28,1,28,4,122,12,12,121,28,103,28,28,28,54,59,55,121,104,38,105,105,121,11,
1902 12,121,1,
1903 4,5,5,35,60,106,6,5,
1904 4,5,5,34,61,107,6,5,
1905 27,62,
1906 1,108,114,108,108,108,1,
1907 109,1,109,2,64,2,2,109,2,1,
1908 83,83,83,83,65,110,
1909 111,13,66,91,79,114,79,113,112,114,
1910 3,1,3,2,3,67,2,2,89,2,1,
1911 98,98,32,68,33,115,33,16,
1912 76,76,76,78,76,76,76,76,78,76,69,
1913 6,1,6,4,29,29,31,70,31,31,52,52,31,52,30,52,29,1,
1914 98,117,118,119,120,121,122,125,126,127,128,129,130,116,98,131,93,221,71,134,
1915 135,16,133,123,136,223,136,136,132,124,
1916 1,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,72,2,2,17,2,1,
1917 312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,
1918 312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,73,
1919 312,
1920 314,314,314,314,314,314,314,73,314,314,314,314,314,314,314,314,314,314,314,
1921 314,314,314,314,314,314,314,314,314,314,314,314,314,314,316,314,
1922 320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,
1923 320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,75,
1924 320,
1925 322,322,322,322,322,322,322,75,322,322,322,322,322,322,322,322,322,322,322,
1926 322,322,322,322,322,322,322,322,322,322,322,322,322,322,324,322,
1927 286,77,
1928 290,290,290,290,290,1,290,290,290,44,290,290,290,290,4,290,290,290,290,290,
1929 290,290,290,290,290,290,45,290,290,290,290,290,290,140,290,290,290,283,
1930 290,139,138,137,290,1,
1931 1,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,79,2,2,18,2,1,
1932 6,6,6,6,6,1,6,6,6,6,6,6,6,6,6,4,6,29,29,31,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
1933 6,80,31,31,11,11,31,11,30,11,29,1,
1934 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
1935 297,297,297,297,297,297,297,297,297,15,297,297,297,81,271,142,20,141,
1936 6,6,6,1,6,6,6,6,6,6,4,29,29,31,6,6,6,6,6,6,6,6,82,31,31,13,13,31,13,30,13,
1937 29,1,
1938 6,6,6,1,6,6,6,6,6,6,6,4,29,29,31,6,6,6,6,6,6,6,6,6,6,6,6,83,31,31,12,12,31,
1939 12,30,12,29,1,
1940 206,206,207,207,206,206,206,144,143,199,198,197,196,195,194,193,192,191,190,
1941 189,206,207,207,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
1942 206,206,206,206,206,206,206,206,84,206,211,188,213,149,148,147,149,206,
1943 146,145,
1944 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,85,151,56,150,99,
1945 71,71,71,72,71,71,71,71,71,71,72,71,71,72,71,71,71,71,71,71,51,86,101,152,
1946 56,153,59,154,150,99,
1947 155,260,
1948 6,6,6,1,6,6,6,6,6,4,29,29,31,6,6,6,6,6,88,31,31,16,16,31,16,30,16,29,1,
1949 6,6,6,1,6,6,6,6,6,4,29,29,31,6,6,6,6,6,89,31,31,15,15,31,15,30,15,29,1,
1950 141,141,143,156,156,90,159,158,157,156,
1951 160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
1952 160,160,160,160,160,160,160,160,160,160,160,160,91,
1953 161,161,161,161,161,161,161,144,143,199,198,197,196,195,194,193,192,191,190,
1954 189,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
1955 161,161,161,161,161,161,161,161,92,161,161,161,161,161,146,145,
1956 6,6,6,1,6,6,6,6,6,4,29,29,31,6,6,6,6,6,93,31,31,21,21,31,21,30,21,29,1,
1957 132,132,98,98,132,132,132,91,93,92,88,89,13,94,94,135,134,96,169,16,95,95,
1958 168,90,134,162,97,162,97,97,97,
1959 163,167,
1960 132,132,98,98,132,132,132,91,93,92,88,89,13,96,94,135,134,96,169,16,95,95,
1961 168,90,134,160,160,160,
1962 164,153,
1963 166,167,88,89,165,173,268,168,169,
1964 132,132,98,185,98,132,132,132,91,93,92,88,89,13,82,83,80,99,170,86,85,94,
1965 135,134,96,169,172,16,95,95,168,90,134,172,150,171,172,97,171,97,97,97,
1966 87,84,
1967 72,72,72,72,72,51,40,100,173,101,68,
1968 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
1969 297,297,297,297,297,297,297,297,297,15,297,297,297,101,73,174,20,141,
1970 103,42,104,66,
1971 6,6,6,1,6,6,6,6,6,6,4,29,29,31,6,6,6,6,6,6,6,6,103,31,31,22,22,31,22,30,22,
1972 29,1,
1973 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,104,100,67,99,
1974 103,41,104,40,
1975 33,1,33,4,122,12,12,121,33,33,33,33,106,121,121,11,12,121,1,
1976 32,1,32,4,122,12,12,121,32,103,32,32,32,54,107,55,121,104,38,105,105,121,11,
1977 12,121,1,
1978 1,2,115,2,2,1,
1979 98,98,109,82,16,
1980 175,1,175,2,110,2,2,175,2,1,
1981 3,1,3,3,3,3,2,3,3,3,3,3,3,3,111,2,2,93,2,1,
1982 98,98,94,95,16,
1983 111,13,113,91,176,114,176,113,112,114,
1984 111,13,85,91,87,113,112,97,
1985 178,177,115,
1986 1,179,116,179,179,179,1,
1987 1,2,180,117,2,2,180,2,1,
1988 1,181,118,181,181,181,1,
1989 1,182,119,182,182,182,1,
1990 1,183,120,183,183,183,245,1,
1991 1,184,121,184,184,184,1,
1992 1,185,122,185,185,185,1,
1993 4,29,29,186,40,123,187,186,30,186,29,242,186,
1994 4,29,29,186,40,124,188,186,30,186,29,241,186,
1995 1,183,125,183,183,183,240,1,
1996 1,183,126,183,183,183,239,1,
1997 1,183,127,183,183,183,238,1,
1998 1,183,128,183,183,183,237,1,
1999 1,183,129,183,183,183,236,1,
2000 1,183,130,183,183,183,235,1,
2001 1,4,29,29,190,131,190,190,189,190,189,30,189,29,1,
2002 98,98,132,233,16,
2003 102,102,102,1,102,102,192,191,133,192,192,191,192,1,
2004 98,98,134,227,16,
2005 51,226,193,
2006 4,5,5,23,136,194,222,6,5,
2007 296,137,
2008 295,138,
2009 195,195,139,195,
2010 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
2011 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
2012 196,140,196,
2013 199,199,199,199,199,199,199,199,199,44,199,199,199,199,199,199,199,199,199,
2014 199,199,45,199,199,199,199,199,199,199,199,199,141,198,197,199,199,
2015 200,142,
2016 200,200,143,
2017 147,147,148,147,144,201,145,
2018 202,202,204,
2019 201,201,203,
2020 210,210,183,
2021 209,209,209,209,182,
2022 208,208,208,208,208,144,143,199,198,197,196,195,194,193,192,191,190,189,202,
2023 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
2024 208,208,208,208,208,149,208,212,188,214,208,146,145,
2025 72,72,72,72,72,72,72,51,40,150,173,101,63,
2026 203,204,103,72,151,264,205,57,
2027 206,103,62,205,57,
2028 103,61,205,60,
2029 207,79,154,262,
2030 1,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,155,2,2,261,2,1,
2031 147,147,148,147,156,208,145,
2032 144,144,137,
2033 142,142,142,136,
2034 1,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,159,2,2,131,2,1,
2035 1,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,160,2,2,129,2,1,
2036 210,209,161,130,
2037 211,88,89,162,168,169,170,
2038 212,212,1,212,212,212,212,4,29,29,31,212,212,163,31,31,212,212,31,212,30,
2039 212,29,1,
2040 213,213,213,1,213,213,213,213,213,4,29,29,31,213,213,213,213,213,164,31,31,
2041 213,213,31,213,30,213,29,1,
2042 1,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,165,2,2,9,2,1,
2043 1,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,166,2,2,267,2,1,
2044 1,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,167,2,2,266,2,1,
2045 132,132,98,98,132,132,132,91,93,92,88,89,13,168,94,135,134,96,169,16,95,95,
2046 168,90,134,214,214,214,214,
2047 132,132,98,98,132,132,132,91,93,92,88,89,13,169,94,135,134,96,169,16,95,95,
2048 168,90,134,215,215,215,215,
2049 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
2050 297,297,297,297,297,297,297,297,297,15,297,297,297,170,273,216,20,141,
2051 166,167,88,89,165,151,268,168,169,
2052 215,215,215,215,217,215,215,215,215,215,215,215,215,215,172,69,
2053 132,132,98,185,98,132,132,132,91,93,92,88,89,13,82,83,80,173,170,86,85,94,
2054 135,134,96,169,218,16,95,95,168,90,134,218,150,171,218,97,171,97,97,97,
2055 87,84,
2056 219,174,
2057 98,98,175,84,16,
2058 211,176,92,
2059 3,1,3,2,3,177,2,2,90,2,1,
2060 1,3,3,3,2,3,3,3,3,3,3,3,178,2,2,88,2,1,
2061 1,220,2,234,2,2,1,
2062 83,180,221,
2063 1,222,2,181,2,2,1,
2064 1,223,2,182,2,2,1,
2065 1,2,83,183,2,224,2,1,
2066 1,225,2,184,2,2,1,
2067 132,132,98,1,185,98,132,132,132,91,2,93,92,88,89,13,82,83,185,2,86,85,94,
2068 135,134,96,169,16,2,95,95,168,90,134,243,171,243,97,171,97,97,97,87,84,
2069 1,
2070 79,186,254,
2071 98,98,252,226,16,180,
2072 132,132,98,98,132,132,132,91,93,92,252,88,89,13,188,94,135,134,96,169,16,95,
2073 95,168,90,134,227,97,227,97,97,97,
2074 83,189,228,
2075 101,101,101,1,101,101,4,29,29,2,107,190,2,2,108,30,108,29,1,
2076 51,191,229,
2077 103,103,103,1,103,103,2,4,2,2,1,
2078 132,132,98,185,98,132,132,132,32,88,89,193,135,134,33,228,33,16,231,90,134,
2079 229,84,
2080 98,1,117,118,119,120,121,122,125,126,127,128,129,130,116,98,4,122,12,12,121,
2081 131,93,24,194,121,134,135,16,133,121,11,12,121,123,225,225,132,124,1,
2082 294,195,
2083 290,290,290,290,290,1,290,290,290,44,290,290,290,290,4,290,290,290,290,290,
2084 290,290,290,290,290,290,45,290,292,290,290,290,290,290,140,290,290,290,
2085 196,290,139,138,137,290,1,
2086 305,197,
2087 304,198,
2088 300,300,300,300,300,1,300,300,300,300,44,300,300,300,300,300,301,300,300,
2089 300,300,300,300,45,300,300,300,300,300,300,300,300,300,298,301,301,198,
2090 197,300,1,
2091 1,3,3,3,2,3,200,2,2,272,2,1,
2092 147,147,148,147,205,146,
2093 1,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,202,2,2,181,2,1,
2094 1,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,203,2,2,270,2,1,
2095 1,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,204,2,2,265,2,1,
2096 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,205,58,150,99,
2097 1,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,206,2,2,269,2,1,
2098 1,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,207,2,2,263,2,1,
2099 147,147,148,147,140,146,
2100 230,230,230,230,230,230,230,144,143,199,198,197,196,195,194,193,192,191,190,
2101 189,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
2102 230,230,230,230,230,230,230,230,209,230,230,230,230,230,146,145,
2103 1,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,210,2,2,20,2,1,
2104 1,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,211,2,2,19,2,1,
2105 132,132,132,132,132,91,88,89,212,135,134,172,172,90,134,
2106 132,132,98,98,132,132,132,91,93,92,88,89,13,213,94,135,134,96,169,16,95,95,
2107 168,90,134,158,158,158,
2108 164,156,
2109 164,154,
2110 231,216,
2111 232,1,232,4,29,29,31,217,31,31,232,232,31,232,30,232,29,1,
2112 215,215,215,215,217,215,215,215,215,215,215,215,215,215,218,70,
2113 1,3,3,3,3,3,3,3,2,3,3,3,3,219,2,2,74,2,1,
2114 1,233,220,233,233,233,1,
2115 98,98,32,221,33,53,234,234,33,16,
2116 1,235,222,235,235,235,1,
2117 1,183,223,183,183,183,246,1,
2118 132,132,98,185,98,132,132,132,91,93,92,88,89,13,82,83,224,86,85,94,135,134,
2119 96,169,16,95,95,168,90,134,258,171,258,97,171,97,97,97,87,84,236,
2120 1,2,237,225,2,2,237,2,1,
2121 51,176,238,
2122 88,89,256,168,169,
2123 98,98,228,226,16,179,
2124 185,229,230,84,
2125 210,230,171,
2126 1,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,231,2,2,274,2,1,
2127 217,217,232,216,239,
2128 1,2,83,233,2,240,2,1,
2129 79,40,234,241,248,
2130 249,1,249,2,235,2,2,242,1,
2131 4,29,29,186,40,236,243,186,30,186,29,257,186,
2132 15,237,244,20,
2133 132,132,132,132,132,91,244,88,89,238,135,134,177,177,178,90,134,
2134 218,218,218,1,3,3,3,3,218,218,3,3,3,2,3,3,3,3,3,3,239,2,2,219,2,1,
2135 132,132,98,98,132,132,132,91,93,92,88,89,13,240,94,135,134,96,169,16,95,95,
2136 168,90,134,245,97,245,97,97,97,
2137 98,98,32,241,33,53,55,33,16,
2138 250,250,250,1,250,250,246,242,246,246,246,1,
2139 132,132,98,185,98,132,132,132,91,93,92,252,88,89,13,82,83,243,86,85,94,135,
2140 134,96,169,16,95,95,168,90,134,259,171,259,97,171,97,97,97,87,84,
2141 247,247,247,247,247,247,247,144,143,199,198,197,196,195,194,193,192,191,190,
2142 189,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
2143 247,247,247,247,247,247,247,247,244,247,247,247,247,247,146,145,
2144 88,89,255,168,169,
2145 249,1,249,2,246,2,2,248,1,
2146 210,247,130,
2147 250,250,250,250,250,247,
2148
2149 };
2150
2151
2152 static const unsigned short ag_sbt[] = {
2153 0, 17, 58, 64, 77, 116, 118, 122, 156, 175, 210, 212, 216, 218,
2154 249, 257, 299, 340, 347, 350, 380, 423, 427, 431, 438, 445, 452, 459,
2155 481, 483, 485, 490, 540, 546, 562, 564, 566, 606, 617, 619, 622, 657,
2156 663, 689, 692, 730, 768, 770, 772, 776, 816, 819, 870, 912, 926, 957,
2157 987,1006,1025,1044,1070,1078,1086,1088,1095,1105,1111,1121,1132,1140,
2158 1151,1169,1199,1221,1259,1294,1332,1367,1369,1413,1435,1483,1520,1553,
2159 1591,1648,1670,1700,1702,1731,1760,1770,1802,1855,1884,1915,1917,1945,
2160 1947,1956,2000,2011,2048,2052,2085,2106,2110,2129,2155,2161,2166,2176,
2161 2196,2201,2211,2219,2222,2229,2238,2245,2252,2260,2267,2274,2287,2300,
2162 2308,2316,2324,2332,2340,2348,2363,2368,2382,2387,2390,2399,2401,2403,
2163 2407,2447,2483,2485,2488,2495,2498,2501,2504,2509,2559,2572,2580,2585,
2164 2589,2593,2615,2622,2625,2629,2659,2689,2693,2700,2724,2753,2775,2797,
2165 2819,2848,2877,2914,2923,2939,2983,2985,2990,2993,3004,3022,3029,3032,
2166 3039,3046,3054,3061,3106,3109,3115,3147,3150,3169,3172,3183,3206,3246,
2167 3248,3293,3295,3297,3337,3349,3355,3378,3400,3422,3443,3465,3487,3493,
2168 3546,3575,3605,3620,3648,3650,3652,3654,3672,3688,3707,3714,3724,3731,
2169 3739,3780,3789,3792,3797,3803,3807,3810,3832,3837,3845,3850,3859,3872,
2170 3876,3893,3919,3950,3959,3971,4012,4065,4070,4079,4082,4088
2171 };
2172
2173
2174 static const unsigned short ag_sbe[] = {
2175 10, 55, 60, 72, 113, 117, 120, 149, 161, 209, 211, 214, 217, 238,
2176 252, 294, 334, 342, 348, 373, 415, 425, 428, 434, 441, 448, 455, 465,
2177 482, 484, 487, 532, 544, 558, 563, 565, 603, 613, 618, 620, 646, 659,
2178 684, 690, 726, 764, 769, 771, 774, 814, 817, 859, 887, 920, 951, 980,
2179 999,1018,1037,1058,1074,1082,1087,1090,1099,1109,1113,1126,1135,1150,
2180 1158,1187,1215,1257,1292,1330,1365,1368,1406,1429,1472,1515,1542,1580,
2181 1636,1665,1691,1701,1720,1749,1765,1801,1847,1873,1897,1916,1930,1946,
2182 1952,1973,2007,2043,2049,2074,2102,2107,2122,2143,2157,2163,2170,2190,
2183 2198,2203,2213,2221,2224,2232,2240,2247,2254,2262,2269,2279,2292,2302,
2184 2310,2318,2326,2334,2342,2353,2365,2376,2384,2388,2394,2400,2402,2405,
2185 2445,2478,2484,2487,2492,2497,2500,2503,2508,2551,2568,2576,2582,2586,
2186 2591,2609,2619,2624,2628,2653,2683,2691,2696,2713,2742,2769,2791,2813,
2187 2832,2861,2909,2919,2937,2956,2984,2987,2991,2998,3016,3025,3030,3035,
2188 3042,3049,3057,3079,3107,3111,3129,3148,3161,3170,3179,3194,3230,3247,
2189 3286,3294,3296,3330,3343,3353,3372,3394,3416,3439,3459,3481,3491,3538,
2190 3569,3599,3613,3633,3649,3651,3653,3661,3686,3701,3709,3717,3726,3733,
2191 3755,3783,3790,3794,3799,3804,3808,3826,3834,3840,3847,3854,3864,3873,
2192 3885,3913,3932,3953,3966,3988,4057,4067,4074,4080,4087,4088
2193 };
2194
2195
2196 static const unsigned char ag_fl[] = {
2197 1,1,2,0,1,2,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,0,1,5,2,2,2,2,3,3,1,
2198 1,1,2,3,1,2,3,2,1,1,1,1,2,1,3,1,3,4,1,1,3,1,2,2,1,2,1,1,2,1,1,2,2,2,3,
2199 4,0,0,2,4,1,2,0,1,3,1,0,4,0,5,1,1,2,4,2,4,1,3,2,1,2,1,2,1,2,3,3,2,3,2,
2200 1,1,1,2,1,2,1,0,1,2,3,1,2,3,3,2,2,2,1,2,0,1,2,1,3,3,3,0,1,1,1,1,1,1,1,
2201 2,1,2,1,2,1,2,1,1,1,1,1,1,1,3,1,3,1,4,1,2,1,1,1,1,1,1,1,1,1,3,5,4,3,3,
2202 3,1,3,3,4,3,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,2,1,1,2,2,
2203 2,1,2,1,2,0,3,1,2,2,3,0,2,3,1,3,1,2,3,3,4,3,1,2,2,2,2,2,2,2,2,2,2,3,5,
2204 2,4,7,5,1,2,0,1,1,2,6,3,4,1,3,1,3,3,4,3,4,3,3,2,4,4,2,4,2,4,3,2,1,2,0,
2205 1,2,0,2,1,1,3,2,2,0,2,1,3,1,3,2,2,0,2,1,2,2,1,1,2,2,2,1,2,2,1,1,2,1,2,
2206 0,1,2,1,1,2,1,2,0,1,2,1
2207 };
2208
2209 static const unsigned char ag_ptt[] = {
2210 0, 4, 4, 5, 5, 1, 9, 9, 6, 10, 12, 14, 16, 18, 20, 22, 24, 26,
2211 28, 30, 32, 34, 36, 40, 40, 43, 43, 38, 41, 41, 41, 41, 41, 41, 42, 42,
2212 45, 45, 45, 53, 53, 45, 51, 49, 49, 49, 50, 50, 55, 55, 57, 57, 56, 61,
2213 62, 62, 63, 63, 65, 66, 66, 68, 68, 64, 54, 54, 54, 52, 70, 69, 69, 71,
2214 67, 67, 67, 60, 60, 78, 78, 60, 76, 81, 76, 82, 76, 79, 79, 79, 77, 85,
2215 85, 88, 84, 89, 91, 91, 83, 83, 92, 92, 92, 95, 95, 95, 58, 3, 3, 8,
2216 8, 8, 99, 99,103,103,101,101,105,105,105, 39, 39, 39, 39,109,109,110,
2217 110,100,111,111,115,112,119,119,117,117,118,118,124,124,118,120,120,121,
2218 121,125,125,130,130, 72, 72,132,132,134,134,134,137,136,136,138,138,116,
2219 116,116,116,116,140,140,140,140,140,146,146, 46, 46, 46,149,149,149,150,
2220 150,151,153,153,153,152,158,158,158,142,142,142,142,142,142,142,142,142,
2221 142,142,171,173,144,143,143,145,155,155,155,155,155,156,156,157,157, 73,
2222 73,179,179,178, 48,182,182,180,181,181,183,183,183,183,183,183,183,183,
2223 185,184,184,184,184,184,184,184,184,184,184,184,184,184,184,204,204,206,
2224 206,206,195,194,194,188,207,207,135,135,135,135,135,135,135,135,135,135,
2225 135,148,148,133,133, 47,216,217,217,218,218,214,215,215,219,219,219,219,
2226 219,220,220,224,224,224,224,224,224,226, 74,227,227,227,228,228,228,228,
2227 98,231,231, 98,237,237,237,238,238,239,239,223,240,240,240,241,241,242,
2228 242,222,236
2229 };
2230
2231 static const unsigned char *ag_valid(int ag_k) {
2232 const unsigned char *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]];
2233 while (*--ag_tp != (unsigned char) ag_k) if (*ag_tp == 0) return NULL;
2234 return ag_tp;
2235 }
2236
2237 int pgg_change_reduction(pgg_token_type ag_k) {
2238 if (!ag_valid(ag_k)) return 0;
2239 (PCB).reduction_token = ag_k;
2240 return 1;
2241 }
2242
2243 static void ag_default(const int *ag_tp) {
2244 (PCB).ag_dsn = (PCB).sn;
2245 (PCB).ag_dtl = ag_tp;
2246 while (!ag_valid((pgg_token_type) *ag_tp)) ag_tp++;
2247 (PCB).reduction_token = (pgg_token_type) *ag_tp;
2248 }
2249
2250
2251
2252 static void ag_ra(void)
2253 {
2254 switch(ag_rpx[(PCB).ag_ap]) {
2255 case 1: ag_rp_1(V(0,(int *))); break;
2256 case 2: ag_rp_2(); break;
2257 case 3: ag_rp_1(V(1,(int *))); break;
2258 case 4: ag_rp_4(V(0,(int *))); break;
2259 case 5: V(0,(int *)) = ag_rp_5(V(0,(int *))); break;
2260 case 6: V(0,(int *)) = ag_rp_6(V(0,(int *))); break;
2261 case 7: V(0,(int *)) = ag_rp_7(); break;
2262 case 8: V(0,(int *)) = ag_rp_8(V(0,(int *))); break;
2263 case 9: ag_rp_9(V(0,(int *))); break;
2264 case 10: ag_rp_10(V(2,(int *))); break;
2265 case 11: V(0,(int *)) = ag_rp_11(); break;
2266 case 12: V(0,(int *)) = ag_rp_12(); break;
2267 case 13: V(0,(int *)) = ag_rp_13(); break;
2268 case 14: ag_rp_14(); break;
2269 case 15: ag_rp_15(V(0,(int *))); break;
2270 case 16: ag_rp_16(V(1,(int *))); break;
2271 case 17: ag_rp_17(V(0,(int *))); break;
2272 case 18: V(0,(int *)) = ag_rp_18(V(1,(int *))); break;
2273 case 19: ag_rp_19(V(0,(int *))); break;
2274 case 20: ag_rp_20(V(0,(int *))); break;
2275 case 21: ag_rp_21(V(1,(int *))); break;
2276 case 22: V(0,(int *)) = ag_rp_22(V(1,(int *))); break;
2277 case 23: ag_rp_23(V(1,(int *)), V(2,(int *))); break;
2278 case 24: ag_rp_24(V(2,(int *)), V(3,(int *))); break;
2279 case 25: ag_rp_25(); break;
2280 case 26: V(0,(int *)) = ag_rp_26(); break;
2281 case 27: V(0,(int *)) = ag_rp_27(); break;
2282 case 28: V(0,(int *)) = ag_rp_28(); break;
2283 case 29: ag_rp_29(); break;
2284 case 30: ag_rp_30(); break;
2285 case 31: ag_rp_31(); break;
2286 case 32: ag_rp_32(); break;
2287 case 33: ag_rp_33(); break;
2288 case 34: ag_rp_34(); break;
2289 case 35: ag_rp_35(); break;
2290 case 36: ag_rp_36(); break;
2291 case 37: ag_rp_37(); break;
2292 case 38: ag_rp_38(); break;
2293 case 39: ag_rp_39(); break;
2294 case 40: ag_rp_40(); break;
2295 case 41: ag_rp_41(); break;
2296 case 42: ag_rp_42(); break;
2297 case 43: ag_rp_43(V(0,(int *))); break;
2298 case 44: ag_rp_44(V(1,(int *))); break;
2299 case 45: ag_rp_45(V(2,(int *))); break;
2300 case 46: ag_rp_46(V(2,(int *))); break;
2301 case 47: ag_rp_47(V(1,(int *))); break;
2302 case 48: ag_rp_48(V(2,(int *))); break;
2303 case 49: V(0,(int *)) = ag_rp_49(V(1,(int *))); break;
2304 case 50: V(0,(int *)) = ag_rp_50(V(1,(int *))); break;
2305 case 51: V(0,(int *)) = ag_rp_51(V(0,(int *)), V(1,(int *))); break;
2306 case 52: V(0,(int *)) = ag_rp_52(); break;
2307 case 53: V(0,(int *)) = ag_rp_53(); break;
2308 case 54: V(0,(int *)) = ag_rp_54(V(0,(int *))); break;
2309 case 55: V(0,(int *)) = ag_rp_55(V(1,(int *))); break;
2310 case 56: V(0,(int *)) = ag_rp_56(V(0,(int *))); break;
2311 case 57: V(0,(int *)) = ag_rp_57(V(0,(int *)), V(1,(int *))); break;
2312 case 58: V(0,(int *)) = ag_rp_58(); break;
2313 case 59: V(0,(int *)) = ag_rp_59(V(0,(int *)), V(1,(int *))); break;
2314 case 60: V(0,(int *)) = ag_rp_60(V(0,(int *))); break;
2315 case 61: V(0,(int *)) = ag_rp_61(V(0,(int *)), V(1,(int *))); break;
2316 case 62: V(0,(int *)) = ag_rp_62(V(0,(int *))); break;
2317 case 63: V(0,(int *)) = ag_rp_63(V(0,(int *))); break;
2318 case 64: V(0,(int *)) = ag_rp_64(V(0,(int *))); break;
2319 case 65: V(0,(int *)) = ag_rp_65(V(0,(CharSetExpression * *))); break;
2320 case 66: V(0,(CharSetExpression * *)) = ag_rp_66(V(0,(CharSetExpression * *)), V(2,(CharSetExpression * *))); break;
2321 case 67: V(0,(CharSetExpression * *)) = ag_rp_67(V(0,(CharSetExpression * *)), V(2,(CharSetExpression * *))); break;
2322 case 68: V(0,(CharSetExpression * *)) = ag_rp_68(V(0,(CharSetExpression * *)), V(3,(CharSetExpression * *))); break;
2323 case 69: V(0,(CharSetExpression * *)) = ag_rp_69(V(1,(CharSetExpression * *))); break;
2324 case 70: V(0,(CharSetExpression * *)) = ag_rp_70(V(0,(int *))); break;
2325 case 71: V(0,(CharSetExpression * *)) = ag_rp_71(V(0,(int *))); break;
2326 case 72: V(0,(CharSetExpression * *)) = ag_rp_72(); break;
2327 case 73: V(0,(CharSetExpression * *)) = ag_rp_73(V(1,(CharSetExpression * *))); break;
2328 case 74: V(0,(CharSetExpression * *)) = ag_rp_74(V(1,(int *)), V(3,(int *))); break;
2329 case 75: V(0,(CharSetExpression * *)) = ag_rp_75(V(0,(int *)), V(3,(int *))); break;
2330 case 76: ag_rp_76(V(2,(CharSetExpression * *))); break;
2331 case 77: ag_rp_77(V(2,(int *))); break;
2332 case 78: ag_rp_78(V(2,(int *))); break;
2333 case 79: ag_rp_79(); break;
2334 case 80: ag_rp_80(V(2,(int *))); break;
2335 case 81: ag_rp_81(V(2,(int *))); break;
2336 case 82: ag_rp_82(); break;
2337 case 83: V(0,(int *)) = ag_rp_83(V(0,(int *))); break;
2338 case 84: V(0,(int *)) = ag_rp_84(); break;
2339 case 85: V(0,(int *)) = ag_rp_85(); break;
2340 case 86: V(0,(int *)) = ag_rp_86(); break;
2341 case 87: V(0,(int *)) = ag_rp_87(); break;
2342 case 88: V(0,(int *)) = ag_rp_88(); break;
2343 case 89: V(0,(int *)) = ag_rp_89(); break;
2344 case 90: V(0,(int *)) = ag_rp_90(); break;
2345 case 91: V(0,(int *)) = ag_rp_91(); break;
2346 case 92: V(0,(int *)) = ag_rp_92(); break;
2347 case 93: V(0,(int *)) = ag_rp_93(); break;
2348 case 94: V(0,(int *)) = ag_rp_94(); break;
2349 case 95: V(0,(int *)) = ag_rp_95(V(1,(int *))); break;
2350 case 96: V(0,(int *)) = ag_rp_96(V(0,(int *)), V(1,(int *))); break;
2351 case 97: V(0,(int *)) = ag_rp_97(V(0,(int *)), V(1,(int *))); break;
2352 case 98: V(0,(int *)) = ag_rp_98(V(1,(int *))); break;
2353 case 99: ag_rp_99(V(0,(int *))); break;
2354 case 100: ag_rp_100(V(0,(int *))); break;
2355 case 101: ag_rp_101(V(1,(int *))); break;
2356 case 102: ag_rp_102(V(1,(int *))); break;
2357 case 103: ag_rp_103(V(1,(int *))); break;
2358 case 104: ag_rp_104(V(0,(int *))); break;
2359 case 105: ag_rp_105(V(1,(int *))); break;
2360 case 106: ag_rp_106(V(0,(int *))); break;
2361 case 107: ag_rp_107(V(1,(int *))); break;
2362 case 108: V(0,(int *)) = ag_rp_108(); break;
2363 case 109: V(0,(int *)) = ag_rp_109(); break;
2364 case 110: ag_rp_110(V(0,(int *))); break;
2365 case 111: ag_rp_111(V(1,(int *))); break;
2366 case 112: ag_rp_112(); break;
2367 case 113: ag_rp_113(); break;
2368 case 114: ag_rp_114(); break;
2369 case 115: ag_rp_115(); break;
2370 case 116: ag_rp_116(); break;
2371 case 117: ag_rp_117(V(2,(int *))); break;
2372 case 118: ag_rp_118(); break;
2373 case 119: ag_rp_119(); break;
2374 case 120: ag_rp_120(); break;
2375 case 121: ag_rp_121(); break;
2376 case 122: ag_rp_122(); break;
2377 case 123: ag_rp_123(); break;
2378 case 124: ag_rp_124(); break;
2379 case 125: ag_rp_125(); break;
2380 case 126: ag_rp_126(V(2,(int *))); break;
2381 case 127: ag_rp_127(); break;
2382 case 128: ag_rp_128(); break;
2383 case 129: ag_rp_129(); break;
2384 case 130: ag_rp_130(V(4,(int *)), V(6,(int *))); break;
2385 case 131: V(0,(int *)) = ag_rp_131(); break;
2386 case 132: ag_rp_132(V(5,(CharSetExpression * *))); break;
2387 case 133: ag_rp_133(V(2,(CharSetExpression * *))); break;
2388 case 134: ag_rp_134(V(0,(int *))); break;
2389 case 135: ag_rp_135(V(2,(int *))); break;
2390 case 136: V(0,(int *)) = ag_rp_136(); break;
2391 case 137: V(0,(int *)) = ag_rp_137(); break;
2392 case 138: V(0,(int *)) = ag_rp_138(); break;
2393 case 139: V(0,(int *)) = ag_rp_139(); break;
2394 case 140: V(0,(int *)) = ag_rp_140(); break;
2395 case 141: V(0,(int *)) = ag_rp_141(); break;
2396 case 142: V(0,(int *)) = ag_rp_142(V(0,(CharSetExpression * *))); break;
2397 case 143: V(0,(int *)) = ag_rp_143(V(0,(CharSetExpression * *))); break;
2398 case 144: V(0,(int *)) = ag_rp_144(V(0,(CharSetExpression * *))); break;
2399 case 145: V(0,(int *)) = ag_rp_145(); break;
2400 case 146: V(0,(int *)) = ag_rp_146(); break;
2401 case 147: V(0,(int *)) = ag_rp_147(); break;
2402 case 148: V(0,(int *)) = ag_rp_148(); break;
2403 case 149: V(0,(int *)) = ag_rp_149(); break;
2404 case 150: V(0,(int *)) = ag_rp_150(); break;
2405 case 151: ag_rp_151(V(1,(unsigned char * *))); break;
2406 case 152: ag_rp_152(); break;
2407 case 153: V(0,(unsigned char * *)) = ag_rp_153(); break;
2408 case 154: V(0,(unsigned char * *)) = ag_rp_154(); break;
2409 case 155: ag_rp_155(); break;
2410 case 156: ag_rp_156(); break;
2411 case 157: ag_default(&ag_rtt[0]); ag_rp_157(); break;
2412 }
2413 (PCB).la_ptr = (PCB).pointer;
2414 }
2415
2416
2417 static const unsigned char ag_ctn[] = {
2418 0,0, 98,1, 0,0, 0,0,100,1, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0,
2419 0,0, 0,0, 56,1,214,1, 58,1, 50,1, 55,1, 48,1, 47,1, 0,0, 45,1, 41,1,
2420 41,1, 41,1, 41,1, 41,1, 0,0, 0,0, 99,1, 0,0, 76,1, 0,0, 56,2, 0,0,
2421 0,0, 0,0, 0,0, 55,1, 0,0, 55,2,180,1, 48,2,223,1,222,1,219,1,219,1,
2422 219,1, 0,0, 47,2, 0,0, 46,2, 0,0, 51,1, 51,1, 0,0, 0,0, 0,0, 0,0,
2423 41,2, 45,1, 0,0, 0,0, 76,2, 76,2, 0,0, 85,1, 0,0, 0,0, 56,3,180,2,
2424 0,0, 0,0, 0,0, 0,0, 0,0,219,2, 0,0, 0,0, 0,0,148,1,135,1, 0,0,
2425 151,1,135,1,135,1,135,1, 0,0, 0,0,112,1,111,1,140,1, 0,0,140,1,146,1,
2426 138,1,136,1,134,1, 69,1, 0,0, 67,1, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0,
2427 0,0, 76,3, 76,3, 0,0, 0,0, 0,0, 0,0, 0,0,183,1,184,1,184,1,184,1,
2428 184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,183,1,
2429 183,1,183,1,183,1,183,1, 0,0, 0,0, 0,0, 0,0, 0,0, 74,1,148,2,143,1,
2430 145,1, 0,0,143,1,153,1,153,1,153,1, 64,1, 0,0, 68,1, 68,1,135,2,135,2,
2431 0,0,121,1,120,1,112,2,111,2,140,2,137,1,146,2,136,2, 0,0,135,2,135,2,
2432 137,2,137,2,133,1,135,1, 69,2, 69,2, 67,2, 76,4, 0,0, 85,3, 0,0, 0,0,
2433 184,2, 0,0, 0,0,188,1, 0,0, 0,0, 0,0,150,2,184,2,150,2, 0,0,183,2,
2434 0,0,183,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0,148,3,125,1,151,3,135,3,
2435 135,3, 0,0,135,3,135,3,125,1,146,3, 0,0, 0,0,146,3,136,3,136,1,136,1,
2436 133,2, 73,1, 69,3, 67,3,184,3,184,3,184,3,184,3,188,2,184,3,149,1,137,1,
2437 150,3,183,3,146,4,133,3, 73,2, 0,0, 62,1, 0,0,207,1,184,4,149,2, 0,0,
2438 184,5, 62,2,204,1,207,2,115,1,137,1, 0,0,115,2,204,1
2439 };
2440
2441 #ifndef MISSING_FORMAT
2442 #define MISSING_FORMAT "Missing %s"
2443 #endif
2444 #ifndef UNEXPECTED_FORMAT
2445 #define UNEXPECTED_FORMAT "Unexpected %s"
2446 #endif
2447 #ifndef UNNAMED_TOKEN
2448 #define UNNAMED_TOKEN "input"
2449 #endif
2450
2451
2452 static void ag_diagnose(void) {
2453 int ag_snd = (PCB).sn;
2454 int ag_k = ag_sbt[ag_snd];
2455
2456 if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) {
2457 sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
2458 }
2459 else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8
2460 && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1
2461 && *TOKEN_NAMES[ag_tstt[ag_k]]) {
2462 sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
2463 }
2464 else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) {
2465 sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]);
2466 }
2467 else if (isprint(INPUT_CODE((*(PCB).pointer))) && INPUT_CODE((*(PCB).pointer)) != '\\') {
2468 char buf[20];
2469 sprintf(buf, "\'%c\'", (char) INPUT_CODE((*(PCB).pointer)));
2470 sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf);
2471 }
2472 else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN);
2473 (PCB).error_message = (PCB).ag_msg;
2474
2475
2476 {
2477 int ag_sx, ag_t;
2478
2479 ag_sx = (PCB).ssx;
2480 (PCB).ss[ag_sx] = (PCB).sn;
2481 do {
2482 while (ag_sx && ag_ctn[2*(ag_snd = (PCB).ss[ag_sx])] == 0) ag_sx--;
2483 if (ag_sx) {
2484 ag_t = ag_ctn[2*ag_snd];
2485 ag_sx -= ag_ctn[2*ag_snd +1];
2486 ag_snd = (PCB).ss[ag_sx];
2487 }
2488 else {
2489 ag_snd = 0;
2490 ag_t = ag_ptt[0];
2491 }
2492 } while (ag_sx && *TOKEN_NAMES[ag_t]==0);
2493 if (*TOKEN_NAMES[ag_t] == 0) ag_t = 0;
2494 (PCB).error_frame_ssx = ag_sx;
2495 (PCB).error_frame_token = (pgg_token_type) ag_t;
2496 }
2497
2498
2499 }
2500 static int ag_action_1_r_proc(void);
2501 static int ag_action_2_r_proc(void);
2502 static int ag_action_3_r_proc(void);
2503 static int ag_action_4_r_proc(void);
2504 static int ag_action_1_s_proc(void);
2505 static int ag_action_3_s_proc(void);
2506 static int ag_action_1_proc(void);
2507 static int ag_action_2_proc(void);
2508 static int ag_action_3_proc(void);
2509 static int ag_action_4_proc(void);
2510 static int ag_action_5_proc(void);
2511 static int ag_action_6_proc(void);
2512 static int ag_action_7_proc(void);
2513 static int ag_action_8_proc(void);
2514 static int ag_action_9_proc(void);
2515 static int ag_action_10_proc(void);
2516 static int ag_action_11_proc(void);
2517 static int ag_action_8_proc(void);
2518
2519
2520 static int (*const ag_r_procs_scan[])(void) = {
2521 ag_action_1_r_proc,
2522 ag_action_2_r_proc,
2523 ag_action_3_r_proc,
2524 ag_action_4_r_proc
2525 };
2526
2527 static int (*const ag_s_procs_scan[])(void) = {
2528 ag_action_1_s_proc,
2529 ag_action_2_r_proc,
2530 ag_action_3_s_proc,
2531 ag_action_4_r_proc
2532 };
2533
2534 static int (*const ag_gt_procs_scan[])(void) = {
2535 ag_action_1_proc,
2536 ag_action_2_proc,
2537 ag_action_3_proc,
2538 ag_action_4_proc,
2539 ag_action_5_proc,
2540 ag_action_6_proc,
2541 ag_action_7_proc,
2542 ag_action_8_proc,
2543 ag_action_9_proc,
2544 ag_action_10_proc,
2545 ag_action_11_proc,
2546 ag_action_8_proc
2547 };
2548
2549
2550 static int ag_rns(int ag_t, int *ag_sx, int ag_snd) {
2551 while (1) {
2552 int ag_act, ag_k = ag_sbt[ag_snd], ag_lim = ag_sbt[ag_snd+1];
2553 int ag_p;
2554
2555 while (ag_k < ag_lim && ag_tstt[ag_k] != ag_t) ag_k++;
2556 if (ag_k == ag_lim) break;
2557 ag_act = ag_astt[ag_k];
2558 ag_p = ag_pstt[ag_k];
2559 if (ag_act == ag_action_2) return ag_p;
2560 if (ag_act == ag_action_10 || ag_act == ag_action_11) {
2561 (*ag_sx)--;
2562 return ag_snd;
2563 }
2564 if (ag_act != ag_action_3 &&
2565 ag_act != ag_action_4) break;
2566 *ag_sx -= (ag_fl[ag_p] - 1);
2567 ag_snd = (PCB).ss[*ag_sx];
2568 ag_t = ag_ptt[ag_p];
2569 }
2570 return 0;
2571 }
2572
2573 static int ag_jns(int ag_t) {
2574 int ag_k;
2575
2576 ag_k = ag_sbt[(PCB).sn];
2577 while (ag_tstt[ag_k] != ag_t && ag_tstt[ag_k]) ag_k++;
2578 while (1) {
2579 int ag_p = ag_pstt[ag_k];
2580 int ag_sd;
2581
2582 switch (ag_astt[ag_k]) {
2583 case ag_action_2:
2584 GET_CONTEXT;
2585 (PCB).ss[(PCB).ssx] = (PCB).sn;
2586 return ag_p;
2587 case ag_action_10:
2588 case ag_action_11:
2589 return (PCB).ss[(PCB).ssx--];
2590 case ag_action_9:
2591 GET_CONTEXT;
2592 (PCB).ss[(PCB).ssx] = (PCB).sn;
2593 (PCB).ssx++;
2594 (PCB).sn = ag_p;
2595 ag_k = ag_sbt[(PCB).sn];
2596 while (ag_tstt[ag_k] != ag_t && ag_tstt[ag_k]) ag_k++;
2597 continue;
2598 case ag_action_3:
2599 case ag_action_4:
2600 ag_sd = ag_fl[ag_p] - 1;
2601 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2602 else GET_CONTEXT;
2603 (PCB).ss[(PCB).ssx] = (PCB).sn;
2604 ag_t = ag_ptt[ag_p];
2605 ag_k = ag_sbt[(PCB).sn+1];
2606 while (ag_tstt[--ag_k] != ag_t);
2607 continue;
2608 case ag_action_5:
2609 case ag_action_6:
2610 if (ag_fl[ag_p]) break;
2611 (PCB).sn = ag_rns(ag_ptt[ag_p],&(PCB).ssx, (PCB).sn);
2612 (PCB).ss[++(PCB).ssx] = (PCB).sn;
2613 ag_k = ag_sbt[(PCB).sn];
2614 while (ag_tstt[ag_k] != ag_t && ag_tstt[ag_k]) ag_k++;
2615 continue;
2616 }
2617 break;
2618 }
2619 return 0;
2620 }
2621
2622
2623 static int ag_atx(int ag_t, int *ag_sx, int ag_snd) {
2624 int ag_k, ag_f;
2625 int ag_save_btsx = (PCB).btsx;
2626 int ag_flag = 1;
2627
2628 while (1) {
2629 int ag_a;
2630
2631 (PCB).bts[128 - ++(PCB).btsx] = *ag_sx;
2632 (PCB).ss[128 - (PCB).btsx] = (PCB).ss[*ag_sx];
2633 (PCB).ss[*ag_sx] = ag_snd;
2634 ag_k = ag_sbt[ag_snd];
2635 while (ag_tstt[ag_k] != ag_t && ag_tstt[ag_k]) ag_k++;
2636 ag_a = ag_astt[ag_k];
2637 if (ag_a == ag_action_2 ||
2638 ag_a == ag_action_3 ||
2639 ag_a == ag_action_10 ||
2640 ag_a == ag_action_11 ||
2641 ag_a == ag_action_1 ||
2642 ag_a == ag_action_4) break;
2643 if ((ag_a == ag_action_5 ||
2644 ag_a == ag_action_6) &&
2645 (ag_k = ag_fl[ag_f = ag_pstt[ag_k]]) == 0) {
2646 ag_snd = ag_rns(ag_ptt[ag_f],ag_sx, (PCB).ss[*ag_sx]);
2647 (*ag_sx)++;
2648 continue;
2649 }
2650 if (ag_a == ag_action_9) {
2651 ag_snd = ag_pstt[ag_k];
2652 (*ag_sx)++;
2653 continue;
2654 }
2655 ag_flag = 0;
2656 break;
2657 }
2658 while ((PCB).btsx > ag_save_btsx) {
2659 *ag_sx = (PCB).bts[128 - (PCB).btsx];
2660 (PCB).ss[*ag_sx] = (PCB).ss[128 - (PCB).btsx--];
2661 }
2662 return ag_flag;
2663 }
2664
2665
2666 static int ag_tst_tkn(void) {
2667 int ag_rk, ag_sx, ag_snd = (PCB).sn;
2668
2669 (PCB).token_number = (pgg_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
2670 (PCB).la_ptr++;
2671 if (ag_key_index[(PCB).sn]) {
2672 unsigned ag_k = ag_key_index[(PCB).sn];
2673 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
2674 if (ag_ch <= 255) {
2675 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
2676 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
2677 }
2678 }
2679 for (ag_rk = 0; ag_rk < (PCB).ag_lrss; ag_rk += 2) {
2680 ag_sx = (PCB).ag_rss[ag_rk];
2681 if (ag_sx > (PCB).ssx || ag_sx > (PCB).ag_min_depth) continue;
2682 (PCB).sn = (PCB).ag_rss[ag_rk + 1];
2683 if (ag_atx((PCB).token_number, &ag_sx, (PCB).sn)) break;
2684 }
2685 (PCB).sn = ag_snd;
2686 return ag_rk;
2687 }
2688
2689 static void ag_set_error_procs(void);
2690
2691 static void ag_auto_resynch(void) {
2692 int ag_sx, ag_rk;
2693 int ag_rk1, ag_rk2, ag_tk1;
2694 (PCB).ss[(PCB).ssx] = (PCB).sn;
2695 if ((PCB).ag_error_depth && (PCB).ag_min_depth >= (PCB).ag_error_depth) {
2696 (PCB).ssx = (PCB).ag_error_depth;
2697 (PCB).sn = (PCB).ss[(PCB).ssx];
2698 }
2699 else {
2700 ag_diagnose();
2701 SYNTAX_ERROR;
2702 if ((PCB).exit_flag != AG_RUNNING_CODE) return;
2703 (PCB).ag_error_depth = (PCB).ag_min_depth = 0;
2704 (PCB).ag_lrss = 0;
2705 (PCB).ss[ag_sx = (PCB).ssx] = (PCB).sn;
2706 (PCB).ag_min_depth = (PCB).ag_rss[(PCB).ag_lrss++] = ag_sx;
2707 (PCB).ag_rss[(PCB).ag_lrss++] = (PCB).sn;
2708 while (ag_sx && (PCB).ag_lrss < 2*128) {
2709 int ag_t = 0, ag_x, ag_s, ag_sxs = ag_sx;
2710
2711 while (ag_sx && (ag_t = ag_ctn[2*(PCB).sn]) == 0) (PCB).sn = (PCB).ss[--ag_sx];
2712 if (ag_t) (PCB).sn = (PCB).ss[ag_sx -= ag_ctn[2*(PCB).sn +1]];
2713 else {
2714 if (ag_sx == 0) (PCB).sn = 0;
2715 ag_t = ag_ptt[0];
2716 }
2717 if ((ag_s = ag_rns(ag_t, &ag_sx, (PCB).sn)) == 0) break;
2718 for (ag_x = 0; ag_x < (PCB).ag_lrss; ag_x += 2)
2719 if ((PCB).ag_rss[ag_x] == ag_sx + 1 && (PCB).ag_rss[ag_x+1] == ag_s) break;
2720 if (ag_x == (PCB).ag_lrss) {
2721 (PCB).ag_rss[(PCB).ag_lrss++] = ++ag_sx;
2722 (PCB).ag_rss[(PCB).ag_lrss++] = (PCB).sn = ag_s;
2723 }
2724 else if (ag_sx >= ag_sxs) ag_sx--;
2725 }
2726 ag_set_error_procs();
2727 }
2728 (PCB).la_ptr = (PCB).pointer;
2729 if ((PCB).ssx > (PCB).ag_min_depth) (PCB).ag_min_depth = (PCB).ssx;
2730 while (1) {
2731 ag_rk1 = ag_tst_tkn();
2732 if ((PCB).token_number == 44)
2733 {(PCB).exit_flag = AG_SYNTAX_ERROR_CODE; return;}
2734 if (ag_rk1 < (PCB).ag_lrss) break;
2735 {(PCB).la_ptr = (PCB).pointer + 1; ag_track();}
2736 }
2737 ag_tk1 = (PCB).token_number;
2738 ag_track();
2739 ag_rk2 = ag_tst_tkn();
2740 if (ag_rk2 < ag_rk1) {ag_rk = ag_rk2; ag_track();}
2741 else {ag_rk = ag_rk1; (PCB).token_number = (pgg_token_type) ag_tk1; (PCB).la_ptr = (PCB).pointer;}
2742 (PCB).ag_min_depth = (PCB).ssx = (PCB).ag_rss[ag_rk++];
2743 (PCB).sn = (PCB).ss[(PCB).ssx] = (PCB).ag_rss[ag_rk];
2744 (PCB).sn = ag_jns((PCB).token_number);
2745 if ((PCB).ag_error_depth == 0 || (PCB).ag_error_depth > (PCB).ssx)
2746 (PCB).ag_error_depth = (PCB).ssx;
2747 if (++(PCB).ssx >= 128) {
2748 (PCB).exit_flag = AG_STACK_ERROR_CODE;
2749 PARSER_STACK_OVERFLOW;
2750 return;
2751 }
2752 GET_CONTEXT;
2753 (PCB).ss[(PCB).ssx] = (PCB).sn;
2754 (PCB).ag_tmp_depth = (PCB).ag_min_depth;
2755 (PCB).la_ptr = (PCB).pointer;
2756 return;
2757 }
2758
2759
2760 static int ag_action_10_proc(void) {
2761 int ag_t = (PCB).token_number;
2762 (PCB).btsx = 0, (PCB).drt = -1;
2763 do {
2764 ag_track();
2765 (PCB).token_number = (pgg_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
2766 (PCB).la_ptr++;
2767 if (ag_key_index[(PCB).sn]) {
2768 unsigned ag_k = ag_key_index[(PCB).sn];
2769 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
2770 if (ag_ch <= 255) {
2771 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
2772 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
2773 }
2774 }
2775 } while ((PCB).token_number == (pgg_token_type) ag_t);
2776 (PCB).la_ptr = (PCB).pointer;
2777 return 1;
2778 }
2779
2780 static int ag_action_11_proc(void) {
2781 int ag_t = (PCB).token_number;
2782
2783 (PCB).btsx = 0, (PCB).drt = -1;
2784 do {
2785 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
2786 (PCB).ssx--;
2787 ag_track();
2788 ag_ra();
2789 if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
2790 (PCB).ssx++;
2791 (PCB).token_number = (pgg_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
2792 (PCB).la_ptr++;
2793 if (ag_key_index[(PCB).sn]) {
2794 unsigned ag_k = ag_key_index[(PCB).sn];
2795 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
2796 if (ag_ch <= 255) {
2797 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
2798 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
2799 }
2800 }
2801 }
2802 while ((PCB).token_number == (pgg_token_type) ag_t);
2803 (PCB).la_ptr = (PCB).pointer;
2804 return 1;
2805 }
2806
2807 static int ag_action_3_r_proc(void) {
2808 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
2809 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2810 (PCB).btsx = 0, (PCB).drt = -1;
2811 (PCB).reduction_token = (pgg_token_type) ag_ptt[(PCB).ag_ap];
2812 ag_ra();
2813 return (PCB).exit_flag == AG_RUNNING_CODE;
2814 }
2815
2816 static int ag_action_3_s_proc(void) {
2817 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
2818 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2819 (PCB).btsx = 0, (PCB).drt = -1;
2820 (PCB).reduction_token = (pgg_token_type) ag_ptt[(PCB).ag_ap];
2821 ag_ra();
2822 return (PCB).exit_flag == AG_RUNNING_CODE;
2823 }
2824
2825 static int ag_action_4_r_proc(void) {
2826 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
2827 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2828 (PCB).reduction_token = (pgg_token_type) ag_ptt[(PCB).ag_ap];
2829 return 1;
2830 }
2831
2832 static int ag_action_2_proc(void) {
2833 (PCB).btsx = 0, (PCB).drt = -1;
2834 if ((PCB).ssx >= 128) {
2835 (PCB).exit_flag = AG_STACK_ERROR_CODE;
2836 PARSER_STACK_OVERFLOW;
2837 }
2838 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
2839 GET_CONTEXT;
2840 (PCB).ss[(PCB).ssx] = (PCB).sn;
2841 (PCB).ssx++;
2842 (PCB).sn = (PCB).ag_ap;
2843 ag_track();
2844 return 0;
2845 }
2846
2847 static int ag_action_9_proc(void) {
2848 if ((PCB).drt == -1) {
2849 (PCB).drt=(PCB).token_number;
2850 (PCB).dssx=(PCB).ssx;
2851 (PCB).dsn=(PCB).sn;
2852 }
2853 ag_prot();
2854 (PCB).vs[(PCB).ssx] = ag_null_value;
2855 GET_CONTEXT;
2856 (PCB).ss[(PCB).ssx] = (PCB).sn;
2857 (PCB).ssx++;
2858 (PCB).sn = (PCB).ag_ap;
2859 (PCB).la_ptr = (PCB).pointer;
2860 return (PCB).exit_flag == AG_RUNNING_CODE;
2861 }
2862
2863 static int ag_action_2_r_proc(void) {
2864 (PCB).ssx++;
2865 (PCB).sn = (PCB).ag_ap;
2866 return 0;
2867 }
2868
2869 static int ag_action_7_proc(void) {
2870 --(PCB).ssx;
2871 (PCB).la_ptr = (PCB).pointer;
2872 (PCB).exit_flag = AG_SUCCESS_CODE;
2873 return 0;
2874 }
2875
2876 static int ag_action_1_proc(void) {
2877 ag_track();
2878 (PCB).exit_flag = AG_SUCCESS_CODE;
2879 return 0;
2880 }
2881
2882 static int ag_action_1_r_proc(void) {
2883 (PCB).exit_flag = AG_SUCCESS_CODE;
2884 return 0;
2885 }
2886
2887 static int ag_action_1_s_proc(void) {
2888 (PCB).exit_flag = AG_SUCCESS_CODE;
2889 return 0;
2890 }
2891
2892 static int ag_action_4_proc(void) {
2893 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
2894 (PCB).reduction_token = (pgg_token_type) ag_ptt[(PCB).ag_ap];
2895 (PCB).btsx = 0, (PCB).drt = -1;
2896 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
2897 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2898 else GET_CONTEXT;
2899 (PCB).ss[(PCB).ssx] = (PCB).sn;
2900 ag_track();
2901 while ((PCB).exit_flag == AG_RUNNING_CODE) {
2902 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
2903 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
2904 do {
2905 unsigned ag_tx = (ag_t1 + ag_t2)/2;
2906 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
2907 else ag_t2 = ag_tx;
2908 } while (ag_t1 < ag_t2);
2909 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
2910 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
2911 REDUCTION_TOKEN_ERROR; break;}
2912 (PCB).ag_ap = ag_pstt[ag_t1];
2913 if ((*(PCB).s_procs[ag_astt[ag_t1]])() == 0) break;
2914 }
2915 return 0;
2916 }
2917
2918 static int ag_action_3_proc(void) {
2919 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
2920 (PCB).btsx = 0, (PCB).drt = -1;
2921 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
2922 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2923 else GET_CONTEXT;
2924 (PCB).ss[(PCB).ssx] = (PCB).sn;
2925 ag_track();
2926 (PCB).reduction_token = (pgg_token_type) ag_ptt[(PCB).ag_ap];
2927 ag_ra();
2928 while ((PCB).exit_flag == AG_RUNNING_CODE) {
2929 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
2930 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
2931 do {
2932 unsigned ag_tx = (ag_t1 + ag_t2)/2;
2933 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
2934 else ag_t2 = ag_tx;
2935 } while (ag_t1 < ag_t2);
2936 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
2937 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
2938 REDUCTION_TOKEN_ERROR; break;}
2939 (PCB).ag_ap = ag_pstt[ag_t1];
2940 if ((*(PCB).s_procs[ag_astt[ag_t1]])() == 0) break;
2941 }
2942 return 0;
2943 }
2944
2945 static int ag_action_8_proc(void) {
2946 ag_undo();
2947 (PCB).la_ptr = (PCB).pointer;
2948 ag_auto_resynch();
2949 return (PCB).exit_flag == AG_RUNNING_CODE;
2950 }
2951
2952 static int ag_action_5_proc(void) {
2953 int ag_sd = ag_fl[(PCB).ag_ap];
2954 (PCB).btsx = 0, (PCB).drt = -1;
2955 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2956 else {
2957 GET_CONTEXT;
2958 (PCB).ss[(PCB).ssx] = (PCB).sn;
2959 }
2960 (PCB).la_ptr = (PCB).pointer;
2961 (PCB).reduction_token = (pgg_token_type) ag_ptt[(PCB).ag_ap];
2962 ag_ra();
2963 while ((PCB).exit_flag == AG_RUNNING_CODE) {
2964 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
2965 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
2966 do {
2967 unsigned ag_tx = (ag_t1 + ag_t2)/2;
2968 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
2969 else ag_t2 = ag_tx;
2970 } while (ag_t1 < ag_t2);
2971 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
2972 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
2973 REDUCTION_TOKEN_ERROR; break;}
2974 (PCB).ag_ap = ag_pstt[ag_t1];
2975 if ((*(PCB).r_procs[ag_astt[ag_t1]])() == 0) break;
2976 }
2977 return (PCB).exit_flag == AG_RUNNING_CODE;
2978 }
2979
2980 static int ag_action_6_proc(void) {
2981 int ag_sd = ag_fl[(PCB).ag_ap];
2982 (PCB).reduction_token = (pgg_token_type) ag_ptt[(PCB).ag_ap];
2983 if ((PCB).drt == -1) {
2984 (PCB).drt=(PCB).token_number;
2985 (PCB).dssx=(PCB).ssx;
2986 (PCB).dsn=(PCB).sn;
2987 }
2988 if (ag_sd) {
2989 (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2990 }
2991 else {
2992 ag_prot();
2993 (PCB).vs[(PCB).ssx] = ag_null_value;
2994 GET_CONTEXT;
2995 (PCB).ss[(PCB).ssx] = (PCB).sn;
2996 }
2997 (PCB).la_ptr = (PCB).pointer;
2998 while ((PCB).exit_flag == AG_RUNNING_CODE) {
2999 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
3000 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
3001 do {
3002 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3003 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
3004 else ag_t2 = ag_tx;
3005 } while (ag_t1 < ag_t2);
3006 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
3007 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
3008 REDUCTION_TOKEN_ERROR; break;}
3009 (PCB).ag_ap = ag_pstt[ag_t1];
3010 if ((*(PCB).r_procs[ag_astt[ag_t1]])() == 0) break;
3011 }
3012 return (PCB).exit_flag == AG_RUNNING_CODE;
3013 }
3014
3015
3016 static void ag_check_depth(int ag_fl) {
3017 int ag_sx = (PCB).ssx - ag_fl;
3018 if ((PCB).ag_error_depth && ag_sx < (PCB).ag_tmp_depth) (PCB).ag_tmp_depth = ag_sx;
3019 }
3020
3021 static int ag_action_3_er_proc(void) {
3022 ag_check_depth(ag_fl[(PCB).ag_ap] - 1);
3023 return ag_action_4_r_proc();
3024 }
3025
3026 static int ag_action_2_e_proc(void) {
3027 ag_action_2_proc();
3028 (PCB).ag_min_depth = (PCB).ag_tmp_depth;
3029 return 0;
3030 }
3031
3032 static int ag_action_4_e_proc(void) {
3033 ag_check_depth(ag_fl[(PCB).ag_ap] - 1);
3034 (PCB).ag_min_depth = (PCB).ag_tmp_depth;
3035 return ag_action_4_proc();
3036 }
3037
3038 static int ag_action_6_e_proc(void) {
3039 ag_check_depth(ag_fl[(PCB).ag_ap]);
3040 return ag_action_6_proc();
3041 }
3042
3043 static int ag_action_11_e_proc(void) {
3044 return ag_action_10_proc();
3045 }
3046
3047 static int (*ag_r_procs_error[])(void) = {
3048 ag_action_1_r_proc,
3049 ag_action_2_r_proc,
3050 ag_action_3_er_proc,
3051 ag_action_3_er_proc
3052 };
3053
3054 static int (*ag_s_procs_error[])(void) = {
3055 ag_action_1_s_proc,
3056 ag_action_2_r_proc,
3057 ag_action_3_er_proc,
3058 ag_action_3_er_proc
3059 };
3060
3061 static int (*ag_gt_procs_error[])(void) = {
3062 ag_action_1_proc,
3063 ag_action_2_e_proc,
3064 ag_action_4_e_proc,
3065 ag_action_4_e_proc,
3066 ag_action_6_e_proc,
3067 ag_action_6_e_proc,
3068 ag_action_7_proc,
3069 ag_action_8_proc,
3070 ag_action_9_proc,
3071 ag_action_10_proc,
3072 ag_action_11_e_proc,
3073 ag_action_8_proc
3074 };
3075
3076 static void ag_set_error_procs(void) {
3077 (PCB).gt_procs = ag_gt_procs_error;
3078 (PCB).r_procs = ag_r_procs_error;
3079 (PCB).s_procs = ag_s_procs_error;
3080 }
3081
3082
3083 void init_pgg(void) {
3084 (PCB).la_ptr = (PCB).pointer;
3085 (PCB).gt_procs = ag_gt_procs_scan;
3086 (PCB).r_procs = ag_r_procs_scan;
3087 (PCB).s_procs = ag_s_procs_scan;
3088 (PCB).ag_error_depth = (PCB).ag_min_depth = (PCB).ag_tmp_depth = 0;
3089 (PCB).ag_resynch_active = 0;
3090 (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
3091 (PCB).exit_flag = AG_RUNNING_CODE;
3092 (PCB).line = FIRST_LINE;
3093 (PCB).column = FIRST_COLUMN;
3094 (PCB).btsx = 0, (PCB).drt = -1;
3095 }
3096
3097 void pgg(void) {
3098 init_pgg();
3099 (PCB).exit_flag = AG_RUNNING_CODE;
3100 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3101 unsigned ag_t1 = ag_sbt[(PCB).sn];
3102 if (ag_tstt[ag_t1]) {
3103 unsigned ag_t2 = ag_sbe[(PCB).sn] - 1;
3104 (PCB).token_number = (pgg_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
3105 (PCB).la_ptr++;
3106 if (ag_key_index[(PCB).sn]) {
3107 unsigned ag_k = ag_key_index[(PCB).sn];
3108 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
3109 if (ag_ch <= 255) {
3110 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
3111 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
3112 }
3113 }
3114 do {
3115 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3116 if (ag_tstt[ag_tx] > (unsigned char)(PCB).token_number)
3117 ag_t1 = ag_tx + 1;
3118 else ag_t2 = ag_tx;
3119 } while (ag_t1 < ag_t2);
3120 if (ag_tstt[ag_t1] != (unsigned char)(PCB).token_number)
3121 ag_t1 = ag_sbe[(PCB).sn];
3122 }
3123 (PCB).ag_ap = ag_pstt[ag_t1];
3124 (*(PCB).gt_procs[ag_astt[ag_t1]])();
3125 }
3126 }
3127
3128