github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/logql/log/pattern/lexer.rl (about)

     1  package pattern
     2  
     3  %%{
     4      machine pattern;
     5      write data;
     6      access lex.;
     7      variable p lex.p;
     8      variable pe lex.pe;
     9      prepush {
    10          if len(lex.stack) <= lex.top {
    11              lex.stack = append(lex.stack, 0)
    12          }
    13      }
    14  }%%
    15  
    16  const LEXER_ERROR = 0
    17  
    18  %%{
    19          identifier = '<' (alpha| '_') (alnum | '_' )* '>';
    20          literal = any;
    21  }%%
    22  
    23  func (lex *lexer) Lex(out *exprSymType) int {
    24      eof := lex.pe
    25      tok := 0
    26  
    27      %%{
    28  
    29          main := |*
    30              identifier => { tok = lex.handle(lex.identifier(out)); fbreak; };
    31              literal => { tok = lex.handle(lex.literal(out)); fbreak; };
    32          *|;
    33  
    34          write exec;
    35      }%%
    36  
    37      return tok;
    38  }
    39  
    40  
    41  func (lex *lexer) init() {
    42      %% write init;
    43  }