host( "working/genrep1.rl", 1 ) @{/* * @@LANG: c */ #include #include #include #include #include #include const char s[4096]; struct nfa_stack { void *data; unsigned long sz; }; struct nfa_bp_rec { long state; const char *p; long popTrans; long q_2; }; }@ array unsigned char _genrep_trans_keys( 0, 7 ) = { u(1), u(0), u(3), u(3), u(2), u(2), u(4), u(4), u(4), u(4), u(5), u(5), u(0), u(0), u(1), u(0), u(0), u(0), u(1), u(0), u(1), u(0), u(7), u(7), u(3), u(3), u(2), u(2), u(6), u(6), u(2), u(2), u(1), u(0), u(1), u(0), u(0) }; array s8 _genrep_char_class( 0, 7 ) = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 4, 1, 1, 5, 1, 1, 6, 1, 7, 0 }; array s8 _genrep_index_offsets( 0, 12 ) = { 0, 0, 1, 2, 3, 4, 5, 6, 6, 7, 7, 7, 8, 9, 10, 11, 12, 12, 0 }; array s8 _genrep_indicies( 0, 12 ) = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0 }; array s8 _genrep_index_defaults( 0, 13 ) = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 1, 0 }; array s8 _genrep_trans_cond_spaces( -1, 0 ) = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0 }; array s8 _genrep_cond_targs( 0, 17 ) = { 2, 0, 3, 4, 5, 6, 7, 9, 12, 13, 14, 15, 16, 17, 0 }; array s8 _genrep_cond_actions( 0, 8 ) = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0 }; array s8 _genrep_nfa_targs( 0, 11 ) = { 0, 1, 8, 1, 8, 3, 11, 8, 10, 0 }; array s8 _genrep_nfa_offsets( 0, 5 ) = { 0, 0, 0, 0, 0, 0, 1, 3, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; array s8 _genrep_nfa_push_actions( 0, 1 ) = { 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 }; array s8 _genrep_nfa_pop_trans( 0, 7 ) = { 0, 0, 4, 0, 4, 0, 7, 6, 5, 0 }; value int genrep_start = 1; value int genrep_first_final = 17; value int genrep_error = 0; value int genrep_en_main = 1; host( "working/genrep1.rl", 71 ) @{ int test( const char *p ) { int len = strlen( p ) + 1; const char *pe = p + len; int cs; struct nfa_bp_rec *nfa_bp = (struct nfa_bp_rec*) s; long nfa_len = 0; long nfa_count = 0; long q_2 = 0; printf( "testing: %s\n", p ); }@ { cs = cast(int)genrep_start; nfa_len = 0; } { int _trans = 0; index unsigned char _keys; index s8 _inds; entry { if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; label _resume { if ( _genrep_nfa_offsets[cs] ) { int alt = 0; int new_recs = _genrep_nfa_targs[cast(int)_genrep_nfa_offsets[cs]]; while ( alt < new_recs ) { nfa_bp[nfa_len].state = _genrep_nfa_targs[cast(int)_genrep_nfa_offsets[cs] + 1 + alt]; nfa_bp[nfa_len].p = p; nfa_bp[nfa_len].popTrans = cast(long)_genrep_nfa_offsets[cs] + 1 + alt; switch ( _genrep_nfa_push_actions[cast(int)_genrep_nfa_offsets[cs] + 1 + alt] ) { case 1 { host( "working/genrep1.rl", 33 ) ${ nfa_bp[nfa_len].q_2 = q_2; }$ } } nfa_len += 1; alt += 1; } } _keys = offset( _genrep_trans_keys, (cs<<1) ); _inds = offset( _genrep_indicies, _genrep_index_offsets[cs] ); if ( ( deref( data, p )) <= 116 && ( deref( data, p )) >= 32 ) { int _ic = cast(int)_genrep_char_class[cast(int)( deref( data, p )) - 32]; if ( _ic <= cast(int)deref( _genrep_trans_keys, _keys+1 ) && _ic >= cast(int)deref( _genrep_trans_keys, _keys ) ) _trans = cast(int)deref( _genrep_indicies, _inds + cast(int)( _ic - cast(int)deref( _genrep_trans_keys, _keys ) ) ); else _trans = cast(int)_genrep_index_defaults[cs]; } else { _trans = cast(int)_genrep_index_defaults[cs]; } goto _match_cond; } label _match_cond { cs = cast(int)_genrep_cond_targs[_trans]; if ( _genrep_cond_actions[_trans] == 0 ) goto _again; switch ( _genrep_cond_actions[_trans] ) { case 8 { host( "working/genrep1.rl", 66 ) ${ printf( "------ MATCH\n" ); }$ } } } label _again { if ( cs == 0 ) goto _out; p+= 1; if ( p != pe ) goto _resume; } label _test_eof { {} } label _out { {} } } if ( nfa_len > 0 ) { nfa_count += 1; nfa_len -= 1; p = nfa_bp[nfa_len].p; int _pop_test = 1; switch ( _genrep_nfa_pop_trans[nfa_bp[nfa_len].popTrans] ) { case 4 { _pop_test = host( "working/genrep1.rl", 38 ) ={ ({ q_2 = nfa_bp[nfa_len].q_2; 1; }) }=; if ( !_pop_test ) break; _pop_test = host( "working/genrep1.rl", 43 ) ={ ({ q_2 = 0; 1; }) }=; } case 5 { _pop_test = host( "working/genrep1.rl", 38 ) ={ ({ q_2 = nfa_bp[nfa_len].q_2; 1; }) }=; if ( !_pop_test ) break; _pop_test = host( "working/genrep1.rl", 47 ) ={ ({ 1; }) }=; } case 6 { _pop_test = host( "working/genrep1.rl", 38 ) ={ ({ q_2 = nfa_bp[nfa_len].q_2; 1; }) }=; if ( !_pop_test ) break; _pop_test = host( "working/genrep1.rl", 51 ) ={ ({ ++q_2 < 10; }) }=; } case 7 { _pop_test = host( "working/genrep1.rl", 38 ) ={ ({ q_2 = nfa_bp[nfa_len].q_2; 1; }) }=; if ( !_pop_test ) break; _pop_test = host( "working/genrep1.rl", 55 ) ={ ({ ++q_2 >= 10; }) }=; } } if ( _pop_test ) { cs = nfa_bp[nfa_len].state; goto _resume; } goto _out; } } host( "working/genrep1.rl", 91 ) @{ return 0; } int main() { test( "hello there" ); test( "hello there" ); test( "hello there" ); test( "hello there" ); return 0; } }@