1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
package main
import "fmt"
var cs int;
var blen int;
var buffer [1024] byte;
var _rangei_trans_keys [] byte = [] byte { 1, 0, 1, 2, 1, 2, 0, 3, 1, 5, 1, 4, 0, 5, 1, 0, 0 }
var _rangei_char_class [] int8 = [] int8 { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 3, 3, 3, 4, 4, 4, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 5, 5, 5, 0 }
var _rangei_index_offsets [] int8 = [] int8 { 0, 0, 2, 4, 8, 13, 17, 23, 0 }
var _rangei_indices [] int8 = [] int8 { 0, 0, 2, 2, 3, 3, 3, 3, 4, 4, 1, 4, 4, 5, 1, 5, 5, 6, 6, 6, 6, 6, 6, 0 }
var _rangei_index_defaults [] int8 = [] int8 { 0, 1, 1, 1, 1, 1, 1, 1, 0 }
var _rangei_trans_cond_spaces [] int8 = [] int8 { -1, -1, -1, -1, -1, -1, -1, 0 }
var _rangei_cond_targs [] int8 = [] int8 { 2, 0, 3, 4, 5, 6, 7, 0 }
var _rangei_cond_actions [] int8 = [] int8 { 0, 0, 0, 0, 0, 0, 0, 0 }
var _rangei_nfa_targs [] int8 = [] int8 { 0, 0 }
var _rangei_nfa_offsets [] int8 = [] int8 { 0, 0, 0, 0, 0, 0, 0, 0, 0 }
var _rangei_nfa_push_actions [] int8 = [] int8 { 0, 0 }
var _rangei_nfa_pop_trans [] int8 = [] int8 { 0, 0 }
var rangei_start int = 1
var rangei_first_final int = 7
var rangei_error int = 0
var rangei_en_main int = 1
func prepare() {
{
cs = int(rangei_start);
}
}
func exec(data string) {
var p int = 0
var pe int = len(data)
{
var _trans int = 0
var _keys int
var _inds int
if p == pe {
goto _test_eof;
}
if cs == 0 {
goto _out;
}
_resume :
_keys = int((cs<<1) );
_inds = int(_rangei_index_offsets[cs] );
switch {
case ( data[p ]) <= 125 && ( data[p ]) >= 60 :
{
var _ic int = int(_rangei_char_class[int(( data[p ]) )- 60])
switch {
case _ic <= int(_rangei_trans_keys[_keys+1 ])&& _ic >= int(_rangei_trans_keys[_keys ]):
_trans = int(_rangei_indices[_inds + int(( _ic - int(_rangei_trans_keys[_keys ])) )]);
default:
_trans = int(_rangei_index_defaults[cs]);
}
}
default:
{
_trans = int(_rangei_index_defaults[cs]);
}
}
goto _match_cond;
_match_cond :
cs = int(_rangei_cond_targs[_trans]);
if cs == 0 {
goto _out;
}
p += 1;
if p != pe {
goto _resume;
}
_test_eof :
{}
_out :
{}
}
}
func finish() {
if cs >= rangei_first_final {
fmt.Println("ACCEPT")
} else {
fmt.Println("FAIL")
}
}
var inp []string = []string {
"AaBbAa",
"Aa`bAa",
"AaB@Aa",
"AaBbMa",
"AaBbma",
};
func main() {
for _, data := range inp {
prepare()
exec(data)
finish()
}
}
|