Initialize Tizen 2.3
[external/ragel.git] / test / keller1.rl
1 /*
2  * @LANG: c++
3  */
4
5 /* 
6  * Automatically generated by keller. Do not edit.
7  *
8  * Parts of this file are copied from Keller source covered by the GNU
9  * GPL. As a special exception, you may use the parts of this file copied
10  * from Keller source without restriction. The remainder is derived from
11  * "tmp.gmr" and inherits the copyright status of that file.
12  */
13
14 #line 1 "tmp.gmr"
15 #include <iostream>
16 using std::cout;
17 using std::endl;
18
19
20 #line 16 "tmp.rl"
21 enum token_type_e {
22         tt_id,
23         tt_equals,
24         tt_semi,
25         tt_pipe,
26         tt_amp,
27         tt_minus,
28         tt_dot,
29         tt_colon,
30         tt_percent,
31         tt_dollar,
32         tt_plus,
33         tt_number,
34         tt_star,
35         tt_question,
36         tt_not,
37         tt_andFSM,
38         tt_orFSM,
39         tt_open,
40         tt_close
41 };
42
43 struct LangEl
44 {
45         int line, lineEnd;
46         int pos;
47
48         int type;
49         int state;
50         LangEl *prev, *next;
51 };
52
53 struct Token : public LangEl
54 {
55         const char *value;
56 };
57
58 struct Lel_start : public LangEl
59 {
60 #line 32 "tmp.gmr"
61
62         int si;
63 #line 59 "tmp.rl"
64 };
65
66 struct Lel_M : public LangEl
67 {
68 #line 36 "tmp.gmr"
69
70         int mi;
71 #line 67 "tmp.rl"
72 };
73
74 #define l__error 19
75 #define l_tt_id 0
76 #define l_tt_equals 1
77 #define l_tt_semi 2
78 #define l_tt_pipe 3
79 #define l_tt_amp 4
80 #define l_tt_minus 5
81 #define l_tt_dot 6
82 #define l_tt_colon 7
83 #define l_tt_percent 8
84 #define l_tt_dollar 9
85 #define l_tt_plus 10
86 #define l_tt_number 11
87 #define l_tt_star 12
88 #define l_tt_question 13
89 #define l_tt_not 14
90 #define l_tt_andFSM 15
91 #define l_tt_orFSM 16
92 #define l_tt_open 17
93 #define l_tt_close 18
94 #define l_start 23
95 #define l_M 24
96 #define l_A 25
97 #define l_E 26
98 #define l_T 27
99 #define l_N 28
100 #define l_K 29
101 #define l_F 30
102 #define l__start 31
103 #define l__eof 20
104
105 struct LangEl;
106
107 struct Parser
108 {
109         Parser();
110
111         void parseLangEl( LangEl *langEl );
112         int done( );
113
114         void push( LangEl *lel ) {
115                 lel->prev = stack;
116                 stack = lel;
117         }
118         LangEl *pop() {
119                 LangEl *ret = stack;
120                 stack = stack->prev;
121                 return ret;
122         }
123         int pop( int n );
124         void rem( LangEl *lel, int n );
125         LangEl *stack;
126         int next;
127         LangEl *redLel;
128         LangEl *rhs[10];
129
130         int cs;
131
132         // Initialize the machine. Invokes any init statement blocks. Returns 0
133         // if the machine begins in a non-accepting state and 1 if the machine
134         // begins in an accepting state.
135         int init( );
136
137         // Execute the machine on a block of data. Returns -1 if after processing
138         // the data, the machine is in the error state and can never accept, 0 if
139         // the machine is in a non-accepting state and 1 if the machine is in an
140         // accepting state.
141         int execute(  LangEl *data, int len );
142
143         // Indicate that there is no more data. Returns -1 if the machine finishes
144         // in the error state and does not accept, 0 if the machine finishes
145         // in any other non-accepting state and 1 if the machine finishes in an
146         // accepting state.
147         int finish( );
148 };
149
150
151 %%{
152         machine Parser;
153
154         getkey fpc->type;
155
156         action shift {
157                 fpc->state = fcurs;
158                 push( fpc );
159         }
160
161         action pop1 { fnext *pop(1); }
162         action pop2 { fnext *pop(2); }
163         action pop3 { fnext *pop(3); }
164         action pop4 { fnext *pop(4); }
165
166         action new_error {
167                 redLel = new LangEl();
168                 redLel->type = 19;
169         }
170
171         action newstart {
172                 redLel = new Lel_start();
173                 redLel->type = 23;
174         }
175
176         action newM {
177                 redLel = new Lel_M();
178                 redLel->type = 24;
179         }
180
181         action newA {
182                 redLel = new LangEl();
183                 redLel->type = 25;
184         }
185
186         action newE {
187                 redLel = new LangEl();
188                 redLel->type = 26;
189         }
190
191         action newT {
192                 redLel = new LangEl();
193                 redLel->type = 27;
194         }
195
196         action newN {
197                 redLel = new LangEl();
198                 redLel->type = 28;
199         }
200
201         action newK {
202                 redLel = new LangEl();
203                 redLel->type = 29;
204         }
205
206         action newF {
207                 redLel = new LangEl();
208                 redLel->type = 30;
209         }
210
211         action new_eof {
212                 redLel = new LangEl();
213                 redLel->type = 20;
214         }
215
216         action new_epsilon {
217                 redLel = new LangEl();
218                 redLel->type = 21;
219         }
220
221         action new_null {
222                 redLel = new LangEl();
223                 redLel->type = 22;
224         }
225
226         action rem1 { rem(fpc, 1); }
227         action rem2 { rem(fpc, 2); }
228         action rem3 { rem(fpc, 3); }
229         action rem4 { rem(fpc, 4); }
230
231         action r_start_0
232         {
233 #line 41 "tmp.gmr"
234  
235         cout << "start = M;" << endl;
236         static_cast<Lel_start*>(redLel)->si = static_cast<Lel_M*>(rhs[0])->mi;
237
238 #line 214 "tmp.rl"
239         }
240
241         action r_M_0
242         {
243 #line 44 "tmp.gmr"
244  cout << "M = M A;" << endl; 
245 #line 221 "tmp.rl"
246         }
247
248         action r_M_1
249         {
250 #line 45 "tmp.gmr"
251  cout << "M = A;" << endl; 
252 #line 228 "tmp.rl"
253         }
254
255         action r_A_0
256         {
257 #line 46 "tmp.gmr"
258  cout << "A = tt_id tt_equals E tt_semi;" << endl; 
259 #line 235 "tmp.rl"
260         }
261
262         action r_E_0
263         {
264 #line 47 "tmp.gmr"
265  cout << "E = E tt_pipe T;" << endl; 
266 #line 242 "tmp.rl"
267         }
268
269         action r_E_1
270         {
271 #line 48 "tmp.gmr"
272  cout << "E = E tt_amp T;" << endl; 
273 #line 249 "tmp.rl"
274         }
275
276         action r_E_2
277         {
278 #line 49 "tmp.gmr"
279  cout << "E = E tt_minus T;" << endl; 
280 #line 256 "tmp.rl"
281         }
282
283         action r_E_3
284         {
285 #line 50 "tmp.gmr"
286  cout << "E = T;" << endl; 
287 #line 263 "tmp.rl"
288         }
289
290         action r_T_0
291         {
292 #line 51 "tmp.gmr"
293  cout << "T = T tt_dot N;" << endl; 
294 #line 270 "tmp.rl"
295         }
296
297         action r_T_1
298         {
299 #line 52 "tmp.gmr"
300  cout << "T = T N;" << endl; 
301 #line 277 "tmp.rl"
302         }
303
304         action r_T_2
305         {
306 #line 53 "tmp.gmr"
307  cout << "T = N;" << endl; 
308 #line 284 "tmp.rl"
309         }
310
311         action r_N_0
312         {
313 #line 54 "tmp.gmr"
314  cout << "N = N tt_colon tt_id;" << endl; 
315 #line 291 "tmp.rl"
316         }
317
318         action r_N_1
319         {
320 #line 55 "tmp.gmr"
321  cout << "N = N tt_percent tt_id;" << endl; 
322 #line 298 "tmp.rl"
323         }
324
325         action r_N_2
326         {
327 #line 56 "tmp.gmr"
328  cout << "N = N tt_dollar tt_id;" << endl; 
329 #line 305 "tmp.rl"
330         }
331
332         action r_N_3
333         {
334 #line 57 "tmp.gmr"
335  cout << "N = N tt_colon tt_plus tt_number;" << endl; 
336 #line 312 "tmp.rl"
337         }
338
339         action r_N_4
340         {
341 #line 58 "tmp.gmr"
342  cout << "N = N tt_colon tt_minus tt_number;" << endl; 
343 #line 319 "tmp.rl"
344         }
345
346         action r_N_5
347         {
348 #line 59 "tmp.gmr"
349  cout << "N = N tt_percent tt_plus tt_number;" << endl; 
350 #line 326 "tmp.rl"
351         }
352
353         action r_N_6
354         {
355 #line 60 "tmp.gmr"
356  cout << "N = N tt_percent tt_minus tt_number;" << endl; 
357 #line 333 "tmp.rl"
358         }
359
360         action r_N_7
361         {
362 #line 61 "tmp.gmr"
363  cout << "N = N tt_dollar tt_plus tt_number;" << endl; 
364 #line 340 "tmp.rl"
365         }
366
367         action r_N_8
368         {
369 #line 62 "tmp.gmr"
370  cout << "N = N tt_dollar tt_minus tt_number;" << endl; 
371 #line 347 "tmp.rl"
372         }
373
374         action r_N_9
375         {
376 #line 63 "tmp.gmr"
377  cout << "N = K;" << endl; 
378 #line 354 "tmp.rl"
379         }
380
381         action r_K_0
382         {
383 #line 64 "tmp.gmr"
384  cout << "K = F tt_star;" << endl; 
385 #line 361 "tmp.rl"
386         }
387
388         action r_K_1
389         {
390 #line 65 "tmp.gmr"
391  cout << "K = F tt_question;" << endl; 
392 #line 368 "tmp.rl"
393         }
394
395         action r_K_2
396         {
397 #line 66 "tmp.gmr"
398  cout << "K = F tt_plus;" << endl; 
399 #line 375 "tmp.rl"
400         }
401
402         action r_K_3
403         {
404 #line 67 "tmp.gmr"
405  cout << "K = F;" << endl; 
406 #line 382 "tmp.rl"
407         }
408
409         action r_K_4
410         {
411 #line 68 "tmp.gmr"
412  cout << "K = tt_not F tt_star;" << endl; 
413 #line 389 "tmp.rl"
414         }
415
416         action r_K_5
417         {
418 #line 69 "tmp.gmr"
419  cout << "K = tt_not F tt_question;" << endl; 
420 #line 396 "tmp.rl"
421         }
422
423         action r_K_6
424         {
425 #line 70 "tmp.gmr"
426  cout << "K = tt_not F tt_plus;" << endl; 
427 #line 403 "tmp.rl"
428         }
429
430         action r_K_7
431         {
432 #line 71 "tmp.gmr"
433  cout << "K = tt_not F;" << endl; 
434 #line 410 "tmp.rl"
435         }
436
437         action r_F_0
438         {
439 #line 72 "tmp.gmr"
440  cout << "F = tt_andFSM;" << endl; 
441 #line 417 "tmp.rl"
442         }
443
444         action r_F_1
445         {
446 #line 73 "tmp.gmr"
447  cout << "F = tt_orFSM;" << endl; 
448 #line 424 "tmp.rl"
449         }
450
451         action r_F_2
452         {
453 #line 74 "tmp.gmr"
454  cout << "F = tt_id;" << endl; 
455 #line 431 "tmp.rl"
456         }
457
458         action r_F_3
459         {
460 #line 75 "tmp.gmr"
461  cout << "F = tt_open E tt_close;" << endl; 
462 #line 438 "tmp.rl"
463         }
464
465         main :=
466         s0:  start: (
467                 23 @shift -> s1 |
468                 25 @shift -> s3 |
469                 24 @shift -> s4 |
470                 0 @shift -> s5
471         ),
472         s1: (
473                 20 @shift -> s54
474         ),
475         s2: (
476                 (0|20) @pop2 @newM @r_M_0 @rem2 -> s54
477         ),
478         s3: (
479                 (0|20) @pop1 @newM @r_M_1 @rem1 -> s54
480         ),
481         s4: (
482                 20 @pop1 @newstart @r_start_0 @rem1 -> s54 |
483                 25 @shift -> s2 |
484                 0 @shift -> s5
485         ),
486         s5: (
487                 1 @shift -> s6
488         ),
489         s6: (
490                 26 @shift -> s8 |
491                 27 @shift -> s9 |
492                 29 @shift -> s25 |
493                 28 @shift -> s26 |
494                 30 @shift -> s33 |
495                 17 @shift -> s35 |
496                 14 @shift -> s46 |
497                 15 @shift -> s48 |
498                 16 @shift -> s49 |
499                 0 @shift -> s50
500         ),
501         s7: (
502                 (0|20) @pop4 @newA @r_A_0 @rem4 -> s54
503         ),
504         s8: (
505                 2 @shift -> s7 |
506                 3 @shift -> s37 |
507                 4 @shift -> s38 |
508                 5 @shift -> s39
509         ),
510         s9: (
511                 (2..5|18) @pop1 @newE @r_E_3 @rem1 -> s54 |
512                 29 @shift -> s25 |
513                 30 @shift -> s33 |
514                 28 @shift -> s34 |
515                 17 @shift -> s35 |
516                 6 @shift -> s41 |
517                 14 @shift -> s46 |
518                 15 @shift -> s48 |
519                 16 @shift -> s49 |
520                 0 @shift -> s50
521         ),
522         s10: (
523                 (0|2..9|14..18) @pop3 @newN @r_N_0 @rem3 -> s54
524         ),
525         s11: (
526                 (0|2..9|14..18) @pop3 @newN @r_N_1 @rem3 -> s54
527         ),
528         s12: (
529                 (0|2..9|14..18) @pop3 @newN @r_N_2 @rem3 -> s54
530         ),
531         s13: (
532                 11 @shift -> s14
533         ),
534         s14: (
535                 (0|2..9|14..18) @pop4 @newN @r_N_3 @rem4 -> s54
536         ),
537         s15: (
538                 11 @shift -> s16
539         ),
540         s16: (
541                 (0|2..9|14..18) @pop4 @newN @r_N_4 @rem4 -> s54
542         ),
543         s17: (
544                 11 @shift -> s18
545         ),
546         s18: (
547                 (0|2..9|14..18) @pop4 @newN @r_N_5 @rem4 -> s54
548         ),
549         s19: (
550                 11 @shift -> s20
551         ),
552         s20: (
553                 (0|2..9|14..18) @pop4 @newN @r_N_6 @rem4 -> s54
554         ),
555         s21: (
556                 11 @shift -> s22
557         ),
558         s22: (
559                 (0|2..9|14..18) @pop4 @newN @r_N_7 @rem4 -> s54
560         ),
561         s23: (
562                 11 @shift -> s24
563         ),
564         s24: (
565                 (0|2..9|14..18) @pop4 @newN @r_N_8 @rem4 -> s54
566         ),
567         s25: (
568                 (0|2..9|14..18) @pop1 @newN @r_N_9 @rem1 -> s54
569         ),
570         s26: (
571                 (0|2..6|14..18) @pop1 @newT @r_T_2 @rem1 -> s54 |
572                 7 @shift -> s27 |
573                 8 @shift -> s28 |
574                 9 @shift -> s29
575         ),
576         s27: (
577                 0 @shift -> s10 |
578                 10 @shift -> s13 |
579                 5 @shift -> s15
580         ),
581         s28: (
582                 0 @shift -> s11 |
583                 10 @shift -> s17 |
584                 5 @shift -> s19
585         ),
586         s29: (
587                 0 @shift -> s12 |
588                 10 @shift -> s21 |
589                 5 @shift -> s23
590         ),
591         s30: (
592                 (0|2..9|14..18) @pop2 @newK @r_K_0 @rem2 -> s54
593         ),
594         s31: (
595                 (0|2..9|14..18) @pop2 @newK @r_K_1 @rem2 -> s54
596         ),
597         s32: (
598                 (0|2..9|14..18) @pop2 @newK @r_K_2 @rem2 -> s54
599         ),
600         s33: (
601                 (0|2..9|14..18) @pop1 @newK @r_K_3 @rem1 -> s54 |
602                 12 @shift -> s30 |
603                 13 @shift -> s31 |
604                 10 @shift -> s32
605         ),
606         s34: (
607                 (0|2..6|14..18) @pop2 @newT @r_T_1 @rem2 -> s54 |
608                 7 @shift -> s27 |
609                 8 @shift -> s28 |
610                 9 @shift -> s29
611         ),
612         s35: (
613                 27 @shift -> s9 |
614                 29 @shift -> s25 |
615                 28 @shift -> s26 |
616                 30 @shift -> s33 |
617                 17 @shift -> s35 |
618                 26 @shift -> s40 |
619                 14 @shift -> s46 |
620                 15 @shift -> s48 |
621                 16 @shift -> s49 |
622                 0 @shift -> s50
623         ),
624         s36: (
625                 (0|2..10|12..18) @pop3 @newF @r_F_3 @rem3 -> s54
626         ),
627         s37: (
628                 29 @shift -> s25 |
629                 28 @shift -> s26 |
630                 30 @shift -> s33 |
631                 17 @shift -> s35 |
632                 14 @shift -> s46 |
633                 15 @shift -> s48 |
634                 16 @shift -> s49 |
635                 0 @shift -> s50 |
636                 27 @shift -> s53
637         ),
638         s38: (
639                 29 @shift -> s25 |
640                 28 @shift -> s26 |
641                 30 @shift -> s33 |
642                 17 @shift -> s35 |
643                 14 @shift -> s46 |
644                 15 @shift -> s48 |
645                 16 @shift -> s49 |
646                 0 @shift -> s50 |
647                 27 @shift -> s52
648         ),
649         s39: (
650                 29 @shift -> s25 |
651                 28 @shift -> s26 |
652                 30 @shift -> s33 |
653                 17 @shift -> s35 |
654                 27 @shift -> s42 |
655                 14 @shift -> s46 |
656                 15 @shift -> s48 |
657                 16 @shift -> s49 |
658                 0 @shift -> s50
659         ),
660         s40: (
661                 18 @shift -> s36 |
662                 3 @shift -> s37 |
663                 4 @shift -> s38 |
664                 5 @shift -> s39
665         ),
666         s41: (
667                 29 @shift -> s25 |
668                 30 @shift -> s33 |
669                 17 @shift -> s35 |
670                 14 @shift -> s46 |
671                 15 @shift -> s48 |
672                 16 @shift -> s49 |
673                 0 @shift -> s50 |
674                 28 @shift -> s51
675         ),
676         s42: (
677                 (2..5|18) @pop3 @newE @r_E_2 @rem3 -> s54 |
678                 29 @shift -> s25 |
679                 30 @shift -> s33 |
680                 28 @shift -> s34 |
681                 17 @shift -> s35 |
682                 6 @shift -> s41 |
683                 14 @shift -> s46 |
684                 15 @shift -> s48 |
685                 16 @shift -> s49 |
686                 0 @shift -> s50
687         ),
688         s43: (
689                 (0|2..9|14..18) @pop3 @newK @r_K_4 @rem3 -> s54
690         ),
691         s44: (
692                 (0|2..9|14..18) @pop3 @newK @r_K_5 @rem3 -> s54
693         ),
694         s45: (
695                 (0|2..9|14..18) @pop3 @newK @r_K_6 @rem3 -> s54
696         ),
697         s46: (
698                 17 @shift -> s35 |
699                 30 @shift -> s47 |
700                 15 @shift -> s48 |
701                 16 @shift -> s49 |
702                 0 @shift -> s50
703         ),
704         s47: (
705                 (0|2..9|14..18) @pop2 @newK @r_K_7 @rem2 -> s54 |
706                 12 @shift -> s43 |
707                 13 @shift -> s44 |
708                 10 @shift -> s45
709         ),
710         s48: (
711                 (0|2..10|12..18) @pop1 @newF @r_F_0 @rem1 -> s54
712         ),
713         s49: (
714                 (0|2..10|12..18) @pop1 @newF @r_F_1 @rem1 -> s54
715         ),
716         s50: (
717                 (0|2..10|12..18) @pop1 @newF @r_F_2 @rem1 -> s54
718         ),
719         s51: (
720                 (0|2..6|14..18) @pop3 @newT @r_T_0 @rem3 -> s54 |
721                 7 @shift -> s27 |
722                 8 @shift -> s28 |
723                 9 @shift -> s29
724         ),
725         s52: (
726                 (2..5|18) @pop3 @newE @r_E_1 @rem3 -> s54 |
727                 29 @shift -> s25 |
728                 30 @shift -> s33 |
729                 28 @shift -> s34 |
730                 17 @shift -> s35 |
731                 6 @shift -> s41 |
732                 14 @shift -> s46 |
733                 15 @shift -> s48 |
734                 16 @shift -> s49 |
735                 0 @shift -> s50
736         ),
737         s53: (
738                 (2..5|18) @pop3 @newE @r_E_0 @rem3 -> s54 |
739                 29 @shift -> s25 |
740                 30 @shift -> s33 |
741                 28 @shift -> s34 |
742                 17 @shift -> s35 |
743                 6 @shift -> s41 |
744                 14 @shift -> s46 |
745                 15 @shift -> s48 |
746                 16 @shift -> s49 |
747                 0 @shift -> s50
748         ),
749         s54: (
750                  '' -> final
751         )
752         ;
753 }%%
754
755 %% write data;
756
757 Parser::Parser( ) 
758 { }
759
760 int Parser::init( )
761 {
762         %% write init;
763         return 0;
764 }
765
766 int Parser::execute( LangEl *_data, int _len )
767 {
768         LangEl *p = _data;
769         LangEl *pe = _data+_len;
770         %% write exec;
771         if ( cs == Parser_error )
772                 return -1;
773         if ( cs >= Parser_first_final )
774                 return 1;
775         return 0;
776 }
777
778 int Parser::finish( )
779 {
780         if ( cs == Parser_error )
781                 return -1;
782         if ( cs >= Parser_first_final )
783                 return 1;
784         return 0;
785 }
786
787 void Parser::parseLangEl( LangEl *lel )
788 {
789         redLel = 0;
790         execute( lel, 1 );
791         while ( redLel != 0 ) {
792                 execute( redLel, 1 );
793                 redLel = 0;
794                 execute( lel, 1 );
795         }
796 }
797
798 int Parser::pop( int n )
799 {
800         for ( int i = n-1; i >= 0; i-- )
801                 rhs[i] = pop();
802         return rhs[0]->state;
803 }
804
805 void Parser::rem( LangEl *lel, int n )
806 {
807         for ( int i = n-1; i >= 0; i-- )
808                 delete rhs[i];
809 }
810
811 int Parser::done( )
812 {
813         Token *eof = new Token;
814         eof->type = l__eof;
815         eof->line = 0;
816         eof->pos = 0;
817         parseLangEl( eof );
818         return finish();
819 }
820
821 #line 77 "tmp.gmr"
822
823
824 #include <assert.h>
825 #define MAX_TOKS 10000
826
827 struct TokList
828 {
829         TokList() : numToks(0) { }
830
831         void append( int type );
832         int parse();
833
834         Token *toks[MAX_TOKS];
835         int numToks;
836 };
837
838 void TokList::append( int type )
839 {
840         assert( numToks < MAX_TOKS );
841         toks[numToks] = new Token;
842         toks[numToks]->type = type;
843         numToks += 1;
844 }
845
846 int TokList::parse()
847 {
848         Parser parser;
849         parser.init();
850         for ( int i = 0; i < numToks; i++ )
851                 parser.parseLangEl( toks[i] );
852         return parser.done();
853 }
854
855 void test0()
856 {
857         TokList tokList;
858         tokList.append( tt_id );
859         tokList.append( tt_equals );
860         tokList.append( tt_id );
861         tokList.append( tt_star );
862         tokList.append( tt_minus );
863         tokList.append( tt_andFSM );
864         tokList.append( tt_dot );
865         tokList.append( tt_id );
866         tokList.append( tt_semi );
867         tokList.append( tt_id );
868         tokList.append( tt_equals );
869         tokList.append( tt_id );
870         tokList.append( tt_andFSM );
871         tokList.append( tt_id );
872         tokList.append( tt_semi );
873         cout << tokList.parse() << endl;
874 }
875
876 void test1()
877 {
878         TokList tokList;
879         tokList.append( tt_id );
880         tokList.append( tt_equals );
881         tokList.append( tt_open );
882         tokList.append( tt_orFSM );
883         tokList.append( tt_minus );
884         tokList.append( tt_andFSM );
885         tokList.append( tt_close );
886         tokList.append( tt_star );
887         tokList.append( tt_semi );
888         cout << tokList.parse() << endl;
889 }
890 void test2()
891 {
892         TokList tokList;
893         tokList.append( tt_id );
894         tokList.append( tt_equals );
895         tokList.append( tt_not );
896         tokList.append( tt_open );
897         tokList.append( tt_orFSM );
898         tokList.append( tt_minus );
899         tokList.append( tt_not );
900         tokList.append( tt_andFSM );
901         tokList.append( tt_close );
902         tokList.append( tt_star );
903         tokList.append( tt_semi );
904         cout << tokList.parse() << endl;
905 }
906 void test3()
907 {
908         TokList tokList;
909         tokList.append( tt_id );
910         tokList.append( tt_equals );
911         tokList.append( tt_id );
912         tokList.append( tt_colon );
913         tokList.append( tt_minus );
914         tokList.append( tt_number );
915         tokList.append( tt_id );
916         tokList.append( tt_colon );
917         tokList.append( tt_id );
918         tokList.append( tt_id );
919         tokList.append( tt_dollar );
920         tokList.append( tt_plus );
921         tokList.append( tt_number );
922         tokList.append( tt_id );
923         tokList.append( tt_percent );
924         tokList.append( tt_minus );
925         tokList.append( tt_number );
926         tokList.append( tt_semi );
927         cout << tokList.parse() << endl;
928 }
929 void test4()
930 {
931         TokList tokList;
932         tokList.append( tt_id );
933         tokList.append( tt_equals );
934         tokList.append( tt_id );
935         tokList.append( tt_pipe );
936         tokList.append( tt_id );
937         tokList.append( tt_amp );
938         tokList.append( tt_id );
939         tokList.append( tt_minus );
940         tokList.append( tt_id );
941         tokList.append( tt_semi );
942         cout << tokList.parse() << endl;
943 }
944
945 int main()
946 {
947         test0();
948         test1();
949         test2();
950         test3();
951         test4();
952 }
953
954 #ifdef _____OUTPUT_____
955 F = tt_id;
956 K = F tt_star;
957 N = K;
958 T = N;
959 E = T;
960 F = tt_andFSM;
961 K = F;
962 N = K;
963 T = N;
964 F = tt_id;
965 K = F;
966 N = K;
967 T = T tt_dot N;
968 E = E tt_minus T;
969 A = tt_id tt_equals E tt_semi;
970 M = A;
971 F = tt_id;
972 K = F;
973 N = K;
974 T = N;
975 F = tt_andFSM;
976 K = F;
977 N = K;
978 T = T N;
979 F = tt_id;
980 K = F;
981 N = K;
982 T = T N;
983 E = T;
984 A = tt_id tt_equals E tt_semi;
985 M = M A;
986 start = M;
987 1
988 F = tt_orFSM;
989 K = F;
990 N = K;
991 T = N;
992 E = T;
993 F = tt_andFSM;
994 K = F;
995 N = K;
996 T = N;
997 E = E tt_minus T;
998 F = tt_open E tt_close;
999 K = F tt_star;
1000 N = K;
1001 T = N;
1002 E = T;
1003 A = tt_id tt_equals E tt_semi;
1004 M = A;
1005 start = M;
1006 1
1007 F = tt_orFSM;
1008 K = F;
1009 N = K;
1010 T = N;
1011 E = T;
1012 F = tt_andFSM;
1013 K = tt_not F;
1014 N = K;
1015 T = N;
1016 E = E tt_minus T;
1017 F = tt_open E tt_close;
1018 K = tt_not F tt_star;
1019 N = K;
1020 T = N;
1021 E = T;
1022 A = tt_id tt_equals E tt_semi;
1023 M = A;
1024 start = M;
1025 1
1026 F = tt_id;
1027 K = F;
1028 N = K;
1029 N = N tt_colon tt_minus tt_number;
1030 T = N;
1031 F = tt_id;
1032 K = F;
1033 N = K;
1034 N = N tt_colon tt_id;
1035 T = T N;
1036 F = tt_id;
1037 K = F;
1038 N = K;
1039 N = N tt_dollar tt_plus tt_number;
1040 T = T N;
1041 F = tt_id;
1042 K = F;
1043 N = K;
1044 N = N tt_percent tt_minus tt_number;
1045 T = T N;
1046 E = T;
1047 A = tt_id tt_equals E tt_semi;
1048 M = A;
1049 start = M;
1050 1
1051 F = tt_id;
1052 K = F;
1053 N = K;
1054 T = N;
1055 E = T;
1056 F = tt_id;
1057 K = F;
1058 N = K;
1059 T = N;
1060 E = E tt_pipe T;
1061 F = tt_id;
1062 K = F;
1063 N = K;
1064 T = N;
1065 E = E tt_amp T;
1066 F = tt_id;
1067 K = F;
1068 N = K;
1069 T = N;
1070 E = E tt_minus T;
1071 A = tt_id tt_equals E tt_semi;
1072 M = A;
1073 start = M;
1074 1
1075 #endif