3 !!ORIGIN!! LCC 4.1 Testsuite
4 !!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
22 /* hack the original tables to work with both petscii and ascii */
27 # define UNARYMINUS 259
28 #define yyclearin yychar = -1
29 #define yyerrok yyerrflag = 0
31 extern short yyerrflag;
33 /*#define YYMAXDEPTH 150*/
39 YYSTYPE yylval, yyval;
40 # define YYERRCODE 256
43 # define NLSTATE yyprevious=YYNEWLINE
44 # define BEGIN yybgin = yysvec + 1 +
46 # define YYLERR yysvec
47 # define YYSTATE (yyestate-yysvec-1)
50 # define output(c) (void)putc(c,yyout)
52 /* # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar) */
53 # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getchar())==('\n')?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
55 # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
56 # define yymore() (yymorfg=1)
57 # define ECHO fprintf(yyout, "%s",yytext)
58 # define REJECT { nstr = yyreject(); goto yyfussy;}
59 int yyleng; extern char yytext[];
61 extern char *yysptr, yysbuf[];
64 /*FILE *yyin ={stdin}, *yyout ={stdout};*/
71 struct yywork *yystoff;
72 struct yysvf *yyother;
75 struct yysvf *yyestate;
76 extern struct yysvf yysvec[], *yybgin;
78 /*# define YYNEWLINE 10 */
79 # define YYNEWLINE ('\n')
81 #ifdef NO_IMPLICIT_FUNC_PROTOTYPES
93 void printchar(char *name,int ch)
97 fprintf(yyout," %s=YYNEWLINE\n",name);
99 else if((ch<0)||(ch>0xf0)||(!isprint(ch)))
101 fprintf(yyout," %s=%04x\n",name,ch &0xffff);
105 fprintf(yyout," %s='%c'\n",name,ch);
113 extern int yyprevious;
116 fprintf(yyout,"yylex()\n");
119 while((nstr = yylook()) >= 0)
122 fprintf(yyout,"yylex: nstr=%d\n",nstr);
128 if(yywrap()) return(0);
145 fprintf(yyout,"yylex: bad switch yylook %d\n",nstr);
151 fprintf(yyout,"yylex: return 0\n");
159 0,4,0,3,4,0,2,4,0,1,4,0,2,0,1,0,0
165 YYTYPE verify, advance;
168 {0,0}, {0,0}, {1,3}, {0,0},
169 {0,0}, {0,0}, {0,0}, {0,0},
170 {0,0}, {0,0}, {1,4}, {1,3},
171 {0,0}, {0,0}, {0,0}, {0,0},
173 {0,0}, {0,0}, {0,0}, {0,0},
174 {0,0}, {0,0}, {0,0}, {0,0},
175 {0,0}, {0,0}, {0,0}, {0,0},
176 {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},
181 {0,0}, {0,0}, {0,0}, {0,0},
183 {0,0}, {1,5}, {5,7}, {5,7},
184 {5,7}, {5,7}, {5,7}, {5,7},
185 {5,7}, {5,7}, {5,7}, {5,7},
186 {0,0}, {0,0}, {0,0}, {0,0},
188 {0,0}, {0,0}, {1,6}, {6,8},
189 {6,8}, {6,8}, {6,8}, {6,8},
190 {6,8}, {6,8}, {6,8}, {6,8},
191 {6,8}, {0,0}, {0,0}, {0,0},
193 {0,0}, {0,0}, {0,0}, {0,0},
194 {6,8}, {6,8}, {6,8}, {6,8},
195 {6,8}, {6,8}, {6,8}, {6,8},
196 {6,8}, {6,8}, {6,8}, {6,8},
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},
201 {6,8}, {6,8}, {0,0}, {0,0},
203 {0,0}, {0,0}, {6,8}, {0,0},
204 {6,8}, {6,8}, {6,8}, {6,8},
205 {6,8}, {6,8}, {6,8}, {6,8},
206 {6,8}, {6,8}, {6,8}, {6,8},
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},
211 {6,8}, {6,8}, {0,0}, {0,0},
214 {0,0}, {0,0}, {0,0}, {0,0},
215 {0,0}, {0,0}, {0,0}, {0,0},
216 {0,0}, {0,0}, {0,0}, {0,0},
217 {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},
222 {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},
227 {0,0}, {0,0}, {0,0}, {0,0},
230 {0,0}, {0,0}, {1,6}, {6,8},
231 {6,8}, {6,8}, {6,8}, {6,8},
232 {6,8}, {6,8}, {6,8}, {6,8},
233 {6,8}, {0,0}, {0,0}, {0,0},
241 struct yywork *yystoff;
242 struct yysvf *yyother;
246 struct yysvf yysvec[] =
250 {yycrank+0, yysvec+1, 0},
251 {yycrank+0, 0, yyvstop+1},
252 {yycrank+0, 0, yyvstop+3},
253 {yycrank+2, 0, yyvstop+6},
254 {yycrank+19, 0, yyvstop+9},
255 {yycrank+0, yysvec+5, yyvstop+12},
256 {yycrank+0, yysvec+6, yyvstop+14},
260 /* struct yywork *yytop = yycrank+141; */
262 struct yywork *yytop = yycrank+255;
264 struct yysvf *yybgin = yysvec+1;
267 WARNING: this table contains one entry per character
268 in the execution character set and must match it.
272 00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
274 01 ,011 ,012 ,01 ,01 ,012 ,01 ,01 ,
276 01 ,011 ,012 ,01 ,01 ,01 ,01 ,01 ,
278 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
279 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
281 011 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
282 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
284 '0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,
285 '0' ,'0' ,01 ,01 ,01 ,01 ,01 ,01 ,
287 /* 0x40 (ascii) @A... (petscii) @a... */
288 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
289 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
291 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
292 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,'A' ,
294 /* 0x60 (ascii) @a... */
295 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
296 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
298 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
299 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 ,
303 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
304 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
305 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
306 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
308 /* 0xc0 (petcii) @A... */
309 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
310 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
312 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
313 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 ,
315 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
316 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
317 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
326 /* ncform 4.1 83/08/11 */
330 # define NLSTATE yyprevious=YYNEWLINE
332 struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
334 char *yysptr = yysbuf;
336 extern struct yysvf *yyestate;
337 int yyprevious = YYNEWLINE;
339 unsigned char testbreak=0;
343 register struct yysvf *yystate, **lsp;
344 register struct yywork *yyt;
356 /* start off machines */
373 fprintf(yyout,"yylook()\n");
381 yylastch = yytext+yyleng;
385 fprintf(yyout,"yylook: yymorfg=%d\n",yymorfg);
391 fprintf(yyout,"yylook: (outer loop)");
392 printchar("yyprevious",yyprevious);
395 yyestate = yystate = yybgin;
396 if (yyprevious==YYNEWLINE) yystate++;
403 fprintf(yyout,"yylook: (inner loop) state %d\n",yystate-yysvec-1);
407 fprintf(yyout,"yylook: error, aborted after 5 loops\n");
412 yyt = yystate->yystoff;
414 /* fprintf(yyout,"yylook: yyt offs: %02x\n",yyt-yycrank); */
418 { /* may not be any transitions */
419 yyz = yystate->yyother;
421 if(yyz->yystoff == yycrank)break;
423 *yylastch++ = yych = input();
426 fprintf(yyout,"yylook: input ");
427 printchar("yych",yych);
433 /* fprintf(yyout,"yylook: yych=%02x yymatch[yych]=%02x\n",yych,yymatch[yych]); */
434 fprintf(yyout,"yylook: tryagain\n");
438 /* fprintf(yyout,"yylook: yyr offs: %02x\n",yyr-yycrank); */
443 if (yyt <= yytop && yyt->verify+yysvec == yystate)
445 if(yyt->advance+yysvec == YYLERR) /* error transitions */
448 fprintf(yyout,"yylook: unput (1) ");
449 printchar("*yylastch",*yylastch);
454 *lsp++ = yystate = yyt->advance+yysvec;
456 fprintf(yyout,"yylook: continue (1)\n");
461 fprintf(yyout,"yylook: ( yyt > yycrank)\n");
465 else if(yyt < yycrank) /* r < yycrank */
467 yyt = yyr = yycrank+(yycrank-yyt);
469 fprintf(yyout,"yylook: compressed state\n");
472 if(yyt <= yytop && yyt->verify+yysvec == yystate)
475 fprintf(yyout,"yylook: (1)\n");
477 if(yyt->advance+yysvec == YYLERR) /* error transitions */
480 fprintf(yyout,"yylook: unput (2) ");
481 printchar("*yylastch",*yylastch);
486 *lsp++ = yystate = yyt->advance+yysvec;
488 fprintf(yyout,"yylook: continue (2)\n");
495 fprintf(yyout,"yylook: yych=%02x yymatch[yych]=%02x\n",yych,yymatch[yych]);
496 fprintf(yyout,"yylook: yyt offs: %02x\n",yyt-yycrank);
497 fprintf(yyout,"yylook: yyr offs: %02x\n",yyr-yycrank);
500 yyt = yyr + YYU(yymatch[yych]);
503 fprintf(yyout,"yylook: yyt offs: %02x <= yytop offs: %02x\n",yyt-yycrank,yytop-yycrank);
504 fprintf(yyout,"yylook: yyt->verify=%04x yysvec=%04x (yyt->verify+yysvec)=%04x == yystate=%04x\n",yyt->verify,yysvec,(yyt->verify+yysvec),yystate);
506 fprintf(yyout,"yylook: try fall back character\n");
508 if(yyt <= yytop && yyt->verify+yysvec == yystate)
511 fprintf(yyout,"yylook: (2a)\n");
514 if(yyt->advance+yysvec == YYLERR) /* error transition */
517 /* cc65 compiles this ?! fprintf(yyout,"yylook: unput (3) ",); */
518 fprintf(yyout,"yylook: unput (3) ");
519 printchar("*yylastch",*yylastch);
524 *lsp++ = yystate = yyt->advance+yysvec;
526 /* fprintf(yyout,"yylook: yyt offs: %02x yyt->advance=%d\n",yyt-yycrank,yyt->advance); */
527 fprintf(yyout,"yylook: continue (3)\n");
533 fprintf(yyout,"yylook: (2)\n");
536 if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank)
539 fprintf(yyout,"yylook: fall back to state %d\n",yystate-yysvec-1);
547 fprintf(yyout,"yylook: unput (4) ");
548 printchar("*yylastch",*yylastch);
555 fprintf(yyout,"yylook: contin state=%d\n",yystate-yysvec-1);
561 if((*(lsp-1)-yysvec-1)<0)
563 fprintf(yyout,"yylook: stopped (end)\n");
567 fprintf(yyout,"yylook: stopped at %d with\n",*(lsp-1)-yysvec-1);
570 while (lsp-- > yylstate)
573 if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0)
576 if(yyextra[*yyfnd]) /* must backup */
578 while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate)
582 fprintf(yyout,"yylook: unput (5) ");
583 printchar("*yylastch",*yylastch);
588 yyprevious = YYU(*yylastch);
590 yyleng = yylastch-yytext+1;
593 fprintf(yyout,"\nyylook: match action %d\n",*yyfnd);
594 fprintf(yyout,"yylook: done loops: %d\n",testbreak);
600 if (yytext[0] == 0 /* && feof(yyin) */)
604 fprintf(yyout,"yylook: done loops: %d\n",testbreak);
608 yyprevious = yytext[0] = input();
611 fprintf(yyout,"yylook: input ");
612 printchar("yyprevious",yyprevious);
619 /* if(debug)putchar('\n'); */
624 fprintf(yyout,"yylook: done loops: %d\n",testbreak);
625 fprintf(yyout,"yylook: return <void>\n");
643 /* the following are only used in the lex library */
649 fprintf(yyout,"yylook: input ");
650 printchar("out",out);
667 printf("main start\n");
669 printf("main end\n");
673 /* yyerror - issue error message */
691 12, 2, 9, 8, 17, 11, 25, 17, 15, 18,
692 16, 10, 18, 17, 15, 7, 16, 13, 18, 5,
693 3, 1, 0, 19, 20, 0, 0, 21, 22, 23,
694 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
695 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
696 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
697 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
698 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
699 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
700 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
701 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
702 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
703 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
704 0, 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, 6, 14, 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, 4, 6
719 -1000, -9,-1000, 5, -7, -59,-1000,-1000,-1000, -40,
720 -29, -40, -40,-1000,-1000, -40, -40, -40, -40, -38,
721 -35, -38, -38,-1000,-1000,-1000
729 0, 1, 1, 1, 1, 2, 4, 4, 4, 4,
734 0, 0, 2, 3, 3, 3, 3, 3, 3, 3,
739 -1000, -1, 10, -2, 256, -3, 257, 10, 10, 61,
740 -4, 45, 40, -3, 258, 43, 45, 42, 47, -4,
741 -4, -4, -4, -4, -4, 41
745 1, -2, 2, 0, 0, 0, 14, 3, 4, 0,
746 5, 0, 0, 12, 13, 0, 0, 0, 0, 10,
750 # define YYFLAG -1000
751 # define YYERROR goto yyerrlab
752 # define YYACCEPT return(0)
753 # define YYABORT return(1)
755 /* parser for yacc output */
758 int yydebug = 1; /* 1 for debugging */
760 int yydebug = 0; /* 1 for debugging */
762 YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
763 int yychar = -1; /* current input token number */
764 int yynerrs = 0; /* number of errors */
765 short yyerrflag = 0; /* error recovery flag */
769 short yys[YYMAXDEPTH];
771 register YYSTYPE *yypvt;
772 register short yystate, *yyps, yyn;
773 register YYSTYPE *yypv;
774 register short *yyxi;
783 yystack: /* put a state and value onto the stack */
785 printf("yyparse: yystack\n");
789 printf("yyparse: yystate=%d, ", yystate);
790 printchar("yychar",yychar);
792 if( ++yyps> &yys[YYMAXDEPTH] )
794 yyerror( "yyparse: yacc stack overflow" );
803 printf("yyparse: yynewstate\n");
806 yyn = yypact[yystate];
808 if( yyn<= YYFLAG ) goto yydefault; /* simple state */
811 printf("yyparse: yynewstate (1)\n");
814 if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
818 printf("yyparse: yynewstate yyn=%d ",yyn);
819 printchar("yychar",yychar);
822 if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
825 printf("yyparse: yynewstate (2)\n");
828 if( yychk[ yyn=yyact[ yyn ] ] == yychar ) /* valid shift */
835 printf("yyparse: yynewstate (3)\n");
838 if( yyerrflag > 0 ) --yyerrflag;
844 printf("yyparse: yydefault yystate=%d\n",yystate);
846 /* default state action */
848 if( (yyn=yydef[yystate]) == -2 )
850 if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
851 /* look through exception table */
853 for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
855 while( *(yyxi+=2) >= 0 )
857 if( *yyxi == yychar ) break;
859 if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */
863 printf("yyparse: yyn=%d yyerrflag=%d\n",yyn,yyerrflag);
866 if( yyn == 0 ) /* error */
868 /* error ... attempt to resume parsing */
871 case 0: /* brand new error */
873 yyerror( "yyparse: syntax error" );
878 case 2: /* incompletely recovered error ... try again */
882 /* find a state where "error" is a legal shift action */
884 while ( yyps >= yys ) {
885 yyn = yypact[*yyps] + YYERRCODE;
886 if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
887 yystate = yyact[yyn]; /* simulate a shift of "error" */
892 /* the current yyps has no shift onn "error", pop stack */
895 printf("yyparse: error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
901 /* there is no state on the stack with an error shift ... abort */
906 case 3: /* no shift yet; clobber input char */
909 printf("yyparse: error recovery discards char ");
910 printchar("yychar",yychar);
913 if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
915 goto yynewstate; /* try again in the same state */
921 /* reduction by production yyn */
924 printf("yyparse: reduce %d\n",yyn);
931 /* consult goto table to find next state */
933 yyj = yypgo[yyn] + *yyps + 1;
934 if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
955 printf("[NEG]\n[ADD]\n");
980 printf("[PUSH %s]\n", yytext);
985 printf("[%s]\n", yytext);
990 goto yystack; /* stack new state and value */