From 0f5ce2e8bb3debc613dd190dee7438b589ccf5a9 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Fri, 21 May 2021 18:12:27 +0300 Subject: [PATCH] [#3] policy: allow to use brackets in filters Signed-off-by: Evgenii Stratonikov --- pkg/policy/doc.go | 5 +---- pkg/policy/parser/Query.g4 | 1 + pkg/policy/parser/Query.interp | Bin 4174 -> 4346 bytes pkg/policy/parser/query_parser.go | Bin 59362 -> 60564 bytes pkg/policy/query.go | 4 ++++ pkg/policy/query_test.go | 24 ++++++++++++++++++++++++ 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/pkg/policy/doc.go b/pkg/policy/doc.go index 10394fa..4e10a1b 100644 --- a/pkg/policy/doc.go +++ b/pkg/policy/doc.go @@ -2,10 +2,7 @@ // ANTLRv4 grammar is provided in `parser/Query.g4` and `parser/QueryLexer.g4`. // // Current limitations: -// 1. Grouping filter expressions in parenthesis is not supported right now. -// Requiring this will make query too verbose, making it optional makes -// our grammar not LL(1). This can be supported in future. -// 2. Filters must be defined before they are used. +// 1. Filters must be defined before they are used. // This requirement may be relaxed in future. // // Example query: diff --git a/pkg/policy/parser/Query.g4 b/pkg/policy/parser/Query.g4 index 0cad576..fc74c6f 100644 --- a/pkg/policy/parser/Query.g4 +++ b/pkg/policy/parser/Query.g4 @@ -24,6 +24,7 @@ clause: CLAUSE_SAME | CLAUSE_DISTINCT; // nodes from distinct buckets filterExpr: F1 = filterExpr Op = AND_OP F2 = filterExpr | F1 = filterExpr Op = OR_OP F2 = filterExpr + | '(' Inner = filterExpr ')' | expr ; diff --git a/pkg/policy/parser/Query.interp b/pkg/policy/parser/Query.interp index 63f74d9a5f7db8596c48f2d0c52c4bffcbc36599..9512ecb628462c54d2fb7c893a4d88015cbb1ffc 100644 GIT binary patch literal 4346 zcmaKv-A)@x5QXpiDSXH7ii>I60xC!Tgoq?Pbn>&5xy*<356g~c+=)&Wt$B?SozE+3q2f%a7;p=c^e0p06&#db3(A{|Hy>5FVbk z&0gLQX?+e4&5!l&ZWlg(`fBrIvu!@_9NOMIJvQO%?UrWG|NrrjmbTd(>_405wDZ@^ z_Nk%!cb}Sv@U40N@B71-aQmgX-}!iT5<DhonTW}XUmR4>Ss(YNHu@H8Hd%AA_60FmEBtY9WNSv& zWCCYoO#;@8tXcTQI+6xMldR|#lPpiJNfwF4^!yP-7L)c|f+n`%BY<(hPmwh_F1|Lf z9Kb`in&L!E-x>aUNb3z?<1B)cT6n9+cgU= zyQ8?4a4M~ZiCC;LxyEcLwQo`hwvR+${l+M7Zf*+j2C*9k8rPJrC@V|dXHC?r4JNgW zC0;x@Z;W)8-8V)A>JC&2PcmnwKBt;BMJ2Qa1`%cE6M>8q)1BTk{6SC!;`8fFe*aXK zyj50TgYu;UZT2OC&kwYa% zMeTa4s(3gPQg)^o{i#X_VaXF?AyRFNIt#OyO4KjhbyliHC~b?fUKN7GIUGHn-Rz>T zhP9CrPj*qYo!)36FFOzvU!0<4hLxJJhh<)h)0v06ZkoqaSFpNG5JyK~hACFjLB$_R zlST46WDg51idAYEQqGWCP@(4<1#-mFMix+|mx)yz+>9rzEX3`MMyOJs9`c%6h(I#0 zLw1c6F#GELvdLu1L zpLq*|nPJ$Y;*QE5Q6yVBo0DzfU ztuHTN&!AA)>BVut)PGkZ=`N7f7-<5$*K!s>G{unVOn`~X0d#~d0eUBQt%n?&F(}$-4UX)!KkzV6O^$>@PuLK z-U_Dzp|m;R8rID#jI{O$torhB@!`*n!yF= zdz*Mm5B~Z}JeaB2KI*LK?`D{^|{i6?t5q z%P=5TP!&aq$YTNIt*@tUYhop-((?+6SB^^VivSX&97=bnJ60-OI1cs^<0_;*R`_I* z9mOL@@h)HJQFkWlxi9kR2Di94{ESL}3@>!38{*^{4F!4yB~Ff_LEl?Bs21rSb!#!8 z{0Om6m8cs8)t?np4bVqL7FB8NgHtuD9^Z}XtKrH@7)(RhjxVIye}wYLLn}4zIjA=1 zlvTdYJ+-xPOE?2ATS-%I^T3I=x^2^ OT6<>vLz@hU`1dDLSRRG| delta 1342 zcmZXU!EO^V6h)O$GAy7`k%ExAX`*ggIzscDOlFK&@DHdH zHJ4ty6!77G{(k1dpZR&!?nAY>oLRVDysgZKyTxX<4PO`cmD`82`u1Iq%(hvhkRC(C zBU@mxluf`v^}Fz+UfoRi4k?qVT*M)4QZGO$8%hNzW#=BQo_v~*9dk%N`s;}d^q#YO zLIVa=4|3{4z<}YLtF<;wim(W=7?=&n3BlVT8(?4sWqbsgmFWl#3>nA`36pGrsnnE* zytoBVSiT*j{AoX66-0FnImdKtJ~gd&(j&k#rO=^k76Lq}s&*u@_VftR;Z`RFs}^Kk zXimjINefYe5`CNOT&Qw<2x$tFq zQ73od+wx82Ec{-+7!k}BOlR#FMIoJs8B$Q09=r;0jFKu(GNqu>Qq;6D5!ajWLF08i zEPZ69O0=KcCZ>AeFQh$PjXE<~R0UN_j?B?*#8u&_#UM z@<8OJp&XR(()LA+ltj!#sl;gXMdO3UH>*U75a5M`#5YXT@7z1n?zTyHXYO~-`Mz_` zz4vVY`Xzj6Dtx0mq-8AcSjg7uH>J&7+H^8$Q&{p9Z@ILg)0uDs-3UipOjpdGVH*JF11(C3Fv@X&ZVNYs{tStc&t%{N{Rt9a^1FyXD z9}wXc9w6k0u=&ekYTpI}yWqht{IMPBA{V|X(4fbW8V&XR7g-lFDH&}_8ajAjMp8i- zR`?Sc^~|U=sW-ZYBQHf;N-U_1?1ztoPZ_3?b5&-uj`ip|d<|*g1MP)_|ff#~QefFJs(+JF!OD4!KCirR9}4 zTYBOqTSnyKmRkG~f412#JPW1l9Q7=6%W~G#oM-{X&V(dCmPlgpQ9_b`kw{@NEiD&y zHmuiIv(T%0vdQOeMb53*72Zp90!j>In0Q3z+-~WTYf4X=K?tNlF!a#aV%g)!~} zlOhhzd_ZzoRd_PahpQCuF#r!2&kDyZxEy)1gKn@V00)%FX2zM-IHNnwF5RVM@1j2(N(3kSU;!9_t z1Q778R9X_j6vG}>k_Zb9!U6|p0e?A^0!&zt0ujf^KM4p6Ylc_~O46IdEw~2R0L96% zI9*Q3hxhs35=LB^w+iP|SqXAZP?2pat6o@KKFcG*re%wt!%$X9az1RBJ5~hW139-j z`PoJa-me*4=BDwn3o-=AR}aO z&}|uRBfeBA$vxtcJ*U^Q?~JqJED;7f`_D^UqS$~+ZiL(AE#fMiFlwW*s>WtHrue$^ z1X4$k2QdE>K>|z=^X^oge4}nhp^)!0`|`z;eT5Td@o3%zLNynb#ib>gqTX{$=|WeG zc6Xg$qP$P!i{-9M6MOSTX`$U8)RB2M;r-qf3dNK&$9q%VBjE}{x3Dn6_KW9g=}GS* zI#L*sYbu;u6;)in7P{j*54LaJv+Xsyo3R%7?`hLY(RW2NzNgIQzx%c(@9FWdMq7@5 z>;2o?7_aKtfCTpzJB#_GW2FoV9av52(Txe8aWjofE?t@1lrnT(@7b`cvv}xea`(x6 zUwlRBL9re`FZ$(^{Ujtq1e@PP-eg4i03ZK478;7GrN9w5hd4v8u z{W3l3Uq$YFQ<`H_en^C}bb06izW*L-iDx)ZU8ncA*VDs+_Jou5fzILj&?b63&_Y9l z5AcRS+BR@D;mFGT2&dE@M=g>80km(>rRh?whT&bEUQ5f*ycncqUvKt4Jac7{=4Qwm zPSZD|aXK{I0phQRQ=wLBf3wc}XSlj5iitVX^gLC+RZAa_t_ZobbxV>SjeZu!bfha| z9n?Kx(9^Lr*0z@%KW)(Rn?Hf)?TP(#b@IH|e*H%yB2b;&zuWh&g)G<_DLlDd6N1_% z_lE@iFmc}7_*G7i@NQDg`Zd&WWQjNWeaC_b?~sqgyfr^}84+9fWY>QiMLum)`!(D0 zKAEaBs1yI3-M;s!W@n_v)%!1KcGkOp|AdAvcRbvzWpFXZYiZy?s-~wee|SgXaQ;*Z J3WLU=@jrdjp5_1m delta 2407 zcmZWpU2GIp6wb`fc4ww6t=j4$wmWU1?KZ2-o!!})K_C)-j1rTY8ZBrE&!vIlPeM?; zK&y!+BH>gYG-^rfgHM!9YSfef@qt7Wh{hL6mP8X0i9Be0B#7U+v%BnUli9s9-#zF1 zzH{!+?DfPS*Ak24it4!GgyN`lHPKT2wf38aU&>p;&RZS^CmM=!@B<)1zS8|fpK2P^ zrF9!_-r@<{p*>nQX_xZA4{3cGVg-Gw^=vQ=QOH|(1bC_glK4vqnVPrghPHkU&p}wY zOraz##iG9C0PE~Y_Tb}CGSlY39b6UQqrhRa$zIHSm+T)g4di1gdZcy4#xN)b5Qt&2 zTFF*VhGCzrxMa60XgQsid5)(83Hd!5;@>p3{8v%6R@JdNZo+|dR@=Dc8ZA!ouE?5X9HkXk|wywGrlSO$VzA6TW6-LnV8@l3y2anL%N$~3lO|`JHY1lNmvh4$C}YP)yHrYeAn^dOE<~}t zpv!=diAMV#rhGW#r9`lUwZj`DezeEy!TimKf+?9yR^xLpLPQxas1yHH#OG~*pa&q{ z;`w0m@nZ{h70zZHV*?f)M?QHCpsa<187tSdq3NU0SRlTm!&hrE%W&mQ-QZ&pM0InG z(ZfK1S145r=Pof4K!oM$`V0ioa`Or0v&~@`aGGP50(=Ju@j%6AqbkKocBIuv0FeMe z?0`#wOQywZfFdyI=6iw2;usM&A`t9g;HwJ3fasTWXPIkhvLbB3^)$6Y+7PQi6ew`H zN%jX73Y$xmmmV_sZipUS9*iRi4?}4=RN*3BN_QNnEoyCPgbfN@nyWRq^cv13)ik)` z>WvKPI*+_WZI8s-PO{goFIPQrgba5eQMDDhVnV_Dq-IGrjsXY1cqrE^Z)n6ut1Oeb z>CNrs1Be?QJCtWRF`^ROU3vBM7&I7{g(531DN%&RQRq8y5ar2*XVa`$U8V!FWvE&3 z1WVS5a1k?%-BO1nAX~MnO`PsDwuocFN6)usaq-FH%kS3>Sw#|b}be`_xd zkG~&U2NfmUGVyVO)=i$GeC$nX+UYT+K%brHr?+SNHQ&pb^y216S^meFXV_F|y|of&pX*xgui5j@{+`_0DlxSh0 zpax#JvT)2q^xROEPW}0fY75FP?o*ub*y3<2jhy>gaRFp$X?ZtwEgGa<7@?z!ABMkQ z@C?mHJL%$3Z@BHsc&p~rzOMdy*i=PHa_+Bu2^aS&`&8l5<)