3 !!ORIGIN!! LCC 4.1 Testsuite
4 !!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
24 FILE *infile, *outfile;
25 #define getchar() fgetc(infile)
27 /* hack the original tables to work with both petscii and ascii */
32 # define UNARYMINUS 259
33 #define yyclearin yychar = -1
34 #define yyerrok yyerrflag = 0
36 extern short yyerrflag;
38 /*#define YYMAXDEPTH 150*/
44 YYSTYPE yylval, yyval;
45 # define YYERRCODE 256
48 # define NLSTATE yyprevious=YYNEWLINE
49 # define BEGIN yybgin = yysvec + 1 +
51 # define YYLERR yysvec
52 # define YYSTATE (yyestate-yysvec-1)
55 # define output(c) (void)putc(c,yyout)
57 /* # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar) */
58 # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getchar())==('\n')?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
60 # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
61 # define yymore() (yymorfg=1)
62 # define ECHO fprintf(yyout, "%s",yytext)
63 # define REJECT { nstr = yyreject(); goto yyfussy;}
64 int yyleng; extern char yytext[];
66 extern char *yysptr, yysbuf[];
75 struct yywork *yystoff;
76 struct yysvf *yyother;
79 struct yysvf *yyestate;
80 extern struct yysvf yysvec[], *yybgin;
82 /*# define YYNEWLINE 10 */
83 # define YYNEWLINE ('\n')
85 #ifdef NO_IMPLICIT_FUNC_PROTOTYPES
97 void printchar(char *name,int ch)
101 fprintf(yyout," %s=YYNEWLINE\n",name);
103 else if((ch<0)||(ch>0xf0)||(!isprint(ch)))
105 fprintf(yyout," %s=%04x\n",name,ch &0xffff);
109 fprintf(yyout," %s='%c'\n",name,ch);
117 extern int yyprevious;
120 fprintf(yyout,"yylex()\n");
123 while((nstr = yylook()) >= 0)
126 fprintf(yyout,"yylex: nstr=%d\n",nstr);
132 if(yywrap()) return(0);
149 fprintf(yyout,"yylex: bad switch yylook %d\n",nstr);
155 fprintf(yyout,"yylex: return 0\n");
163 0,4,0,3,4,0,2,4,0,1,4,0,2,0,1,0,0
169 YYTYPE verify, advance;
172 {0,0}, {0,0}, {1,3}, {0,0},
173 {0,0}, {0,0}, {0,0}, {0,0},
174 {0,0}, {0,0}, {1,4}, {1,3},
175 {0,0}, {0,0}, {0,0}, {0,0},
177 {0,0}, {0,0}, {0,0}, {0,0},
178 {0,0}, {0,0}, {0,0}, {0,0},
179 {0,0}, {0,0}, {0,0}, {0,0},
180 {0,0}, {0,0}, {0,0}, {0,0},
182 {0,0}, {0,0}, {0,0}, {0,0},
183 {0,0}, {0,0}, {0,0}, {0,0},
184 {0,0}, {0,0}, {0,0}, {0,0},
185 {0,0}, {0,0}, {0,0}, {0,0},
187 {0,0}, {1,5}, {5,7}, {5,7},
188 {5,7}, {5,7}, {5,7}, {5,7},
189 {5,7}, {5,7}, {5,7}, {5,7},
190 {0,0}, {0,0}, {0,0}, {0,0},
192 {0,0}, {0,0}, {1,6}, {6,8},
193 {6,8}, {6,8}, {6,8}, {6,8},
194 {6,8}, {6,8}, {6,8}, {6,8},
195 {6,8}, {0,0}, {0,0}, {0,0},
197 {0,0}, {0,0}, {0,0}, {0,0},
198 {6,8}, {6,8}, {6,8}, {6,8},
199 {6,8}, {6,8}, {6,8}, {6,8},
200 {6,8}, {6,8}, {6,8}, {6,8},
202 {6,8}, {6,8}, {6,8}, {6,8},
203 {6,8}, {6,8}, {6,8}, {6,8},
204 {6,8}, {6,8}, {6,8}, {6,8},
205 {6,8}, {6,8}, {0,0}, {0,0},
207 {0,0}, {0,0}, {6,8}, {0,0},
208 {6,8}, {6,8}, {6,8}, {6,8},
209 {6,8}, {6,8}, {6,8}, {6,8},
210 {6,8}, {6,8}, {6,8}, {6,8},
212 {6,8}, {6,8}, {6,8}, {6,8},
213 {6,8}, {6,8}, {6,8}, {6,8},
214 {6,8}, {6,8}, {6,8}, {6,8},
215 {6,8}, {6,8}, {0,0}, {0,0},
218 {0,0}, {0,0}, {0,0}, {0,0},
219 {0,0}, {0,0}, {0,0}, {0,0},
220 {0,0}, {0,0}, {0,0}, {0,0},
221 {0,0}, {0,0}, {0,0}, {0,0},
223 {0,0}, {0,0}, {0,0}, {0,0},
224 {0,0}, {0,0}, {0,0}, {0,0},
225 {0,0}, {0,0}, {0,0}, {0,0},
226 {0,0}, {0,0}, {0,0}, {0,0},
228 {0,0}, {0,0}, {0,0}, {0,0},
229 {0,0}, {0,0}, {0,0}, {0,0},
230 {0,0}, {0,0}, {0,0}, {0,0},
231 {0,0}, {0,0}, {0,0}, {0,0},
234 {0,0}, {0,0}, {1,6}, {6,8},
235 {6,8}, {6,8}, {6,8}, {6,8},
236 {6,8}, {6,8}, {6,8}, {6,8},
237 {6,8}, {0,0}, {0,0}, {0,0},
245 struct yywork *yystoff;
246 struct yysvf *yyother;
250 struct yysvf yysvec[] =
254 {yycrank+0, yysvec+1, 0},
255 {yycrank+0, 0, yyvstop+1},
256 {yycrank+0, 0, yyvstop+3},
257 {yycrank+2, 0, yyvstop+6},
258 {yycrank+19, 0, yyvstop+9},
259 {yycrank+0, yysvec+5, yyvstop+12},
260 {yycrank+0, yysvec+6, yyvstop+14},
264 /* struct yywork *yytop = yycrank+141; */
266 struct yywork *yytop = yycrank+255;
268 struct yysvf *yybgin = yysvec+1;
271 WARNING: this table contains one entry per character
272 in the execution character set and must match it.
276 00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
278 01 ,011 ,012 ,01 ,01 ,012 ,01 ,01 ,
280 01 ,011 ,012 ,01 ,01 ,01 ,01 ,01 ,
282 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
283 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
285 011 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
286 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
288 '0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,
289 '0' ,'0' ,01 ,01 ,01 ,01 ,01 ,01 ,
291 /* 0x40 (ascii) @A... (petscii) @a... */
292 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
293 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
295 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
296 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,'A' ,
298 /* 0x60 (ascii) @a... */
299 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
300 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
302 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
303 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 ,
307 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
308 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
309 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
310 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
312 /* 0xc0 (petcii) @A... */
313 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
314 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
316 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
317 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 ,
319 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
320 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
321 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
330 /* ncform 4.1 83/08/11 */
334 # define NLSTATE yyprevious=YYNEWLINE
336 struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
338 char *yysptr = yysbuf;
340 extern struct yysvf *yyestate;
341 int yyprevious = YYNEWLINE;
343 unsigned char testbreak=0;
347 register struct yysvf *yystate, **lsp;
348 register struct yywork *yyt;
360 /* start off machines */
377 fprintf(yyout,"yylook()\n");
385 yylastch = yytext+yyleng;
389 fprintf(yyout,"yylook: yymorfg=%d\n",yymorfg);
395 fprintf(yyout,"yylook: (outer loop)");
396 printchar("yyprevious",yyprevious);
399 yyestate = yystate = yybgin;
400 if (yyprevious==YYNEWLINE) yystate++;
407 fprintf(yyout,"yylook: (inner loop) state %d\n",yystate-yysvec-1);
411 fprintf(yyout,"yylook: error, aborted after 5 loops\n");
416 yyt = yystate->yystoff;
418 /* fprintf(yyout,"yylook: yyt offs: %02x\n",yyt-yycrank); */
422 { /* may not be any transitions */
423 yyz = yystate->yyother;
425 if(yyz->yystoff == yycrank)break;
427 *yylastch++ = yych = input();
430 fprintf(yyout,"yylook: input ");
431 printchar("yych",yych);
437 /* fprintf(yyout,"yylook: yych=%02x yymatch[yych]=%02x\n",yych,yymatch[yych]); */
438 fprintf(yyout,"yylook: tryagain\n");
442 /* fprintf(yyout,"yylook: yyr offs: %02x\n",yyr-yycrank); */
447 if (yyt <= yytop && yyt->verify+yysvec == yystate)
449 if(yyt->advance+yysvec == YYLERR) /* error transitions */
452 fprintf(yyout,"yylook: unput (1) ");
453 printchar("*yylastch",*yylastch);
458 *lsp++ = yystate = yyt->advance+yysvec;
460 fprintf(yyout,"yylook: continue (1)\n");
465 fprintf(yyout,"yylook: ( yyt > yycrank)\n");
469 else if(yyt < yycrank) /* r < yycrank */
471 yyt = yyr = yycrank+(yycrank-yyt);
473 fprintf(yyout,"yylook: compressed state\n");
476 if(yyt <= yytop && yyt->verify+yysvec == yystate)
479 fprintf(yyout,"yylook: (1)\n");
481 if(yyt->advance+yysvec == YYLERR) /* error transitions */
484 fprintf(yyout,"yylook: unput (2) ");
485 printchar("*yylastch",*yylastch);
490 *lsp++ = yystate = yyt->advance+yysvec;
492 fprintf(yyout,"yylook: continue (2)\n");
499 fprintf(yyout,"yylook: yych=%02x yymatch[yych]=%02x\n",yych,yymatch[yych]);
500 fprintf(yyout,"yylook: yyt offs: %02x\n",yyt-yycrank);
501 fprintf(yyout,"yylook: yyr offs: %02x\n",yyr-yycrank);
504 yyt = yyr + YYU(yymatch[yych]);
507 fprintf(yyout,"yylook: yyt offs: %02x <= yytop offs: %02x\n",yyt-yycrank,yytop-yycrank);
508 fprintf(yyout,"yylook: yyt->verify=%04x yysvec=%04x (yyt->verify+yysvec)=%04x == yystate=%04x\n",yyt->verify,yysvec,(yyt->verify+yysvec),yystate);
510 fprintf(yyout,"yylook: try fall back character\n");
512 if(yyt <= yytop && yyt->verify+yysvec == yystate)
515 fprintf(yyout,"yylook: (2a)\n");
518 if(yyt->advance+yysvec == YYLERR) /* error transition */
521 /* cc65 compiles this ?! fprintf(yyout,"yylook: unput (3) ",); */
522 fprintf(yyout,"yylook: unput (3) ");
523 printchar("*yylastch",*yylastch);
528 *lsp++ = yystate = yyt->advance+yysvec;
530 /* fprintf(yyout,"yylook: yyt offs: %02x yyt->advance=%d\n",yyt-yycrank,yyt->advance); */
531 fprintf(yyout,"yylook: continue (3)\n");
537 fprintf(yyout,"yylook: (2)\n");
540 if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank)
543 fprintf(yyout,"yylook: fall back to state %d\n",yystate-yysvec-1);
551 fprintf(yyout,"yylook: unput (4) ");
552 printchar("*yylastch",*yylastch);
559 fprintf(yyout,"yylook: contin state=%d\n",yystate-yysvec-1);
567 fprintf(yyout,"yylook: stopped (end)\n");
571 fprintf(yyout,"yylook: stopped at %d with:\n",*(lsp-1)-(yysvec+1));
574 while (lsp-- > yylstate)
577 if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0)
580 if(yyextra[*yyfnd]) /* must backup */
582 while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate)
586 fprintf(yyout,"yylook: unput (5) ");
587 printchar("*yylastch",*yylastch);
592 yyprevious = YYU(*yylastch);
594 yyleng = yylastch-yytext+1;
597 fprintf(yyout,"yylook: match action %d\n",*yyfnd);
598 fprintf(yyout,"yylook: done loops: %d\n",testbreak);
604 if (yytext[0] == 0 /* && feof(yyin) */)
608 fprintf(yyout,"yylook: done loops: %d\n",testbreak);
612 yyprevious = yytext[0] = input();
615 fprintf(yyout,"yylook: input ");
616 printchar("yyprevious",yyprevious);
623 /* if(debug)putchar('\n'); */
628 fprintf(yyout,"yylook: done loops: %d\n",testbreak);
629 fprintf(yyout,"yylook: return <void>\n");
647 /* the following are only used in the lex library */
653 fprintf(yyout,"yylook: input ");
654 printchar("out",out);
671 printf("main start\n");
672 infile = fopen("yacc.in","rb");
673 if (infile == NULL) {
679 printf("main end\n");
683 /* yyerror - issue error message */
701 12, 2, 9, 8, 17, 11, 25, 17, 15, 18,
702 16, 10, 18, 17, 15, 7, 16, 13, 18, 5,
703 3, 1, 0, 19, 20, 0, 0, 21, 22, 23,
704 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
705 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
706 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
707 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
708 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
709 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
710 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
711 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
712 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
713 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
714 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
715 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
716 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
717 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
718 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
719 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
720 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
721 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
722 0, 0, 0, 0, 0, 0, 0, 6, 14, 0,
723 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
724 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
725 0, 0, 0, 0, 0, 0, 0, 4, 6
729 -1000, -9,-1000, 5, -7, -59,-1000,-1000,-1000, -40,
730 -29, -40, -40,-1000,-1000, -40, -40, -40, -40, -38,
731 -35, -38, -38,-1000,-1000,-1000
739 0, 1, 1, 1, 1, 2, 4, 4, 4, 4,
744 0, 0, 2, 3, 3, 3, 3, 3, 3, 3,
749 -1000, -1, 10, -2, 256, -3, 257, 10, 10, 61,
750 -4, 45, 40, -3, 258, 43, 45, 42, 47, -4,
751 -4, -4, -4, -4, -4, 41
755 1, -2, 2, 0, 0, 0, 14, 3, 4, 0,
756 5, 0, 0, 12, 13, 0, 0, 0, 0, 10,
760 # define YYFLAG -1000
761 # define YYERROR goto yyerrlab
762 # define YYACCEPT return(0)
763 # define YYABORT return(1)
765 /* parser for yacc output */
768 int yydebug = 1; /* 1 for debugging */
770 int yydebug = 0; /* 1 for debugging */
772 YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
773 int yychar = -1; /* current input token number */
774 int yynerrs = 0; /* number of errors */
775 short yyerrflag = 0; /* error recovery flag */
779 short yys[YYMAXDEPTH];
781 register YYSTYPE *yypvt;
782 register short yystate, *yyps, yyn;
783 register YYSTYPE *yypv;
784 register short *yyxi;
793 yystack: /* put a state and value onto the stack */
795 printf("yyparse: yystack\n");
799 printf("yyparse: yystate=%d, ", yystate);
800 printchar("yychar",yychar);
802 if( ++yyps> &yys[YYMAXDEPTH] )
804 yyerror( "yyparse: yacc stack overflow" );
813 printf("yyparse: yynewstate\n");
816 yyn = yypact[yystate];
818 if( yyn<= YYFLAG ) goto yydefault; /* simple state */
821 printf("yyparse: yynewstate (1)\n");
824 if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
828 printf("yyparse: yynewstate yyn=%d ",yyn);
829 printchar("yychar",yychar);
832 if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
835 printf("yyparse: yynewstate (2)\n");
838 if( yychk[ yyn=yyact[ yyn ] ] == yychar ) /* valid shift */
845 printf("yyparse: yynewstate (3)\n");
848 if( yyerrflag > 0 ) --yyerrflag;
854 printf("yyparse: yydefault yystate=%d\n",yystate);
856 /* default state action */
858 if( (yyn=yydef[yystate]) == -2 )
860 if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
861 /* look through exception table */
863 for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
865 while( *(yyxi+=2) >= 0 )
867 if( *yyxi == yychar ) break;
869 if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */
873 printf("yyparse: yyn=%d yyerrflag=%d\n",yyn,yyerrflag);
876 if( yyn == 0 ) /* error */
878 /* error ... attempt to resume parsing */
881 case 0: /* brand new error */
883 yyerror( "yyparse: syntax error" );
888 case 2: /* incompletely recovered error ... try again */
892 /* find a state where "error" is a legal shift action */
894 while ( yyps >= yys ) {
895 yyn = yypact[*yyps] + YYERRCODE;
896 if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
897 yystate = yyact[yyn]; /* simulate a shift of "error" */
902 /* the current yyps has no shift onn "error", pop stack */
905 printf("yyparse: error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
911 /* there is no state on the stack with an error shift ... abort */
916 case 3: /* no shift yet; clobber input char */
919 printf("yyparse: error recovery discards char ");
920 printchar("yychar",yychar);
923 if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
925 goto yynewstate; /* try again in the same state */
931 /* reduction by production yyn */
934 printf("yyparse: reduce %d\n",yyn);
941 /* consult goto table to find next state */
943 yyj = yypgo[yyn] + *yyps + 1;
944 if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
965 printf("[NEG]\n[ADD]\n");
990 printf("[PUSH %s]\n", yytext);
995 printf("[%s]\n", yytext);
1000 goto yystack; /* stack new state and value */