github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/logentry/logql/expr.y (about)

     1  %{
     2  package logql
     3  
     4  import (
     5    "github.com/prometheus/prometheus/model/labels"
     6  )
     7  %}
     8  
     9  %union{
    10    Expr         Expr
    11    Filter       labels.MatchType
    12    Selector     []*labels.Matcher
    13    Matchers     []*labels.Matcher
    14    Matcher      *labels.Matcher
    15    str          string
    16    int          int64
    17  }
    18  
    19  %start root
    20  
    21  %type <Expr>         expr
    22  %type <Filter>       filter
    23  %type <Selector>     selector
    24  %type <Matchers>     matchers
    25  %type <Matcher>      matcher
    26  
    27  %token <str>  IDENTIFIER STRING
    28  %token <val>  MATCHERS LABELS EQ NEQ RE NRE OPEN_BRACE CLOSE_BRACE COMMA DOT PIPE_MATCH PIPE_EXACT
    29  
    30  %%
    31  
    32  root: expr { exprlex.(*lexer).expr = $1 };
    33  
    34  expr:
    35        selector                         { $$ = &matchersExpr{ matchers: $1 } }
    36      | expr filter STRING               { $$ = NewFilterExpr( $1, $2, $3 ) }
    37      | expr filter error
    38      | expr error
    39      ;
    40  
    41  filter:
    42        PIPE_MATCH                       { $$ = labels.MatchRegexp }
    43      | PIPE_EXACT                       { $$ = labels.MatchEqual }
    44      | NRE                              { $$ = labels.MatchNotRegexp }
    45      | NEQ                              { $$ = labels.MatchNotEqual }
    46      ;
    47  
    48  selector:
    49        OPEN_BRACE matchers CLOSE_BRACE  { $$ = $2 }
    50      | OPEN_BRACE matchers error        { $$ = $2 }
    51      | OPEN_BRACE error CLOSE_BRACE     { }
    52      ;
    53  
    54  matchers:
    55        matcher                          { $$ = []*labels.Matcher{ $1 } }
    56      | matchers COMMA matcher           { $$ = append($1, $3) }
    57      ;
    58  
    59  matcher:
    60        IDENTIFIER EQ STRING             { $$ = mustNewMatcher(labels.MatchEqual, $1, $3) }
    61      | IDENTIFIER NEQ STRING            { $$ = mustNewMatcher(labels.MatchNotEqual, $1, $3) }
    62      | IDENTIFIER RE STRING             { $$ = mustNewMatcher(labels.MatchRegexp, $1, $3) }
    63      | IDENTIFIER NRE STRING            { $$ = mustNewMatcher(labels.MatchNotRegexp, $1, $3) }
    64      ;
    65  %%