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 <- !.