diff options
Diffstat (limited to 'test/ragel.d/keller1.rl')
-rw-r--r-- | test/ragel.d/keller1.rl | 1074 |
1 files changed, 0 insertions, 1074 deletions
diff --git a/test/ragel.d/keller1.rl b/test/ragel.d/keller1.rl deleted file mode 100644 index 9ec5da41..00000000 --- a/test/ragel.d/keller1.rl +++ /dev/null @@ -1,1074 +0,0 @@ -/* - * @LANG: c++ - */ - -/* - * Automatically generated by keller. Do not edit. - * - * Parts of this file are copied from Keller source covered by the GNU - * GPL. As a special exception, you may use the parts of this file copied - * from Keller source without restriction. The remainder is derived from - * "tmp.gmr" and inherits the copyright status of that file. - */ - -#line 1 "tmp.gmr" -#include <iostream> -using std::cout; -using std::endl; - - -#line 16 "tmp.rl" -enum token_type_e { - tt_id, - tt_equals, - tt_semi, - tt_pipe, - tt_amp, - tt_minus, - tt_dot, - tt_colon, - tt_percent, - tt_dollar, - tt_plus, - tt_number, - tt_star, - tt_question, - tt_not, - tt_andFSM, - tt_orFSM, - tt_open, - tt_close -}; - -struct LangEl -{ - int line, lineEnd; - int pos; - - int type; - int state; - LangEl *prev, *next; -}; - -struct Token : public LangEl -{ - const char *value; -}; - -struct Lel_start : public LangEl -{ -#line 32 "tmp.gmr" - - int si; -#line 59 "tmp.rl" -}; - -struct Lel_M : public LangEl -{ -#line 36 "tmp.gmr" - - int mi; -#line 67 "tmp.rl" -}; - -#define l__error 19 -#define l_tt_id 0 -#define l_tt_equals 1 -#define l_tt_semi 2 -#define l_tt_pipe 3 -#define l_tt_amp 4 -#define l_tt_minus 5 -#define l_tt_dot 6 -#define l_tt_colon 7 -#define l_tt_percent 8 -#define l_tt_dollar 9 -#define l_tt_plus 10 -#define l_tt_number 11 -#define l_tt_star 12 -#define l_tt_question 13 -#define l_tt_not 14 -#define l_tt_andFSM 15 -#define l_tt_orFSM 16 -#define l_tt_open 17 -#define l_tt_close 18 -#define l_start 23 -#define l_M 24 -#define l_A 25 -#define l_E 26 -#define l_T 27 -#define l_N 28 -#define l_K 29 -#define l_F 30 -#define l__start 31 -#define l__eof 20 - -struct LangEl; - -struct Parser -{ - Parser(); - - void parseLangEl( LangEl *langEl ); - int done( ); - - void push( LangEl *lel ) { - lel->prev = stack; - stack = lel; - } - LangEl *pop() { - LangEl *ret = stack; - stack = stack->prev; - return ret; - } - int pop( int n ); - void rem( LangEl *lel, int n ); - LangEl *stack; - int next; - LangEl *redLel; - LangEl *rhs[10]; - - int cs; - - // Initialize the machine. Invokes any init statement blocks. Returns 0 - // if the machine begins in a non-accepting state and 1 if the machine - // begins in an accepting state. - int init( ); - - // Execute the machine on a block of data. Returns -1 if after processing - // the data, the machine is in the error state and can never accept, 0 if - // the machine is in a non-accepting state and 1 if the machine is in an - // accepting state. - int execute( LangEl *data, int len ); - - // Indicate that there is no more data. Returns -1 if the machine finishes - // in the error state and does not accept, 0 if the machine finishes - // in any other non-accepting state and 1 if the machine finishes in an - // accepting state. - int finish( ); -}; - - -%%{ - machine Parser; - - getkey fpc->type; - - action shift { - fpc->state = fcurs; - push( fpc ); - } - - action pop1 { fnext *pop(1); } - action pop2 { fnext *pop(2); } - action pop3 { fnext *pop(3); } - action pop4 { fnext *pop(4); } - - action new_error { - redLel = new LangEl(); - redLel->type = 19; - } - - action newstart { - redLel = new Lel_start(); - redLel->type = 23; - } - - action newM { - redLel = new Lel_M(); - redLel->type = 24; - } - - action newA { - redLel = new LangEl(); - redLel->type = 25; - } - - action newE { - redLel = new LangEl(); - redLel->type = 26; - } - - action newT { - redLel = new LangEl(); - redLel->type = 27; - } - - action newN { - redLel = new LangEl(); - redLel->type = 28; - } - - action newK { - redLel = new LangEl(); - redLel->type = 29; - } - - action newF { - redLel = new LangEl(); - redLel->type = 30; - } - - action new_eof { - redLel = new LangEl(); - redLel->type = 20; - } - - action new_epsilon { - redLel = new LangEl(); - redLel->type = 21; - } - - action new_null { - redLel = new LangEl(); - redLel->type = 22; - } - - action rem1 { rem(fpc, 1); } - action rem2 { rem(fpc, 2); } - action rem3 { rem(fpc, 3); } - action rem4 { rem(fpc, 4); } - - action r_start_0 - { -#line 41 "tmp.gmr" - - cout << "start = M;" << endl; - static_cast<Lel_start*>(redLel)->si = static_cast<Lel_M*>(rhs[0])->mi; - -#line 214 "tmp.rl" - } - - action r_M_0 - { -#line 44 "tmp.gmr" - cout << "M = M A;" << endl; -#line 221 "tmp.rl" - } - - action r_M_1 - { -#line 45 "tmp.gmr" - cout << "M = A;" << endl; -#line 228 "tmp.rl" - } - - action r_A_0 - { -#line 46 "tmp.gmr" - cout << "A = tt_id tt_equals E tt_semi;" << endl; -#line 235 "tmp.rl" - } - - action r_E_0 - { -#line 47 "tmp.gmr" - cout << "E = E tt_pipe T;" << endl; -#line 242 "tmp.rl" - } - - action r_E_1 - { -#line 48 "tmp.gmr" - cout << "E = E tt_amp T;" << endl; -#line 249 "tmp.rl" - } - - action r_E_2 - { -#line 49 "tmp.gmr" - cout << "E = E tt_minus T;" << endl; -#line 256 "tmp.rl" - } - - action r_E_3 - { -#line 50 "tmp.gmr" - cout << "E = T;" << endl; -#line 263 "tmp.rl" - } - - action r_T_0 - { -#line 51 "tmp.gmr" - cout << "T = T tt_dot N;" << endl; -#line 270 "tmp.rl" - } - - action r_T_1 - { -#line 52 "tmp.gmr" - cout << "T = T N;" << endl; -#line 277 "tmp.rl" - } - - action r_T_2 - { -#line 53 "tmp.gmr" - cout << "T = N;" << endl; -#line 284 "tmp.rl" - } - - action r_N_0 - { -#line 54 "tmp.gmr" - cout << "N = N tt_colon tt_id;" << endl; -#line 291 "tmp.rl" - } - - action r_N_1 - { -#line 55 "tmp.gmr" - cout << "N = N tt_percent tt_id;" << endl; -#line 298 "tmp.rl" - } - - action r_N_2 - { -#line 56 "tmp.gmr" - cout << "N = N tt_dollar tt_id;" << endl; -#line 305 "tmp.rl" - } - - action r_N_3 - { -#line 57 "tmp.gmr" - cout << "N = N tt_colon tt_plus tt_number;" << endl; -#line 312 "tmp.rl" - } - - action r_N_4 - { -#line 58 "tmp.gmr" - cout << "N = N tt_colon tt_minus tt_number;" << endl; -#line 319 "tmp.rl" - } - - action r_N_5 - { -#line 59 "tmp.gmr" - cout << "N = N tt_percent tt_plus tt_number;" << endl; -#line 326 "tmp.rl" - } - - action r_N_6 - { -#line 60 "tmp.gmr" - cout << "N = N tt_percent tt_minus tt_number;" << endl; -#line 333 "tmp.rl" - } - - action r_N_7 - { -#line 61 "tmp.gmr" - cout << "N = N tt_dollar tt_plus tt_number;" << endl; -#line 340 "tmp.rl" - } - - action r_N_8 - { -#line 62 "tmp.gmr" - cout << "N = N tt_dollar tt_minus tt_number;" << endl; -#line 347 "tmp.rl" - } - - action r_N_9 - { -#line 63 "tmp.gmr" - cout << "N = K;" << endl; -#line 354 "tmp.rl" - } - - action r_K_0 - { -#line 64 "tmp.gmr" - cout << "K = F tt_star;" << endl; -#line 361 "tmp.rl" - } - - action r_K_1 - { -#line 65 "tmp.gmr" - cout << "K = F tt_question;" << endl; -#line 368 "tmp.rl" - } - - action r_K_2 - { -#line 66 "tmp.gmr" - cout << "K = F tt_plus;" << endl; -#line 375 "tmp.rl" - } - - action r_K_3 - { -#line 67 "tmp.gmr" - cout << "K = F;" << endl; -#line 382 "tmp.rl" - } - - action r_K_4 - { -#line 68 "tmp.gmr" - cout << "K = tt_not F tt_star;" << endl; -#line 389 "tmp.rl" - } - - action r_K_5 - { -#line 69 "tmp.gmr" - cout << "K = tt_not F tt_question;" << endl; -#line 396 "tmp.rl" - } - - action r_K_6 - { -#line 70 "tmp.gmr" - cout << "K = tt_not F tt_plus;" << endl; -#line 403 "tmp.rl" - } - - action r_K_7 - { -#line 71 "tmp.gmr" - cout << "K = tt_not F;" << endl; -#line 410 "tmp.rl" - } - - action r_F_0 - { -#line 72 "tmp.gmr" - cout << "F = tt_andFSM;" << endl; -#line 417 "tmp.rl" - } - - action r_F_1 - { -#line 73 "tmp.gmr" - cout << "F = tt_orFSM;" << endl; -#line 424 "tmp.rl" - } - - action r_F_2 - { -#line 74 "tmp.gmr" - cout << "F = tt_id;" << endl; -#line 431 "tmp.rl" - } - - action r_F_3 - { -#line 75 "tmp.gmr" - cout << "F = tt_open E tt_close;" << endl; -#line 438 "tmp.rl" - } - - main := - s0: start: ( - 23 @shift -> s1 | - 25 @shift -> s3 | - 24 @shift -> s4 | - 0 @shift -> s5 - ), - s1: ( - 20 @shift -> s54 - ), - s2: ( - (0|20) @pop2 @newM @r_M_0 @rem2 -> s54 - ), - s3: ( - (0|20) @pop1 @newM @r_M_1 @rem1 -> s54 - ), - s4: ( - 20 @pop1 @newstart @r_start_0 @rem1 -> s54 | - 25 @shift -> s2 | - 0 @shift -> s5 - ), - s5: ( - 1 @shift -> s6 - ), - s6: ( - 26 @shift -> s8 | - 27 @shift -> s9 | - 29 @shift -> s25 | - 28 @shift -> s26 | - 30 @shift -> s33 | - 17 @shift -> s35 | - 14 @shift -> s46 | - 15 @shift -> s48 | - 16 @shift -> s49 | - 0 @shift -> s50 - ), - s7: ( - (0|20) @pop4 @newA @r_A_0 @rem4 -> s54 - ), - s8: ( - 2 @shift -> s7 | - 3 @shift -> s37 | - 4 @shift -> s38 | - 5 @shift -> s39 - ), - s9: ( - (2..5|18) @pop1 @newE @r_E_3 @rem1 -> s54 | - 29 @shift -> s25 | - 30 @shift -> s33 | - 28 @shift -> s34 | - 17 @shift -> s35 | - 6 @shift -> s41 | - 14 @shift -> s46 | - 15 @shift -> s48 | - 16 @shift -> s49 | - 0 @shift -> s50 - ), - s10: ( - (0|2..9|14..18) @pop3 @newN @r_N_0 @rem3 -> s54 - ), - s11: ( - (0|2..9|14..18) @pop3 @newN @r_N_1 @rem3 -> s54 - ), - s12: ( - (0|2..9|14..18) @pop3 @newN @r_N_2 @rem3 -> s54 - ), - s13: ( - 11 @shift -> s14 - ), - s14: ( - (0|2..9|14..18) @pop4 @newN @r_N_3 @rem4 -> s54 - ), - s15: ( - 11 @shift -> s16 - ), - s16: ( - (0|2..9|14..18) @pop4 @newN @r_N_4 @rem4 -> s54 - ), - s17: ( - 11 @shift -> s18 - ), - s18: ( - (0|2..9|14..18) @pop4 @newN @r_N_5 @rem4 -> s54 - ), - s19: ( - 11 @shift -> s20 - ), - s20: ( - (0|2..9|14..18) @pop4 @newN @r_N_6 @rem4 -> s54 - ), - s21: ( - 11 @shift -> s22 - ), - s22: ( - (0|2..9|14..18) @pop4 @newN @r_N_7 @rem4 -> s54 - ), - s23: ( - 11 @shift -> s24 - ), - s24: ( - (0|2..9|14..18) @pop4 @newN @r_N_8 @rem4 -> s54 - ), - s25: ( - (0|2..9|14..18) @pop1 @newN @r_N_9 @rem1 -> s54 - ), - s26: ( - (0|2..6|14..18) @pop1 @newT @r_T_2 @rem1 -> s54 | - 7 @shift -> s27 | - 8 @shift -> s28 | - 9 @shift -> s29 - ), - s27: ( - 0 @shift -> s10 | - 10 @shift -> s13 | - 5 @shift -> s15 - ), - s28: ( - 0 @shift -> s11 | - 10 @shift -> s17 | - 5 @shift -> s19 - ), - s29: ( - 0 @shift -> s12 | - 10 @shift -> s21 | - 5 @shift -> s23 - ), - s30: ( - (0|2..9|14..18) @pop2 @newK @r_K_0 @rem2 -> s54 - ), - s31: ( - (0|2..9|14..18) @pop2 @newK @r_K_1 @rem2 -> s54 - ), - s32: ( - (0|2..9|14..18) @pop2 @newK @r_K_2 @rem2 -> s54 - ), - s33: ( - (0|2..9|14..18) @pop1 @newK @r_K_3 @rem1 -> s54 | - 12 @shift -> s30 | - 13 @shift -> s31 | - 10 @shift -> s32 - ), - s34: ( - (0|2..6|14..18) @pop2 @newT @r_T_1 @rem2 -> s54 | - 7 @shift -> s27 | - 8 @shift -> s28 | - 9 @shift -> s29 - ), - s35: ( - 27 @shift -> s9 | - 29 @shift -> s25 | - 28 @shift -> s26 | - 30 @shift -> s33 | - 17 @shift -> s35 | - 26 @shift -> s40 | - 14 @shift -> s46 | - 15 @shift -> s48 | - 16 @shift -> s49 | - 0 @shift -> s50 - ), - s36: ( - (0|2..10|12..18) @pop3 @newF @r_F_3 @rem3 -> s54 - ), - s37: ( - 29 @shift -> s25 | - 28 @shift -> s26 | - 30 @shift -> s33 | - 17 @shift -> s35 | - 14 @shift -> s46 | - 15 @shift -> s48 | - 16 @shift -> s49 | - 0 @shift -> s50 | - 27 @shift -> s53 - ), - s38: ( - 29 @shift -> s25 | - 28 @shift -> s26 | - 30 @shift -> s33 | - 17 @shift -> s35 | - 14 @shift -> s46 | - 15 @shift -> s48 | - 16 @shift -> s49 | - 0 @shift -> s50 | - 27 @shift -> s52 - ), - s39: ( - 29 @shift -> s25 | - 28 @shift -> s26 | - 30 @shift -> s33 | - 17 @shift -> s35 | - 27 @shift -> s42 | - 14 @shift -> s46 | - 15 @shift -> s48 | - 16 @shift -> s49 | - 0 @shift -> s50 - ), - s40: ( - 18 @shift -> s36 | - 3 @shift -> s37 | - 4 @shift -> s38 | - 5 @shift -> s39 - ), - s41: ( - 29 @shift -> s25 | - 30 @shift -> s33 | - 17 @shift -> s35 | - 14 @shift -> s46 | - 15 @shift -> s48 | - 16 @shift -> s49 | - 0 @shift -> s50 | - 28 @shift -> s51 - ), - s42: ( - (2..5|18) @pop3 @newE @r_E_2 @rem3 -> s54 | - 29 @shift -> s25 | - 30 @shift -> s33 | - 28 @shift -> s34 | - 17 @shift -> s35 | - 6 @shift -> s41 | - 14 @shift -> s46 | - 15 @shift -> s48 | - 16 @shift -> s49 | - 0 @shift -> s50 - ), - s43: ( - (0|2..9|14..18) @pop3 @newK @r_K_4 @rem3 -> s54 - ), - s44: ( - (0|2..9|14..18) @pop3 @newK @r_K_5 @rem3 -> s54 - ), - s45: ( - (0|2..9|14..18) @pop3 @newK @r_K_6 @rem3 -> s54 - ), - s46: ( - 17 @shift -> s35 | - 30 @shift -> s47 | - 15 @shift -> s48 | - 16 @shift -> s49 | - 0 @shift -> s50 - ), - s47: ( - (0|2..9|14..18) @pop2 @newK @r_K_7 @rem2 -> s54 | - 12 @shift -> s43 | - 13 @shift -> s44 | - 10 @shift -> s45 - ), - s48: ( - (0|2..10|12..18) @pop1 @newF @r_F_0 @rem1 -> s54 - ), - s49: ( - (0|2..10|12..18) @pop1 @newF @r_F_1 @rem1 -> s54 - ), - s50: ( - (0|2..10|12..18) @pop1 @newF @r_F_2 @rem1 -> s54 - ), - s51: ( - (0|2..6|14..18) @pop3 @newT @r_T_0 @rem3 -> s54 | - 7 @shift -> s27 | - 8 @shift -> s28 | - 9 @shift -> s29 - ), - s52: ( - (2..5|18) @pop3 @newE @r_E_1 @rem3 -> s54 | - 29 @shift -> s25 | - 30 @shift -> s33 | - 28 @shift -> s34 | - 17 @shift -> s35 | - 6 @shift -> s41 | - 14 @shift -> s46 | - 15 @shift -> s48 | - 16 @shift -> s49 | - 0 @shift -> s50 - ), - s53: ( - (2..5|18) @pop3 @newE @r_E_0 @rem3 -> s54 | - 29 @shift -> s25 | - 30 @shift -> s33 | - 28 @shift -> s34 | - 17 @shift -> s35 | - 6 @shift -> s41 | - 14 @shift -> s46 | - 15 @shift -> s48 | - 16 @shift -> s49 | - 0 @shift -> s50 - ), - s54: ( - '' -> final - ) - ; -}%% - -%% write data; - -Parser::Parser( ) -{ } - -int Parser::init( ) -{ - %% write init; - return 0; -} - -int Parser::execute( LangEl *_data, int _len ) -{ - LangEl *p = _data; - LangEl *pe = _data+_len; - %% write exec; - if ( cs == Parser_error ) - return -1; - if ( cs >= Parser_first_final ) - return 1; - return 0; -} - -int Parser::finish( ) -{ - if ( cs == Parser_error ) - return -1; - if ( cs >= Parser_first_final ) - return 1; - return 0; -} - -void Parser::parseLangEl( LangEl *lel ) -{ - redLel = 0; - execute( lel, 1 ); - while ( redLel != 0 ) { - execute( redLel, 1 ); - redLel = 0; - execute( lel, 1 ); - } -} - -int Parser::pop( int n ) -{ - for ( int i = n-1; i >= 0; i-- ) - rhs[i] = pop(); - return rhs[0]->state; -} - -void Parser::rem( LangEl *lel, int n ) -{ - for ( int i = n-1; i >= 0; i-- ) - delete rhs[i]; -} - -int Parser::done( ) -{ - Token *eof = new Token; - eof->type = l__eof; - eof->line = 0; - eof->pos = 0; - parseLangEl( eof ); - return finish(); -} - -#line 77 "tmp.gmr" - - -#include <assert.h> -#define MAX_TOKS 10000 - -struct TokList -{ - TokList() : numToks(0) { } - - void append( int type ); - int parse(); - - Token *toks[MAX_TOKS]; - int numToks; -}; - -void TokList::append( int type ) -{ - assert( numToks < MAX_TOKS ); - toks[numToks] = new Token; - toks[numToks]->type = type; - numToks += 1; -} - -int TokList::parse() -{ - Parser parser; - parser.init(); - for ( int i = 0; i < numToks; i++ ) - parser.parseLangEl( toks[i] ); - return parser.done(); -} - -void test0() -{ - TokList tokList; - tokList.append( tt_id ); - tokList.append( tt_equals ); - tokList.append( tt_id ); - tokList.append( tt_star ); - tokList.append( tt_minus ); - tokList.append( tt_andFSM ); - tokList.append( tt_dot ); - tokList.append( tt_id ); - tokList.append( tt_semi ); - tokList.append( tt_id ); - tokList.append( tt_equals ); - tokList.append( tt_id ); - tokList.append( tt_andFSM ); - tokList.append( tt_id ); - tokList.append( tt_semi ); - cout << tokList.parse() << endl; -} - -void test1() -{ - TokList tokList; - tokList.append( tt_id ); - tokList.append( tt_equals ); - tokList.append( tt_open ); - tokList.append( tt_orFSM ); - tokList.append( tt_minus ); - tokList.append( tt_andFSM ); - tokList.append( tt_close ); - tokList.append( tt_star ); - tokList.append( tt_semi ); - cout << tokList.parse() << endl; -} -void test2() -{ - TokList tokList; - tokList.append( tt_id ); - tokList.append( tt_equals ); - tokList.append( tt_not ); - tokList.append( tt_open ); - tokList.append( tt_orFSM ); - tokList.append( tt_minus ); - tokList.append( tt_not ); - tokList.append( tt_andFSM ); - tokList.append( tt_close ); - tokList.append( tt_star ); - tokList.append( tt_semi ); - cout << tokList.parse() << endl; -} -void test3() -{ - TokList tokList; - tokList.append( tt_id ); - tokList.append( tt_equals ); - tokList.append( tt_id ); - tokList.append( tt_colon ); - tokList.append( tt_minus ); - tokList.append( tt_number ); - tokList.append( tt_id ); - tokList.append( tt_colon ); - tokList.append( tt_id ); - tokList.append( tt_id ); - tokList.append( tt_dollar ); - tokList.append( tt_plus ); - tokList.append( tt_number ); - tokList.append( tt_id ); - tokList.append( tt_percent ); - tokList.append( tt_minus ); - tokList.append( tt_number ); - tokList.append( tt_semi ); - cout << tokList.parse() << endl; -} -void test4() -{ - TokList tokList; - tokList.append( tt_id ); - tokList.append( tt_equals ); - tokList.append( tt_id ); - tokList.append( tt_pipe ); - tokList.append( tt_id ); - tokList.append( tt_amp ); - tokList.append( tt_id ); - tokList.append( tt_minus ); - tokList.append( tt_id ); - tokList.append( tt_semi ); - cout << tokList.parse() << endl; -} - -int main() -{ - test0(); - test1(); - test2(); - test3(); - test4(); -} - -##### OUTPUT ##### -F = tt_id; -K = F tt_star; -N = K; -T = N; -E = T; -F = tt_andFSM; -K = F; -N = K; -T = N; -F = tt_id; -K = F; -N = K; -T = T tt_dot N; -E = E tt_minus T; -A = tt_id tt_equals E tt_semi; -M = A; -F = tt_id; -K = F; -N = K; -T = N; -F = tt_andFSM; -K = F; -N = K; -T = T N; -F = tt_id; -K = F; -N = K; -T = T N; -E = T; -A = tt_id tt_equals E tt_semi; -M = M A; -start = M; -1 -F = tt_orFSM; -K = F; -N = K; -T = N; -E = T; -F = tt_andFSM; -K = F; -N = K; -T = N; -E = E tt_minus T; -F = tt_open E tt_close; -K = F tt_star; -N = K; -T = N; -E = T; -A = tt_id tt_equals E tt_semi; -M = A; -start = M; -1 -F = tt_orFSM; -K = F; -N = K; -T = N; -E = T; -F = tt_andFSM; -K = tt_not F; -N = K; -T = N; -E = E tt_minus T; -F = tt_open E tt_close; -K = tt_not F tt_star; -N = K; -T = N; -E = T; -A = tt_id tt_equals E tt_semi; -M = A; -start = M; -1 -F = tt_id; -K = F; -N = K; -N = N tt_colon tt_minus tt_number; -T = N; -F = tt_id; -K = F; -N = K; -N = N tt_colon tt_id; -T = T N; -F = tt_id; -K = F; -N = K; -N = N tt_dollar tt_plus tt_number; -T = T N; -F = tt_id; -K = F; -N = K; -N = N tt_percent tt_minus tt_number; -T = T N; -E = T; -A = tt_id tt_equals E tt_semi; -M = A; -start = M; -1 -F = tt_id; -K = F; -N = K; -T = N; -E = T; -F = tt_id; -K = F; -N = K; -T = N; -E = E tt_pipe T; -F = tt_id; -K = F; -N = K; -T = N; -E = E tt_amp T; -F = tt_id; -K = F; -N = K; -T = N; -E = E tt_minus T; -A = tt_id tt_equals E tt_semi; -M = A; -start = M; -1 |