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 }