6 * Automatically generated by keller. Do not edit.
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.
53 struct Token : public LangEl
58 struct Lel_start : public LangEl
66 struct Lel_M : public LangEl
83 #define l_tt_percent 8
86 #define l_tt_number 11
88 #define l_tt_question 13
90 #define l_tt_andFSM 15
111 void parseLangEl( LangEl *langEl );
114 void push( LangEl *lel ) {
124 void rem( LangEl *lel, int n );
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.
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
141 int execute( LangEl *data, int len );
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
161 action pop1 { fnext *pop(1); }
162 action pop2 { fnext *pop(2); }
163 action pop3 { fnext *pop(3); }
164 action pop4 { fnext *pop(4); }
167 redLel = new LangEl();
172 redLel = new Lel_start();
177 redLel = new Lel_M();
182 redLel = new LangEl();
187 redLel = new LangEl();
192 redLel = new LangEl();
197 redLel = new LangEl();
202 redLel = new LangEl();
207 redLel = new LangEl();
212 redLel = new LangEl();
217 redLel = new LangEl();
222 redLel = new LangEl();
226 action rem1 { rem(fpc, 1); }
227 action rem2 { rem(fpc, 2); }
228 action rem3 { rem(fpc, 3); }
229 action rem4 { rem(fpc, 4); }
235 cout << "start = M;" << endl;
236 static_cast<Lel_start*>(redLel)->si = static_cast<Lel_M*>(rhs[0])->mi;
244 cout << "M = M A;" << endl;
251 cout << "M = A;" << endl;
258 cout << "A = tt_id tt_equals E tt_semi;" << endl;
265 cout << "E = E tt_pipe T;" << endl;
272 cout << "E = E tt_amp T;" << endl;
279 cout << "E = E tt_minus T;" << endl;
286 cout << "E = T;" << endl;
293 cout << "T = T tt_dot N;" << endl;
300 cout << "T = T N;" << endl;
307 cout << "T = N;" << endl;
314 cout << "N = N tt_colon tt_id;" << endl;
321 cout << "N = N tt_percent tt_id;" << endl;
328 cout << "N = N tt_dollar tt_id;" << endl;
335 cout << "N = N tt_colon tt_plus tt_number;" << endl;
342 cout << "N = N tt_colon tt_minus tt_number;" << endl;
349 cout << "N = N tt_percent tt_plus tt_number;" << endl;
356 cout << "N = N tt_percent tt_minus tt_number;" << endl;
363 cout << "N = N tt_dollar tt_plus tt_number;" << endl;
370 cout << "N = N tt_dollar tt_minus tt_number;" << endl;
377 cout << "N = K;" << endl;
384 cout << "K = F tt_star;" << endl;
391 cout << "K = F tt_question;" << endl;
398 cout << "K = F tt_plus;" << endl;
405 cout << "K = F;" << endl;
412 cout << "K = tt_not F tt_star;" << endl;
419 cout << "K = tt_not F tt_question;" << endl;
426 cout << "K = tt_not F tt_plus;" << endl;
433 cout << "K = tt_not F;" << endl;
440 cout << "F = tt_andFSM;" << endl;
447 cout << "F = tt_orFSM;" << endl;
454 cout << "F = tt_id;" << endl;
461 cout << "F = tt_open E tt_close;" << endl;
476 (0|20) @pop2 @newM @r_M_0 @rem2 -> s54
479 (0|20) @pop1 @newM @r_M_1 @rem1 -> s54
482 20 @pop1 @newstart @r_start_0 @rem1 -> s54 |
502 (0|20) @pop4 @newA @r_A_0 @rem4 -> s54
511 (2..5|18) @pop1 @newE @r_E_3 @rem1 -> s54 |
523 (0|2..9|14..18) @pop3 @newN @r_N_0 @rem3 -> s54
526 (0|2..9|14..18) @pop3 @newN @r_N_1 @rem3 -> s54
529 (0|2..9|14..18) @pop3 @newN @r_N_2 @rem3 -> s54
535 (0|2..9|14..18) @pop4 @newN @r_N_3 @rem4 -> s54
541 (0|2..9|14..18) @pop4 @newN @r_N_4 @rem4 -> s54
547 (0|2..9|14..18) @pop4 @newN @r_N_5 @rem4 -> s54
553 (0|2..9|14..18) @pop4 @newN @r_N_6 @rem4 -> s54
559 (0|2..9|14..18) @pop4 @newN @r_N_7 @rem4 -> s54
565 (0|2..9|14..18) @pop4 @newN @r_N_8 @rem4 -> s54
568 (0|2..9|14..18) @pop1 @newN @r_N_9 @rem1 -> s54
571 (0|2..6|14..18) @pop1 @newT @r_T_2 @rem1 -> s54 |
592 (0|2..9|14..18) @pop2 @newK @r_K_0 @rem2 -> s54
595 (0|2..9|14..18) @pop2 @newK @r_K_1 @rem2 -> s54
598 (0|2..9|14..18) @pop2 @newK @r_K_2 @rem2 -> s54
601 (0|2..9|14..18) @pop1 @newK @r_K_3 @rem1 -> s54 |
607 (0|2..6|14..18) @pop2 @newT @r_T_1 @rem2 -> s54 |
625 (0|2..10|12..18) @pop3 @newF @r_F_3 @rem3 -> s54
677 (2..5|18) @pop3 @newE @r_E_2 @rem3 -> s54 |
689 (0|2..9|14..18) @pop3 @newK @r_K_4 @rem3 -> s54
692 (0|2..9|14..18) @pop3 @newK @r_K_5 @rem3 -> s54
695 (0|2..9|14..18) @pop3 @newK @r_K_6 @rem3 -> s54
705 (0|2..9|14..18) @pop2 @newK @r_K_7 @rem2 -> s54 |
711 (0|2..10|12..18) @pop1 @newF @r_F_0 @rem1 -> s54
714 (0|2..10|12..18) @pop1 @newF @r_F_1 @rem1 -> s54
717 (0|2..10|12..18) @pop1 @newF @r_F_2 @rem1 -> s54
720 (0|2..6|14..18) @pop3 @newT @r_T_0 @rem3 -> s54 |
726 (2..5|18) @pop3 @newE @r_E_1 @rem3 -> s54 |
738 (2..5|18) @pop3 @newE @r_E_0 @rem3 -> s54 |
766 int Parser::execute( LangEl *_data, int _len )
769 LangEl *pe = _data+_len;
771 if ( cs == Parser_error )
773 if ( cs >= Parser_first_final )
778 int Parser::finish( )
780 if ( cs == Parser_error )
782 if ( cs >= Parser_first_final )
787 void Parser::parseLangEl( LangEl *lel )
791 while ( redLel != 0 ) {
792 execute( redLel, 1 );
798 int Parser::pop( int n )
800 for ( int i = n-1; i >= 0; i-- )
802 return rhs[0]->state;
805 void Parser::rem( LangEl *lel, int n )
807 for ( int i = n-1; i >= 0; i-- )
813 Token *eof = new Token;
825 #define MAX_TOKS 10000
829 TokList() : numToks(0) { }
831 void append( int type );
834 Token *toks[MAX_TOKS];
838 void TokList::append( int type )
840 assert( numToks < MAX_TOKS );
841 toks[numToks] = new Token;
842 toks[numToks]->type = type;
850 for ( int i = 0; i < numToks; i++ )
851 parser.parseLangEl( toks[i] );
852 return parser.done();
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;
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;
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;
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;
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;
954 #ifdef _____OUTPUT_____
969 A = tt_id tt_equals E tt_semi;
984 A = tt_id tt_equals E tt_semi;
998 F = tt_open E tt_close;
1003 A = tt_id tt_equals E tt_semi;
1017 F = tt_open E tt_close;
1018 K = tt_not F tt_star;
1022 A = tt_id tt_equals E tt_semi;
1029 N = N tt_colon tt_minus tt_number;
1034 N = N tt_colon tt_id;
1039 N = N tt_dollar tt_plus tt_number;
1044 N = N tt_percent tt_minus tt_number;
1047 A = tt_id tt_equals E tt_semi;
1071 A = tt_id tt_equals E tt_semi;