package main import "fmt" var cs int; var blen int; var buffer [1024] byte; var _erract_trans_keys [] byte = [] byte { 1, 0, 3, 3, 2, 2, 4, 4, 4, 4, 5, 5, 0, 0, 1, 0, 0 } var _erract_char_class [] int8 = [] int8 { 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, 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, 0 } var _erract_index_offsets [] int8 = [] int8 { 0, 0, 1, 2, 3, 4, 5, 6, 0 } var _erract_indices [] int8 = [] int8 { 1, 3, 4, 5, 6, 8, 0 } var _erract_index_defaults [] int8 = [] int8 { 0, 0, 2, 2, 2, 2, 7, 9, 0 } var _erract_trans_cond_spaces [] int8 = [] int8 { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0 } var _erract_cond_targs [] int8 = [] int8 { 0, 2, 0, 3, 4, 5, 6, 0, 7, 0, 0 } var _erract_cond_actions [] int8 = [] int8 { 2, 0, 4, 0, 0, 0, 0, 6, 0, 0, 0 } var _erract_eof_actions [] int8 = [] int8 { 0, 1, 3, 3, 3, 3, 5, 0, 0 } var _erract_nfa_targs [] int8 = [] int8 { 0, 0 } var _erract_nfa_offsets [] int8 = [] int8 { 0, 0, 0, 0, 0, 0, 0, 0, 0 } var _erract_nfa_push_actions [] int8 = [] int8 { 0, 0 } var _erract_nfa_pop_trans [] int8 = [] int8 { 0, 0 } var erract_start int = 1 var erract_first_final int = 7 var erract_error int = 0 var erract_en_main int = 1 func prepare() { { cs = int(erract_start); } } func exec(data string) { var p int = 0 var pe int = len(data) var eof int = pe { var _trans uint = 0 var _have uint = 0 var _cont uint = 1 var _keys int var _inds int for _cont == 1 { { if cs == 0 { _cont = 0; } _have = 0; if p == pe { { if p == eof { { if _have == 0 { { switch _erract_eof_actions[cs] { case 1 : {fmt.Print( "err_start\n" );} {fmt.Print( "eof_start\n" );} {fmt.Print( "err_all\n" );} {fmt.Print( "eof_all\n" );} break; case 3 : {fmt.Print( "err_all\n" );} {fmt.Print( "err_middle\n" );} {fmt.Print( "eof_all\n" );} {fmt.Print( "eof_middle\n" );} break; case 5 : {fmt.Print( "err_all\n" );} {fmt.Print( "err_out\n" );} {fmt.Print( "eof_all\n" );} {fmt.Print( "eof_out\n" );} break; } } } } } if _have == 0 { _cont = 0; } } } if _cont == 1 { { if _have == 0 { { _keys = int((cs<<1) ); _inds = int(_erract_index_offsets[cs] ); switch { case ( data[p ]) <= 111 && ( data[p ]) >= 10 : { var _ic int = int(_erract_char_class[int(( data[p ]) )- 10]) switch { case _ic <= int(_erract_trans_keys[_keys+1 ])&& _ic >= int(_erract_trans_keys[_keys ]): _trans = uint(_erract_indices[_inds + int(( _ic - int(_erract_trans_keys[_keys ])) )]); default: _trans = uint(_erract_index_defaults[cs]); } } default: { _trans = uint(_erract_index_defaults[cs]); } } } } if _cont == 1 { { cs = int(_erract_cond_targs[_trans]); switch _erract_cond_actions[_trans] { case 2 : {fmt.Print( "err_start\n" );} {fmt.Print( "err_all\n" );} break; case 4 : {fmt.Print( "err_all\n" );} {fmt.Print( "err_middle\n" );} break; case 6 : {fmt.Print( "err_all\n" );} {fmt.Print( "err_out\n" );} break; } if cs == 0 { _cont = 0; } if _cont == 1 { p += 1; } } } } } } } } } func finish() { if cs >= erract_first_final { fmt.Println("ACCEPT") } else { fmt.Println("FAIL") } } var inp []string = []string { "", "h", "x", "he", "hx", "hel", "hex", "hell", "helx", "hello", "hellx", "hello\n", "hellox", }; func main() { for _, data := range inp { prepare() exec(data) finish() } }