]> git.sur5r.net Git - cc65/blob - test/ref/yacc2.c
c62fca34aaa188667c81557af2f7d655b4feae3b
[cc65] / test / ref / yacc2.c
1 /*
2   !!DESCRIPTION!!
3   !!ORIGIN!!      testsuite
4   !!LICENCE!!     Public Domain
5   !!AUTHOR!!      Groepaz/Hitmen
6 */
7
8 # define YYTYPE char
9 struct yywork 
10
11         YYTYPE verify, advance; 
12 } yycrank[] =
13 {
14         {0,0},  {0,0},  {1,3},  {0,0},
15         {0,0},  {0,0},  {0,0},  {0,0},
16         {0,0},  {0,0},  {1,4},  {1,3},
17         {0,0},  {0,0},  {0,0},  {0,0},
18
19         {0,0},  {0,0},  {0,0},  {0,0},
20         {0,0},  {0,0},  {0,0},  {0,0},
21         {0,0},  {0,0},  {0,0},  {0,0},
22         {0,0},  {0,0},  {0,0},  {0,0},
23  
24         {0,0},  {0,0},  {0,0},  {0,0},
25         {0,0},  {0,0},  {0,0},  {0,0},
26         {0,0},  {0,0},  {0,0},  {0,0},
27         {0,0},  {0,0},  {0,0},  {0,0},
28  
29         {0,0},  {1,5},  {5,7},  {5,7},
30         {5,7},  {5,7},  {5,7},  {5,7},
31         {5,7},  {5,7},  {5,7},  {5,7},
32         {0,0},  {0,0},  {0,0},  {0,0},
33 /* 0x40 */
34         {0,0},  {0,0},  {1,6},  {6,8},
35         {6,8},  {6,8},  {6,8},  {6,8},
36         {6,8},  {6,8},  {6,8},  {6,8},
37         {6,8},  {0,0},  {0,0},  {0,0},
38  
39         {0,0},  {0,0},  {0,0},  {0,0},
40         {6,8},  {6,8},  {6,8},  {6,8},
41         {6,8},  {6,8},  {6,8},  {6,8},
42         {6,8},  {6,8},  {6,8},  {6,8},
43  
44         {6,8},  {6,8},  {6,8},  {6,8},
45         {6,8},  {6,8},  {6,8},  {6,8},
46         {6,8},  {6,8},  {6,8},  {6,8},
47         {6,8},  {6,8},  {0,0},  {0,0},
48  
49         {0,0},  {0,0},  {6,8},  {0,0},
50         {6,8},  {6,8},  {6,8},  {6,8},
51         {6,8},  {6,8},  {6,8},  {6,8},
52         {6,8},  {6,8},  {6,8},  {6,8},
53 /* 0x80 */
54         {6,8},  {6,8},  {6,8},  {6,8},
55         {6,8},  {6,8},  {6,8},  {6,8},
56         {6,8},  {6,8},  {6,8},  {6,8},
57         {6,8},  {6,8},  {0,0},  {0,0},
58
59 #ifdef CHARSETHACK
60         {0,0},  {0,0},  {0,0},  {0,0},
61         {0,0},  {0,0},  {0,0},  {0,0},
62         {0,0},  {0,0},  {0,0},  {0,0},
63         {0,0},  {0,0},  {0,0},  {0,0},
64
65         {0,0},  {0,0},  {0,0},  {0,0},
66         {0,0},  {0,0},  {0,0},  {0,0},
67         {0,0},  {0,0},  {0,0},  {0,0},
68         {0,0},  {0,0},  {0,0},  {0,0},
69
70         {0,0},  {0,0},  {0,0},  {0,0},
71         {0,0},  {0,0},  {0,0},  {0,0},
72         {0,0},  {0,0},  {0,0},  {0,0},
73         {0,0},  {0,0},  {0,0},  {0,0},
74
75 /* 0xc0 */
76         {0,0},  {0,0},  {1,6},  {6,8},
77         {6,8},  {6,8},  {6,8},  {6,8},
78         {6,8},  {6,8},  {6,8},  {6,8},
79         {6,8},  {0,0},  {0,0},  {0,0},
80 #endif
81         {0,0}
82 };
83
84 struct yywork *yytop = yycrank+255;
85
86 int yyvstop[] =
87 {
88         0,4,0,3,4,0,2,4,0,1,4,0,2,0,1,0,0
89 };
90
91 struct yysvf 
92 {
93         struct yywork *yystoff;
94         struct yysvf *yyother;
95         int *yystops;
96 };
97
98 struct yysvf yysvec[] =
99 {
100         {0,     0,      0},
101         {yycrank+-1,    0,              0},
102         {yycrank+0,     yysvec+1,       0},
103         {yycrank+0,     0,              yyvstop+1},
104         {yycrank+0,     0,              yyvstop+3},
105         {yycrank+2,     0,              yyvstop+6},
106         {yycrank+19,    0,              yyvstop+9},
107         {yycrank+0,     yysvec+5,       yyvstop+12},
108         {yycrank+0,     yysvec+6,       yyvstop+14},
109         {0,     0,      0}
110 };
111
112 #if 0
113 # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):GETCHAR())==('\n')?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
114 // *yylastch++ = yych = input();
115 void subtest1(void)
116 {
117         *yylastch++ = yych = input();
118 }
119 #endif
120
121 // do some bogus operation to destroy all registers etc
122 static int bog=1234;
123 #if 0
124 void bogus(void)
125 {
126         bog*=0x1234;
127 }
128 #else
129 #define bogus() bog+=0x1234
130 #endif
131
132 #if 1
133 // yyt = yyt + yych;
134 void subtest2(void)
135 {
136         register struct yywork *yyt;
137         int yych;
138
139         yyt=yycrank;
140         yych=10;
141
142         bogus();
143         yyt = yyt + yych;
144
145         printf("yyt: %d %d\n",yyt->verify,yyt->advance);
146 }
147 #endif
148
149 #if 1
150 // if(yyt <= yytop && yyt->verify+yysvec == yystate)
151 void subtest3(void)
152 {
153         register struct yywork *yyt;
154         register struct yysvf *yystate;
155
156         yyt=yycrank;
157         yystate=yysvec;
158         
159         bogus();
160         if(yyt <= yytop && yyt->verify+yysvec == yystate)
161         {
162                 printf("if ok %d %d\n",yyt->verify,yyt->advance);
163         }
164         else
165         {
166                 printf("if not ok %d %d\n",yyt->verify,yyt->advance);
167         }
168 }
169 #endif
170
171 short yyr2[]=
172 {
173    0,   0,   2,   3,   3,   3,   3,   3,   3,   3,
174    2,   3,   1,   1,   1 
175 };
176
177 // yyps -= yyr2[yyn];
178 void subtest4(void)
179 {
180         register short *yyps, yyn;
181
182         yyps=0x8004;
183         yyn=0;
184
185         while(yyn<14)
186         {
187                 bogus();
188                 yyps -= yyr2[yyn];
189
190                 yyn++;
191         }
192         printf("yyps: %04x\n",yyps);
193 }
194
195 #if 1
196
197 int yylookret=10;
198 yylook()
199 {
200         yylookret--;
201         return yylookret;
202 }
203
204 // while((nstr = yylook()) >= 0)
205 void subtest5(void)
206 {
207         int nstr;
208
209         bogus();
210         while((nstr = yylook()) >= 0)
211         {
212                 printf("nstr: %04x\n",nstr);
213                 bogus();
214         }
215 }
216 #endif
217
218 int main(void)
219 {
220 //    subtest1();
221     subtest2();
222     subtest3();
223     subtest4();
224     subtest5();
225
226     return 0;
227 }