github.com/apex/up@v1.7.1/internal/logs/parser/grammar.peg (about)

     1  package parser
     2  
     3  import "github.com/apex/up/internal/logs/parser/ast"
     4  
     5  type parser Peg {
     6    stack []ast.Node
     7    number string
     8  }
     9  
    10  Query <- _ Expr _ EOF
    11  
    12  PrimaryExpr
    13    <- Numbers Unit _         { p.AddNumber(text) }
    14    / Numbers _               { p.AddNumber("")   }
    15    / Severity                { p.AddLevel(text)  }
    16    / Stage                   { p.AddStage(text)  }
    17    / Id                      { p.AddField(text)  }
    18    / String                  { p.AddString(text) }
    19    / UnquotedString          { p.AddString(text) }
    20    / LPAR Expr RPAR          { p.AddExpr()       }
    21  
    22  TupleExpr
    23    <- LPAR
    24      Expr                    { p.AddTupleValue() }
    25      (COMMA
    26        Expr                  { p.AddTupleValue() }
    27      )*
    28    RPAR
    29  
    30  InExpr
    31    <- IN                     { p.AddTuple() }
    32    TupleExpr                 { p.AddBinary(ast.IN) }
    33  
    34  NotInExpr
    35    <- NOT IN                 { p.AddTuple() }
    36    TupleExpr                 { p.AddBinary(ast.IN); p.AddUnary(ast.LNOT) }
    37  
    38  PostfixExpr
    39    <- PrimaryExpr (
    40        DOT Id                { p.AddMember(text)    }
    41      / LBRK Number _ RBRK    { p.AddSubscript(text) }
    42      / InExpr
    43      / NotInExpr
    44    )*
    45  
    46  UnaryExpr
    47    <- PostfixExpr
    48    / BANG RelationalExpr     { p.AddUnary(ast.NOT) }
    49  
    50  RelationalExpr
    51    <- UnaryExpr (
    52        GE UnaryExpr          { p.AddBinary(ast.GE) }
    53      / GT UnaryExpr          { p.AddBinary(ast.GT) }
    54      / LE UnaryExpr          { p.AddBinary(ast.LE) }
    55      / LT UnaryExpr          { p.AddBinary(ast.LT) }
    56    )*
    57  
    58  EqualityExpr
    59    <- RelationalExpr (
    60        EQEQ RelationalExpr     { p.AddBinary(ast.EQ)   }
    61      / NE RelationalExpr       { p.AddBinary(ast.NE)   }
    62      / EQ RelationalExpr       { p.AddBinary(ast.EQ)   }
    63      / CONTAINS RelationalExpr { p.AddBinaryContains() }
    64    )*
    65  
    66  LogicalAndExpr <-
    67    EqualityExpr (
    68        AND EqualityExpr      { p.AddBinary(ast.AND) }
    69      / ANDAND EqualityExpr   { p.AddBinary(ast.AND) }
    70      / _ EqualityExpr        { p.AddBinary(ast.AND) }
    71    )*
    72  
    73  LogicalOrExpr <-
    74    LogicalAndExpr (
    75        OR LogicalAndExpr     { p.AddBinary(ast.OR) }
    76      / OROR LogicalAndExpr   { p.AddBinary(ast.OR) }
    77    )*
    78  
    79  LowNotExpr <-
    80      LogicalOrExpr
    81    / NOT LogicalOrExpr       { p.AddUnary(ast.LNOT) }
    82  
    83  Expr <- LowNotExpr
    84  
    85  #
    86  # Strings
    87  #
    88  
    89  String
    90    <- ["] < StringChar* > ["] _
    91  
    92  StringChar
    93    <- Escape / ![\"\n\\] .
    94  
    95  UnquotedString
    96    <- !Keyword < UnquotedStringStartChar UnquotedStringChar* > _
    97  
    98  UnquotedStringStartChar
    99    <- [a-z] / [A-Z] / [/_]
   100  
   101  UnquotedStringChar
   102    <- [a-z] / [A-Z] / [0-9] / [/_]
   103  
   104  Escape
   105    <- SimpleEscape
   106    / OctalEscape
   107    / HexEscape
   108    / UniversalCharacter
   109  
   110  SimpleEscape
   111    <- '\\' ['\"?\\abfnrtv]
   112  
   113  OctalEscape
   114    <- '\\' [0-7][0-7]?[0-7]?
   115  
   116  HexEscape
   117    <- '\\x' HexDigit+
   118  
   119  UniversalCharacter
   120     <- '\\u' HexQuad
   121      / '\\U' HexQuad HexQuad
   122  
   123  HexQuad
   124    <- HexDigit HexDigit HexDigit HexDigit
   125  
   126  HexDigit
   127    <- [a-f] / [A-F] / [0-9]
   128  
   129  #
   130  # Numeric
   131  #
   132  
   133  Numbers
   134    <- Number { p.SetNumber(text) }
   135  
   136  Number
   137    <- < Float >
   138    / < Integer >
   139  
   140  Integer
   141    <- [0-9]*
   142  
   143  Float
   144    <- Fraction Exponent?
   145    / [0-9]+ Exponent
   146  
   147  Fraction
   148    <- [0-9]* '.' [0-9]+
   149    / [0-9]+ '.'
   150  
   151  Exponent
   152    <- [eE][+\-]? [0-9]+
   153  
   154  #
   155  # Stages
   156  #
   157  
   158  Stage
   159    <- DEVELOPMENT
   160    / STAGING
   161    / PRODUCTION
   162  
   163  DEVELOPMENT <- < 'development' > !IdChar _
   164  STAGING     <- < 'staging' > !IdChar _
   165  PRODUCTION  <- < 'production' > !IdChar _
   166  
   167  #
   168  # Units
   169  #
   170  
   171  Unit
   172    <- Bytes
   173    / Duration
   174  
   175  Duration
   176    <- S
   177    / MS
   178  
   179  S  <- < 's'  > !IdChar _
   180  MS <- < 'ms' > !IdChar _
   181  
   182  
   183  Bytes
   184    <- B
   185    / KB
   186    / MB
   187    / GB
   188  
   189  B  <- < 'b'  > !IdChar _
   190  KB <- < 'kb' > !IdChar _
   191  MB <- < 'mb' > !IdChar _
   192  GB <- < 'gb' > !IdChar _
   193  
   194  #
   195  # Identifiers
   196  #
   197  
   198  Id
   199    <- !Keyword < IdCharNoDigit IdChar* > _
   200  
   201  IdChar
   202    <- [a-z] / [A-Z] / [0-9] / [_]
   203  
   204  IdCharNoDigit
   205    <- [a-z] / [A-Z] / [_]
   206  
   207  #
   208  # Severity
   209  #
   210  
   211  Severity
   212    <- DEBUG
   213    / INFO
   214    / WARN
   215    / ERROR
   216    / FATAL
   217  
   218  #
   219  # Keywords
   220  #
   221  
   222  IN       <- 'in'       !IdChar _
   223  OR       <- 'or'       !IdChar _
   224  AND      <- 'and'      !IdChar _
   225  NOT      <- 'not'      !IdChar _
   226  CONTAINS <- 'contains' !IdChar _
   227  
   228  DEBUG  <- < 'debug' > !IdChar  _
   229  INFO   <- < 'info'  > !IdChar  _
   230  WARN   <- < 'warn'  > !IdChar  _
   231  ERROR  <- < 'error' > !IdChar  _
   232  FATAL  <- < 'fatal' > !IdChar  _
   233  
   234  Keyword
   235    <- (
   236        'production'
   237      / 'staging'
   238      / 'development'
   239      / 'or'
   240      / 'and'
   241      / 'not'
   242      / 'contains'
   243      / 'debug'
   244      / 'info'
   245      / 'warn'
   246      / 'error'
   247      / 'fatal'
   248      / 'in'
   249      / 'gb'
   250      / 'mb'
   251      / 'kb'
   252      / 'b'
   253      / 'ms'
   254      / 's'
   255    ) !IdChar
   256  
   257  #
   258  # Punctuators
   259  #
   260  
   261  EQ      <-  '='       _
   262  LBRK    <-  '['       _
   263  RBRK    <-  ']'       _
   264  LPAR    <-  '('       _
   265  RPAR    <-  ')'       _
   266  DOT     <-  '.'       _
   267  BANG    <-  '!'  ![=] _
   268  LT      <-  '<'  ![=] _
   269  GT      <-  '>'  ![=] _
   270  LE      <-  '<='      _
   271  EQEQ    <-  '=='      _
   272  GE      <-  '>='      _
   273  NE      <-  '!='      _
   274  ANDAND  <-  '&&'      _
   275  OROR    <-  '||'      _
   276  COMMA   <-  ','       _
   277  
   278  #
   279  # Whitespace
   280  #
   281  
   282  _
   283    <- Whitespace*
   284  
   285  Whitespace
   286    <- ' ' / '\t' / EOL
   287  
   288  EOL
   289    <- '\r\n' / '\n' / '\r'
   290  
   291  EOF
   292    <- !.