diff options
author | Adrian Thurston <thurston@colm.net> | 2019-09-09 09:34:14 -0600 |
---|---|---|
committer | Adrian Thurston <thurston@colm.net> | 2019-09-09 09:34:14 -0600 |
commit | 2d8e9c3f5c0417d6237c945c50f92bf8d28b32d5 (patch) | |
tree | e463c784309e402c1c7bb89247596165b07ad8d1 /test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in | |
parent | c0323a27ad612db4fa7d3d5c25c3e9611bcf874b (diff) | |
parent | c171cdda894fa59515d1bdc1e00cace185366e7f (diff) | |
download | colm-2d8e9c3f5c0417d6237c945c50f92bf8d28b32d5.tar.gz |
mega-merge of pruned test code
Diffstat (limited to 'test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in')
-rw-r--r-- | test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in b/test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in new file mode 100644 index 00000000..190197f7 --- /dev/null +++ b/test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in @@ -0,0 +1,260 @@ +host( "working/element1.rl", 1 ) @{/* + * @@LANG: c++ + */ + + #include <iostream> + using namespace std; + + struct LangEl + { + int key; + const char *name; + }; + + struct Fsm + { + 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( ); + + }; + + + +}@ +array s8 _Fsm_key_offsets( 0, 3 ) = { 0, 0, 1, 3, 0 }; + +array int _Fsm_trans_keys( 0, 3 ) = { 1, 2, 3, 0 }; + +array s8 _Fsm_single_lengths( 0, 2 ) = { 0, 1, 2, 0, 0 }; + +array s8 _Fsm_range_lengths( 0, 0 ) = { 0, 0, 0, 0, 0 }; + +array s8 _Fsm_index_offsets( 0, 5 ) = { 0, 0, 2, 5, 0 }; + +array s8 _Fsm_trans_cond_spaces( -1, 0 ) = { -1, -1, -1, -1, -1, -1, 0 }; + +array s8 _Fsm_trans_offsets( 0, 5 ) = { 0, 1, 2, 3, 4, 5, 0 }; + +array s8 _Fsm_trans_lengths( 0, 1 ) = { 1, 1, 1, 1, 1, 1, 0 }; + +array s8 _Fsm_cond_keys( 0, 0 ) = { 0, 0, 0, 0, 0, 0, 0 }; + +array s8 _Fsm_cond_targs( 0, 3 ) = { 2, 0, 2, 3, 0, 0, 0 }; + +array s8 _Fsm_cond_actions( 0, 1 ) = { 1, 0, 1, 1, 0, 0, 0 }; + +array s8 _Fsm_eof_actions( 0, 2 ) = { 0, 0, 0, 2, 0 }; + +array s8 _Fsm_nfa_targs( 0, 0 ) = { 0, 0 }; + +array s8 _Fsm_nfa_offsets( 0, 0 ) = { 0, 0, 0, 0, 0 }; + +array s8 _Fsm_nfa_push_actions( 0, 0 ) = { 0, 0 }; + +array s8 _Fsm_nfa_pop_trans( 0, 0 ) = { 0, 0 }; + +value int Fsm_start = 1; +value int Fsm_first_final = 3; +value int Fsm_error = 0; + +value int Fsm_en_main = 1; + +host( "working/element1.rl", 54 ) @{ + + int Fsm::init( ) + { + }@ + { + cs = cast(int)Fsm_start; + } + host( "working/element1.rl", 58 ) @{ + return 0; + } + + int Fsm::execute( LangEl *data, int len ) + { + LangEl *p = data; + LangEl *pe = data + len; + LangEl *eof_marker = pe; + }@ + { + int _klen; + index int _keys; + index s8 _ckeys; + int _cpc; + uint _trans; + uint _cond = 0; + uint _have = 0; + uint _cont = 1; + while ( _cont == 1 ) { + + if ( cs == 0 ) + _cont = 0; + _have = 0; + if ( p == pe ) { + if ( p == host( "-", 1 ) ={ eof_marker}= ) + { + if ( _have == 0 ) { + switch ( _Fsm_eof_actions[cs] ) { + case 2 { + host( "working/element1.rl", 50 ) ${cout << "accept" << endl;}$ + } + } + } + } + + if ( _have == 0 ) + _cont = 0; + } + if ( _cont == 1 ) { + if ( _have == 0 ) { + _keys = offset( _Fsm_trans_keys, _Fsm_key_offsets[cs] ); + _trans = cast(uint)_Fsm_index_offsets[cs]; + _have = 0; + + _klen = cast(int)_Fsm_single_lengths[cs]; + if ( _klen > 0 ) { + index int _lower; + index int _mid; + index int _upper; + _lower = _keys; + _upper = _keys + _klen - 1; + while ( _upper >= _lower && _have == 0 ) { + _mid = _lower + ((_upper-_lower) >> 1); + if ( host( "-", 1 ) ={p->key}= < deref( _Fsm_trans_keys, _mid ) ) + _upper = _mid - 1; + else if ( host( "-", 1 ) ={p->key}= > deref( _Fsm_trans_keys, _mid ) ) + _lower = _mid + 1; + else { + _trans += cast(uint)(_mid - _keys); + _have = 1; + } + } + if ( _have == 0 ) { + _keys += _klen; + _trans += cast(uint)_klen; + } + } + + if ( _have == 0 ) { + _klen = cast(int)_Fsm_range_lengths[cs]; + if ( _klen > 0 ) { + index int _lower; + index int _mid; + index int _upper; + _lower = _keys; + _upper = _keys + (_klen<<1) - 2; + while ( _have == 0 && _lower <= _upper ) { + _mid = _lower + (((_upper-_lower) >> 1) & ~1); + if ( host( "-", 1 ) ={p->key}= < deref( _Fsm_trans_keys, _mid ) ) + _upper = _mid - 2; + else if ( host( "-", 1 ) ={p->key}= > deref( _Fsm_trans_keys, _mid + 1 ) ) + _lower = _mid + 2; + else { + _trans += cast(uint)((_mid - _keys)>>1); + _have = 1; + } + } + if ( _have == 0 ) + _trans += cast(uint)_klen; + } + } + + _ckeys = offset( _Fsm_cond_keys, _Fsm_trans_offsets[_trans] ); + _klen = cast(int)_Fsm_trans_lengths[_trans]; + _cond = cast(uint)_Fsm_trans_offsets[_trans]; + _have = 0; + + _cpc = 0; + { + index s8 _lower; + index s8 _mid; + index s8 _upper; + _lower = _ckeys; + _upper = _ckeys + _klen - 1; + while ( _have == 0 && _lower <= _upper ) { + _mid = _lower + ((_upper-_lower) >> 1); + if ( _cpc < cast(int)deref( _Fsm_cond_keys, _mid ) ) + _upper = _mid - 1; + else if ( _cpc > cast(int)deref( _Fsm_cond_keys, _mid ) ) + _lower = _mid + 1; + else { + _cond += cast(uint)(_mid - _ckeys); + _have = 1; + } + } + if ( _have == 0 ) { + cs = 0; + _cont = 0; + } + } + } + if ( _cont == 1 ) { + cs = cast(int)_Fsm_cond_targs[_cond]; + + switch ( _Fsm_cond_actions[_cond] ) { + case 1 { + host( "working/element1.rl", 49 ) ${cout << p->name << endl;}$ + } + } + + if ( cs == 0 ) + _cont = 0; + if ( _cont == 1 ) + p += 1; + + }} + } + } + host( "working/element1.rl", 67 ) @{ + + if ( cs == Fsm_error ) + return -1; + if ( cs >= Fsm_first_final ) + return 1; + return 0; + } + + int Fsm::finish( ) + { + if ( cs == Fsm_error ) + return -1; + if ( cs >= Fsm_first_final ) + return 1; + return 0; + } + + int main( ) + { + static Fsm fsm; + static LangEl lel[] = { + {1, "one"}, + {2, "two-a"}, + {2, "two-b"}, + {2, "two-c"}, + {3, "three"} + }; + + fsm.init(); + fsm.execute( lel, 5 ); + fsm.finish(); + return 0; + } + +}@
\ No newline at end of file |