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 %%