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  }