github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/logql/log/pattern/lexer.rl.go (about) 1 2 //line pkg/logql/log/pattern/lexer.rl:1 3 package pattern 4 5 6 //line pkg/logql/log/pattern/lexer.rl.go:7 7 var _pattern_actions []byte = []byte{ 8 0, 1, 0, 1, 1, 1, 2, 1, 3, 9 1, 4, 1, 5, 1, 6, 10 } 11 12 var _pattern_key_offsets []byte = []byte{ 13 0, 8, 9, 14 } 15 16 var _pattern_trans_keys []byte = []byte{ 17 62, 95, 48, 57, 65, 90, 97, 122, 18 60, 95, 65, 90, 97, 122, 19 } 20 21 var _pattern_single_lengths []byte = []byte{ 22 2, 1, 1, 23 } 24 25 var _pattern_range_lengths []byte = []byte{ 26 3, 0, 2, 27 } 28 29 var _pattern_index_offsets []byte = []byte{ 30 0, 6, 8, 31 } 32 33 var _pattern_trans_targs []byte = []byte{ 34 1, 0, 0, 0, 0, 1, 2, 1, 35 0, 0, 0, 1, 1, 1, 36 } 37 38 var _pattern_trans_actions []byte = []byte{ 39 7, 0, 0, 0, 0, 13, 5, 9, 40 0, 0, 0, 11, 13, 11, 41 } 42 43 var _pattern_to_state_actions []byte = []byte{ 44 0, 1, 0, 45 } 46 47 var _pattern_from_state_actions []byte = []byte{ 48 0, 3, 0, 49 } 50 51 var _pattern_eof_trans []byte = []byte{ 52 13, 0, 14, 53 } 54 55 const pattern_start int = 1 56 const pattern_first_final int = 1 57 const pattern_error int = -1 58 59 const pattern_en_main int = 1 60 61 62 //line pkg/logql/log/pattern/lexer.rl:14 63 64 65 const LEXER_ERROR = 0 66 67 68 //line pkg/logql/log/pattern/lexer.rl:21 69 70 71 func (lex *lexer) Lex(out *exprSymType) int { 72 eof := lex.pe 73 tok := 0 74 75 76 //line pkg/logql/log/pattern/lexer.rl.go:77 77 { 78 var _klen int 79 var _trans int 80 var _acts int 81 var _nacts uint 82 var _keys int 83 if ( lex.p) == ( lex.pe) { 84 goto _test_eof 85 } 86 _resume: 87 _acts = int(_pattern_from_state_actions[ lex.cs]) 88 _nacts = uint(_pattern_actions[_acts]); _acts++ 89 for ; _nacts > 0; _nacts-- { 90 _acts++ 91 switch _pattern_actions[_acts - 1] { 92 case 1: 93 //line NONE:1 94 lex.ts = ( lex.p) 95 96 //line pkg/logql/log/pattern/lexer.rl.go:97 97 } 98 } 99 100 _keys = int(_pattern_key_offsets[ lex.cs]) 101 _trans = int(_pattern_index_offsets[ lex.cs]) 102 103 _klen = int(_pattern_single_lengths[ lex.cs]) 104 if _klen > 0 { 105 _lower := int(_keys) 106 var _mid int 107 _upper := int(_keys + _klen - 1) 108 for { 109 if _upper < _lower { 110 break 111 } 112 113 _mid = _lower + ((_upper - _lower) >> 1) 114 switch { 115 case lex.data[( lex.p)] < _pattern_trans_keys[_mid]: 116 _upper = _mid - 1 117 case lex.data[( lex.p)] > _pattern_trans_keys[_mid]: 118 _lower = _mid + 1 119 default: 120 _trans += int(_mid - int(_keys)) 121 goto _match 122 } 123 } 124 _keys += _klen 125 _trans += _klen 126 } 127 128 _klen = int(_pattern_range_lengths[ lex.cs]) 129 if _klen > 0 { 130 _lower := int(_keys) 131 var _mid int 132 _upper := int(_keys + (_klen << 1) - 2) 133 for { 134 if _upper < _lower { 135 break 136 } 137 138 _mid = _lower + (((_upper - _lower) >> 1) & ^1) 139 switch { 140 case lex.data[( lex.p)] < _pattern_trans_keys[_mid]: 141 _upper = _mid - 2 142 case lex.data[( lex.p)] > _pattern_trans_keys[_mid + 1]: 143 _lower = _mid + 2 144 default: 145 _trans += int((_mid - int(_keys)) >> 1) 146 goto _match 147 } 148 } 149 _trans += _klen 150 } 151 152 _match: 153 _eof_trans: 154 lex.cs = int(_pattern_trans_targs[_trans]) 155 156 if _pattern_trans_actions[_trans] == 0 { 157 goto _again 158 } 159 160 _acts = int(_pattern_trans_actions[_trans]) 161 _nacts = uint(_pattern_actions[_acts]); _acts++ 162 for ; _nacts > 0; _nacts-- { 163 _acts++ 164 switch _pattern_actions[_acts-1] { 165 case 2: 166 //line NONE:1 167 lex.te = ( lex.p)+1 168 169 case 3: 170 //line pkg/logql/log/pattern/lexer.rl:30 171 lex.te = ( lex.p)+1 172 { tok = lex.handle(lex.identifier(out)); ( lex.p)++; goto _out 173 } 174 case 4: 175 //line pkg/logql/log/pattern/lexer.rl:31 176 lex.te = ( lex.p)+1 177 { tok = lex.handle(lex.literal(out)); ( lex.p)++; goto _out 178 } 179 case 5: 180 //line pkg/logql/log/pattern/lexer.rl:31 181 lex.te = ( lex.p) 182 ( lex.p)-- 183 { tok = lex.handle(lex.literal(out)); ( lex.p)++; goto _out 184 } 185 case 6: 186 //line pkg/logql/log/pattern/lexer.rl:31 187 ( lex.p) = ( lex.te) - 1 188 { tok = lex.handle(lex.literal(out)); ( lex.p)++; goto _out 189 } 190 //line pkg/logql/log/pattern/lexer.rl.go:191 191 } 192 } 193 194 _again: 195 _acts = int(_pattern_to_state_actions[ lex.cs]) 196 _nacts = uint(_pattern_actions[_acts]); _acts++ 197 for ; _nacts > 0; _nacts-- { 198 _acts++ 199 switch _pattern_actions[_acts-1] { 200 case 0: 201 //line NONE:1 202 lex.ts = 0 203 204 //line pkg/logql/log/pattern/lexer.rl.go:205 205 } 206 } 207 208 ( lex.p)++ 209 if ( lex.p) != ( lex.pe) { 210 goto _resume 211 } 212 _test_eof: {} 213 if ( lex.p) == eof { 214 if _pattern_eof_trans[ lex.cs] > 0 { 215 _trans = int(_pattern_eof_trans[ lex.cs] - 1) 216 goto _eof_trans 217 } 218 } 219 220 _out: {} 221 } 222 223 //line pkg/logql/log/pattern/lexer.rl:35 224 225 226 return tok; 227 } 228 229 230 func (lex *lexer) init() { 231 232 //line pkg/logql/log/pattern/lexer.rl.go:233 233 { 234 lex.cs = pattern_start 235 lex.ts = 0 236 lex.te = 0 237 lex.act = 0 238 } 239 240 //line pkg/logql/log/pattern/lexer.rl:43 241 }