From ed11c516efbcba85bf63f2cc2fbfa30b1b61f184 Mon Sep 17 00:00:00 2001 From: Sidhant Aggarwal Date: Wed, 11 Feb 2026 17:40:47 +0530 Subject: [PATCH 1/2] fixes for default field --- .../antlr/BooleanExpressionBaseListener.java | 2 +- .../parser/antlr/BooleanExpressionLexer.java | 2 +- .../antlr/BooleanExpressionListener.java | 2 +- .../parser/antlr/BooleanExpressionParser.java | 365 ++++++++++-------- .../parser/antlr/BooleanFilterListener.java | 8 +- src/main/java/resources/BooleanExpression.g4 | 6 +- .../BooleanExpressionEvaluatorTest.java | 13 + 7 files changed, 217 insertions(+), 181 deletions(-) diff --git a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionBaseListener.java b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionBaseListener.java index 6336796..c788b3a 100644 --- a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionBaseListener.java +++ b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionBaseListener.java @@ -1,4 +1,4 @@ -// Generated from /Users/sidhantaggarwal/bool-parser-java/src/main/java/resources/BooleanExpression.g4 by ANTLR 4.13.2 +// Generated from BooleanExpression.g4 by ANTLR 4.13.2 package com.github.sidhant92.boolparser.parser.antlr; import org.antlr.v4.runtime.ParserRuleContext; diff --git a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionLexer.java b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionLexer.java index 6b10f3f..030d338 100644 --- a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionLexer.java +++ b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionLexer.java @@ -1,4 +1,4 @@ -// Generated from /Users/sidhantaggarwal/bool-parser-java/src/main/java/resources/BooleanExpression.g4 by ANTLR 4.13.2 +// Generated from BooleanExpression.g4 by ANTLR 4.13.2 package com.github.sidhant92.boolparser.parser.antlr; import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; diff --git a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionListener.java b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionListener.java index 9015db0..7a0d046 100644 --- a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionListener.java +++ b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionListener.java @@ -1,4 +1,4 @@ -// Generated from /Users/sidhantaggarwal/bool-parser-java/src/main/java/resources/BooleanExpression.g4 by ANTLR 4.13.2 +// Generated from BooleanExpression.g4 by ANTLR 4.13.2 package com.github.sidhant92.boolparser.parser.antlr; import org.antlr.v4.runtime.tree.ParseTreeListener; diff --git a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionParser.java b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionParser.java index 9ce4e3c..8a7291a 100644 --- a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionParser.java +++ b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanExpressionParser.java @@ -1,4 +1,4 @@ -// Generated from /Users/sidhantaggarwal/bool-parser-java/src/main/java/resources/BooleanExpression.g4 by ANTLR 4.13.2 +// Generated from BooleanExpression.g4 by ANTLR 4.13.2 package com.github.sidhant92.boolparser.parser.antlr; import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; @@ -405,9 +405,9 @@ private ExpressionContext expression(int _p) throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(53); + setState(59); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) { case 1: { _localctx = new ParentExpressionContext(_localctx); @@ -469,15 +469,21 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new ToExpressionContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - { - setState(38); - ((ToExpressionContext)_localctx).field = match(FIELD); - } setState(39); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FIELD) { + { + setState(38); + ((ToExpressionContext)_localctx).field = match(FIELD); + } + } + + setState(41); ((ToExpressionContext)_localctx).lower = numericTypes(); - setState(40); + setState(42); match(TO); - setState(41); + setState(43); ((ToExpressionContext)_localctx).upper = numericTypes(); } break; @@ -486,23 +492,29 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new InExpressionContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - { - setState(43); - ((InExpressionContext)_localctx).field = match(FIELD); + setState(46); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FIELD) { + { + setState(45); + ((InExpressionContext)_localctx).field = match(FIELD); + } } - setState(45); + + setState(49); _errHandler.sync(this); _la = _input.LA(1); if (_la==NOT) { { - setState(44); + setState(48); ((InExpressionContext)_localctx).not = match(NOT); } } - setState(47); + setState(51); match(IN); - setState(48); + setState(52); ((InExpressionContext)_localctx).data = wordlist(); } break; @@ -511,39 +523,45 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new ArrayExpressionContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - { - setState(49); - ((ArrayExpressionContext)_localctx).field = match(FIELD); + setState(54); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FIELD) { + { + setState(53); + ((ArrayExpressionContext)_localctx).field = match(FIELD); + } } - setState(50); + + setState(56); ((ArrayExpressionContext)_localctx).op = arrayOperators(); - setState(51); + setState(57); ((ArrayExpressionContext)_localctx).data = wordlist(); } break; } _ctx.stop = _input.LT(-1); - setState(83); + setState(89); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,3,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,6,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(81); + setState(87); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { case 1: { _localctx = new ComparatorExpressionContext(new ExpressionContext(_parentctx, _parentState)); ((ComparatorExpressionContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(55); + setState(61); if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); - setState(56); + setState(62); ((ComparatorExpressionContext)_localctx).op = comparator(); - setState(57); + setState(63); ((ComparatorExpressionContext)_localctx).right = expression(15); } break; @@ -552,11 +570,11 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new ArithmeticExpressionContext(new ExpressionContext(_parentctx, _parentState)); ((ArithmeticExpressionContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(59); + setState(65); if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); - setState(60); + setState(66); ((ArithmeticExpressionContext)_localctx).op = match(EXPONENT); - setState(61); + setState(67); ((ArithmeticExpressionContext)_localctx).right = expression(13); } break; @@ -565,11 +583,11 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new ArithmeticExpressionContext(new ExpressionContext(_parentctx, _parentState)); ((ArithmeticExpressionContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(62); + setState(68); if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); - setState(63); + setState(69); ((ArithmeticExpressionContext)_localctx).op = match(DIVIDE); - setState(64); + setState(70); ((ArithmeticExpressionContext)_localctx).right = expression(12); } break; @@ -578,11 +596,11 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new ArithmeticExpressionContext(new ExpressionContext(_parentctx, _parentState)); ((ArithmeticExpressionContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(65); + setState(71); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); - setState(66); + setState(72); ((ArithmeticExpressionContext)_localctx).op = match(MULTIPLY); - setState(67); + setState(73); ((ArithmeticExpressionContext)_localctx).right = expression(11); } break; @@ -591,11 +609,11 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new ArithmeticExpressionContext(new ExpressionContext(_parentctx, _parentState)); ((ArithmeticExpressionContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(68); + setState(74); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(69); + setState(75); ((ArithmeticExpressionContext)_localctx).op = match(MODULUS); - setState(70); + setState(76); ((ArithmeticExpressionContext)_localctx).right = expression(10); } break; @@ -604,11 +622,11 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new ArithmeticExpressionContext(new ExpressionContext(_parentctx, _parentState)); ((ArithmeticExpressionContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(71); + setState(77); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(72); + setState(78); ((ArithmeticExpressionContext)_localctx).op = match(ADD); - setState(73); + setState(79); ((ArithmeticExpressionContext)_localctx).right = expression(9); } break; @@ -617,11 +635,11 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new ArithmeticExpressionContext(new ExpressionContext(_parentctx, _parentState)); ((ArithmeticExpressionContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(74); + setState(80); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(75); + setState(81); ((ArithmeticExpressionContext)_localctx).op = match(SUBTRACT); - setState(76); + setState(82); ((ArithmeticExpressionContext)_localctx).right = expression(8); } break; @@ -630,20 +648,20 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new BinaryExpressionContext(new ExpressionContext(_parentctx, _parentState)); ((BinaryExpressionContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(77); + setState(83); if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); - setState(78); + setState(84); ((BinaryExpressionContext)_localctx).op = binary(); - setState(79); + setState(85); ((BinaryExpressionContext)_localctx).right = expression(6); } break; } } } - setState(85); + setState(91); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,3,_ctx); + _alt = getInterpreter().adaptivePredict(_input,6,_ctx); } } } @@ -687,7 +705,7 @@ public final ComparatorContext comparator() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(86); + setState(92); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 8455716864L) != 0)) ) { _errHandler.recoverInline(this); @@ -739,7 +757,7 @@ public final ArithmeticOperatorContext arithmeticOperator() throws RecognitionEx try { enterOuterAlt(_localctx, 1); { - setState(88); + setState(94); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 132120576L) != 0)) ) { _errHandler.recoverInline(this); @@ -795,7 +813,7 @@ public final ArithmeticFunctionContext arithmeticFunction() throws RecognitionEx try { enterOuterAlt(_localctx, 1); { - setState(90); + setState(96); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 2095104L) != 0)) ) { _errHandler.recoverInline(this); @@ -856,87 +874,87 @@ public final WordlistContext wordlist() throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(92); + setState(98); match(LPAREN); - setState(96); + setState(102); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,4,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(93); + setState(99); match(WS); } } } - setState(98); + setState(104); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,4,_ctx); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); } - setState(99); + setState(105); ((WordlistContext)_localctx).first = expression(0); - setState(103); + setState(109); _errHandler.sync(this); _la = _input.LA(1); while (_la==WS) { { { - setState(100); + setState(106); match(WS); } } - setState(105); + setState(111); _errHandler.sync(this); _la = _input.LA(1); } - setState(122); + setState(128); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__0) { { { - setState(106); + setState(112); match(T__0); - setState(110); + setState(116); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,6,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,9,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(107); + setState(113); match(WS); } } } - setState(112); + setState(118); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,6,_ctx); + _alt = getInterpreter().adaptivePredict(_input,9,_ctx); } - setState(113); + setState(119); ((WordlistContext)_localctx).rest = expression(0); - setState(117); + setState(123); _errHandler.sync(this); _la = _input.LA(1); while (_la==WS) { { { - setState(114); + setState(120); match(WS); } } - setState(119); + setState(125); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(124); + setState(130); _errHandler.sync(this); _la = _input.LA(1); } - setState(125); + setState(131); match(RPAREN); } } @@ -976,7 +994,7 @@ public final ArrayOperatorsContext arrayOperators() throws RecognitionException try { enterOuterAlt(_localctx, 1); { - setState(127); + setState(133); _la = _input.LA(1); if ( !(_la==CONTAINS_ALL || _la==CONTAINS_ANY) ) { _errHandler.recoverInline(this); @@ -1024,7 +1042,7 @@ public final NumericTypesContext numericTypes() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(129); + setState(135); _la = _input.LA(1); if ( !(_la==DECIMAL || _la==INTEGER) ) { _errHandler.recoverInline(this); @@ -1077,62 +1095,62 @@ public final TypesContext types() throws RecognitionException { TypesContext _localctx = new TypesContext(_ctx, getState()); enterRule(_localctx, 16, RULE_types); try { - setState(140); + setState(146); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(131); + setState(137); match(INTEGER); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(132); + setState(138); match(DECIMAL); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(133); + setState(139); match(APP_VERSION); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(134); + setState(140); bool(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(135); + setState(141); match(WORD); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(136); + setState(142); match(FIELD); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(137); + setState(143); match(DATE); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(138); + setState(144); match(DATETIME); } break; @@ -1179,7 +1197,7 @@ public final BinaryContext binary() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(142); + setState(148); _la = _input.LA(1); if ( !(_la==AND || _la==OR) ) { _errHandler.recoverInline(this); @@ -1227,7 +1245,7 @@ public final BoolContext bool() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(144); + setState(150); _la = _input.LA(1); if ( !(_la==TRUE || _la==FALSE) ) { _errHandler.recoverInline(this); @@ -1280,96 +1298,101 @@ private boolean expression_sempred(ExpressionContext _localctx, int predIndex) { } public static final String _serializedATN = - "\u0004\u0001/\u0093\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001/\u0099\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0001\u0000\u0001\u0000\u0001"+ "\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001.\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u00016\b"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001(\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001/\b\u0001\u0001"+ + "\u0001\u0003\u00012\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ + "\u00017\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001<\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0005\u0001R\b\u0001\n\u0001\f\u0001U\t"+ - "\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001"+ - "\u0004\u0001\u0005\u0001\u0005\u0005\u0005_\b\u0005\n\u0005\f\u0005b\t"+ - "\u0005\u0001\u0005\u0001\u0005\u0005\u0005f\b\u0005\n\u0005\f\u0005i\t"+ - "\u0005\u0001\u0005\u0001\u0005\u0005\u0005m\b\u0005\n\u0005\f\u0005p\t"+ - "\u0005\u0001\u0005\u0001\u0005\u0005\u0005t\b\u0005\n\u0005\f\u0005w\t"+ - "\u0005\u0005\u0005y\b\u0005\n\u0005\f\u0005|\t\u0005\u0001\u0005\u0001"+ + "\u0001\u0001\u0001\u0001\u0005\u0001X\b\u0001\n\u0001\f\u0001[\t\u0001"+ + "\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004"+ + "\u0001\u0005\u0001\u0005\u0005\u0005e\b\u0005\n\u0005\f\u0005h\t\u0005"+ + "\u0001\u0005\u0001\u0005\u0005\u0005l\b\u0005\n\u0005\f\u0005o\t\u0005"+ + "\u0001\u0005\u0001\u0005\u0005\u0005s\b\u0005\n\u0005\f\u0005v\t\u0005"+ + "\u0001\u0005\u0001\u0005\u0005\u0005z\b\u0005\n\u0005\f\u0005}\t\u0005"+ + "\u0005\u0005\u007f\b\u0005\n\u0005\f\u0005\u0082\t\u0005\u0001\u0005\u0001"+ "\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001\b"+ - "\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u008d"+ + "\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u0093"+ "\b\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0000\u0001\u0002\u000b\u0000"+ "\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0000\u0007\u0001\u0000"+ "\u001b \u0001\u0000\u0015\u001a\u0001\u0000\u000b\u0014\u0001\u0000\t"+ - "\n\u0002\u0000##%%\u0001\u0000\u0004\u0005\u0001\u0000\u0007\b\u00a4\u0000"+ - "\u0016\u0001\u0000\u0000\u0000\u00025\u0001\u0000\u0000\u0000\u0004V\u0001"+ - "\u0000\u0000\u0000\u0006X\u0001\u0000\u0000\u0000\bZ\u0001\u0000\u0000"+ - "\u0000\n\\\u0001\u0000\u0000\u0000\f\u007f\u0001\u0000\u0000\u0000\u000e"+ - "\u0081\u0001\u0000\u0000\u0000\u0010\u008c\u0001\u0000\u0000\u0000\u0012"+ - "\u008e\u0001\u0000\u0000\u0000\u0014\u0090\u0001\u0000\u0000\u0000\u0016"+ - "\u0017\u0003\u0002\u0001\u0000\u0017\u0018\u0005\u0000\u0000\u0001\u0018"+ - "\u0001\u0001\u0000\u0000\u0000\u0019\u001a\u0006\u0001\uffff\uffff\u0000"+ - "\u001a\u001b\u0005!\u0000\u0000\u001b\u001c\u0003\u0002\u0001\u0000\u001c"+ - "\u001d\u0005\"\u0000\u0000\u001d6\u0001\u0000\u0000\u0000\u001e\u001f"+ - "\u0005\u0006\u0000\u0000\u001f6\u0003\u0002\u0001\u000f !\u0005\u0016"+ - "\u0000\u0000!6\u0003\u0002\u0001\r\"#\u0003\b\u0004\u0000#$\u0003\n\u0005"+ - "\u0000$6\u0001\u0000\u0000\u0000%6\u0003\u0010\b\u0000&\'\u0005,\u0000"+ - "\u0000\'(\u0003\u000e\u0007\u0000()\u0005\u0003\u0000\u0000)*\u0003\u000e"+ - "\u0007\u0000*6\u0001\u0000\u0000\u0000+-\u0005,\u0000\u0000,.\u0005\u0006"+ - "\u0000\u0000-,\u0001\u0000\u0000\u0000-.\u0001\u0000\u0000\u0000./\u0001"+ - "\u0000\u0000\u0000/0\u0005\u0002\u0000\u000006\u0003\n\u0005\u000012\u0005"+ - ",\u0000\u000023\u0003\f\u0006\u000034\u0003\n\u0005\u000046\u0001\u0000"+ - "\u0000\u00005\u0019\u0001\u0000\u0000\u00005\u001e\u0001\u0000\u0000\u0000"+ - "5 \u0001\u0000\u0000\u00005\"\u0001\u0000\u0000\u00005%\u0001\u0000\u0000"+ - "\u00005&\u0001\u0000\u0000\u00005+\u0001\u0000\u0000\u000051\u0001\u0000"+ - "\u0000\u00006S\u0001\u0000\u0000\u000078\n\u000e\u0000\u000089\u0003\u0004"+ - "\u0002\u00009:\u0003\u0002\u0001\u000f:R\u0001\u0000\u0000\u0000;<\n\f"+ - "\u0000\u0000<=\u0005\u001a\u0000\u0000=R\u0003\u0002\u0001\r>?\n\u000b"+ - "\u0000\u0000?@\u0005\u0018\u0000\u0000@R\u0003\u0002\u0001\fAB\n\n\u0000"+ - "\u0000BC\u0005\u0017\u0000\u0000CR\u0003\u0002\u0001\u000bDE\n\t\u0000"+ - "\u0000EF\u0005\u0019\u0000\u0000FR\u0003\u0002\u0001\nGH\n\b\u0000\u0000"+ - "HI\u0005\u0015\u0000\u0000IR\u0003\u0002\u0001\tJK\n\u0007\u0000\u0000"+ - "KL\u0005\u0016\u0000\u0000LR\u0003\u0002\u0001\bMN\n\u0005\u0000\u0000"+ - "NO\u0003\u0012\t\u0000OP\u0003\u0002\u0001\u0006PR\u0001\u0000\u0000\u0000"+ - "Q7\u0001\u0000\u0000\u0000Q;\u0001\u0000\u0000\u0000Q>\u0001\u0000\u0000"+ - "\u0000QA\u0001\u0000\u0000\u0000QD\u0001\u0000\u0000\u0000QG\u0001\u0000"+ - "\u0000\u0000QJ\u0001\u0000\u0000\u0000QM\u0001\u0000\u0000\u0000RU\u0001"+ - "\u0000\u0000\u0000SQ\u0001\u0000\u0000\u0000ST\u0001\u0000\u0000\u0000"+ - "T\u0003\u0001\u0000\u0000\u0000US\u0001\u0000\u0000\u0000VW\u0007\u0000"+ - "\u0000\u0000W\u0005\u0001\u0000\u0000\u0000XY\u0007\u0001\u0000\u0000"+ - "Y\u0007\u0001\u0000\u0000\u0000Z[\u0007\u0002\u0000\u0000[\t\u0001\u0000"+ - "\u0000\u0000\\`\u0005!\u0000\u0000]_\u0005(\u0000\u0000^]\u0001\u0000"+ - "\u0000\u0000_b\u0001\u0000\u0000\u0000`^\u0001\u0000\u0000\u0000`a\u0001"+ - "\u0000\u0000\u0000ac\u0001\u0000\u0000\u0000b`\u0001\u0000\u0000\u0000"+ - "cg\u0003\u0002\u0001\u0000df\u0005(\u0000\u0000ed\u0001\u0000\u0000\u0000"+ - "fi\u0001\u0000\u0000\u0000ge\u0001\u0000\u0000\u0000gh\u0001\u0000\u0000"+ - "\u0000hz\u0001\u0000\u0000\u0000ig\u0001\u0000\u0000\u0000jn\u0005\u0001"+ - "\u0000\u0000km\u0005(\u0000\u0000lk\u0001\u0000\u0000\u0000mp\u0001\u0000"+ - "\u0000\u0000nl\u0001\u0000\u0000\u0000no\u0001\u0000\u0000\u0000oq\u0001"+ - "\u0000\u0000\u0000pn\u0001\u0000\u0000\u0000qu\u0003\u0002\u0001\u0000"+ - "rt\u0005(\u0000\u0000sr\u0001\u0000\u0000\u0000tw\u0001\u0000\u0000\u0000"+ - "us\u0001\u0000\u0000\u0000uv\u0001\u0000\u0000\u0000vy\u0001\u0000\u0000"+ - "\u0000wu\u0001\u0000\u0000\u0000xj\u0001\u0000\u0000\u0000y|\u0001\u0000"+ - "\u0000\u0000zx\u0001\u0000\u0000\u0000z{\u0001\u0000\u0000\u0000{}\u0001"+ - "\u0000\u0000\u0000|z\u0001\u0000\u0000\u0000}~\u0005\"\u0000\u0000~\u000b"+ - "\u0001\u0000\u0000\u0000\u007f\u0080\u0007\u0003\u0000\u0000\u0080\r\u0001"+ - "\u0000\u0000\u0000\u0081\u0082\u0007\u0004\u0000\u0000\u0082\u000f\u0001"+ - "\u0000\u0000\u0000\u0083\u008d\u0005%\u0000\u0000\u0084\u008d\u0005#\u0000"+ - "\u0000\u0085\u008d\u0005$\u0000\u0000\u0086\u008d\u0003\u0014\n\u0000"+ - "\u0087\u008d\u0005)\u0000\u0000\u0088\u008d\u0005,\u0000\u0000\u0089\u008d"+ - "\u0005&\u0000\u0000\u008a\u008d\u0005\'\u0000\u0000\u008b\u008d\u0001"+ - "\u0000\u0000\u0000\u008c\u0083\u0001\u0000\u0000\u0000\u008c\u0084\u0001"+ - "\u0000\u0000\u0000\u008c\u0085\u0001\u0000\u0000\u0000\u008c\u0086\u0001"+ - "\u0000\u0000\u0000\u008c\u0087\u0001\u0000\u0000\u0000\u008c\u0088\u0001"+ - "\u0000\u0000\u0000\u008c\u0089\u0001\u0000\u0000\u0000\u008c\u008a\u0001"+ - "\u0000\u0000\u0000\u008c\u008b\u0001\u0000\u0000\u0000\u008d\u0011\u0001"+ - "\u0000\u0000\u0000\u008e\u008f\u0007\u0005\u0000\u0000\u008f\u0013\u0001"+ - "\u0000\u0000\u0000\u0090\u0091\u0007\u0006\u0000\u0000\u0091\u0015\u0001"+ - "\u0000\u0000\u0000\n-5QS`gnuz\u008c"; + "\n\u0002\u0000##%%\u0001\u0000\u0004\u0005\u0001\u0000\u0007\b\u00ad\u0000"+ + "\u0016\u0001\u0000\u0000\u0000\u0002;\u0001\u0000\u0000\u0000\u0004\\"+ + "\u0001\u0000\u0000\u0000\u0006^\u0001\u0000\u0000\u0000\b`\u0001\u0000"+ + "\u0000\u0000\nb\u0001\u0000\u0000\u0000\f\u0085\u0001\u0000\u0000\u0000"+ + "\u000e\u0087\u0001\u0000\u0000\u0000\u0010\u0092\u0001\u0000\u0000\u0000"+ + "\u0012\u0094\u0001\u0000\u0000\u0000\u0014\u0096\u0001\u0000\u0000\u0000"+ + "\u0016\u0017\u0003\u0002\u0001\u0000\u0017\u0018\u0005\u0000\u0000\u0001"+ + "\u0018\u0001\u0001\u0000\u0000\u0000\u0019\u001a\u0006\u0001\uffff\uffff"+ + "\u0000\u001a\u001b\u0005!\u0000\u0000\u001b\u001c\u0003\u0002\u0001\u0000"+ + "\u001c\u001d\u0005\"\u0000\u0000\u001d<\u0001\u0000\u0000\u0000\u001e"+ + "\u001f\u0005\u0006\u0000\u0000\u001f<\u0003\u0002\u0001\u000f !\u0005"+ + "\u0016\u0000\u0000!<\u0003\u0002\u0001\r\"#\u0003\b\u0004\u0000#$\u0003"+ + "\n\u0005\u0000$<\u0001\u0000\u0000\u0000%<\u0003\u0010\b\u0000&(\u0005"+ + ",\u0000\u0000\'&\u0001\u0000\u0000\u0000\'(\u0001\u0000\u0000\u0000()"+ + "\u0001\u0000\u0000\u0000)*\u0003\u000e\u0007\u0000*+\u0005\u0003\u0000"+ + "\u0000+,\u0003\u000e\u0007\u0000,<\u0001\u0000\u0000\u0000-/\u0005,\u0000"+ + "\u0000.-\u0001\u0000\u0000\u0000./\u0001\u0000\u0000\u0000/1\u0001\u0000"+ + "\u0000\u000002\u0005\u0006\u0000\u000010\u0001\u0000\u0000\u000012\u0001"+ + "\u0000\u0000\u000023\u0001\u0000\u0000\u000034\u0005\u0002\u0000\u0000"+ + "4<\u0003\n\u0005\u000057\u0005,\u0000\u000065\u0001\u0000\u0000\u0000"+ + "67\u0001\u0000\u0000\u000078\u0001\u0000\u0000\u000089\u0003\f\u0006\u0000"+ + "9:\u0003\n\u0005\u0000:<\u0001\u0000\u0000\u0000;\u0019\u0001\u0000\u0000"+ + "\u0000;\u001e\u0001\u0000\u0000\u0000; \u0001\u0000\u0000\u0000;\"\u0001"+ + "\u0000\u0000\u0000;%\u0001\u0000\u0000\u0000;\'\u0001\u0000\u0000\u0000"+ + ";.\u0001\u0000\u0000\u0000;6\u0001\u0000\u0000\u0000\n\u000e\u0000\u0000>?\u0003\u0004\u0002\u0000?@\u0003\u0002\u0001"+ + "\u000f@X\u0001\u0000\u0000\u0000AB\n\f\u0000\u0000BC\u0005\u001a\u0000"+ + "\u0000CX\u0003\u0002\u0001\rDE\n\u000b\u0000\u0000EF\u0005\u0018\u0000"+ + "\u0000FX\u0003\u0002\u0001\fGH\n\n\u0000\u0000HI\u0005\u0017\u0000\u0000"+ + "IX\u0003\u0002\u0001\u000bJK\n\t\u0000\u0000KL\u0005\u0019\u0000\u0000"+ + "LX\u0003\u0002\u0001\nMN\n\b\u0000\u0000NO\u0005\u0015\u0000\u0000OX\u0003"+ + "\u0002\u0001\tPQ\n\u0007\u0000\u0000QR\u0005\u0016\u0000\u0000RX\u0003"+ + "\u0002\u0001\bST\n\u0005\u0000\u0000TU\u0003\u0012\t\u0000UV\u0003\u0002"+ + "\u0001\u0006VX\u0001\u0000\u0000\u0000W=\u0001\u0000\u0000\u0000WA\u0001"+ + "\u0000\u0000\u0000WD\u0001\u0000\u0000\u0000WG\u0001\u0000\u0000\u0000"+ + "WJ\u0001\u0000\u0000\u0000WM\u0001\u0000\u0000\u0000WP\u0001\u0000\u0000"+ + "\u0000WS\u0001\u0000\u0000\u0000X[\u0001\u0000\u0000\u0000YW\u0001\u0000"+ + "\u0000\u0000YZ\u0001\u0000\u0000\u0000Z\u0003\u0001\u0000\u0000\u0000"+ + "[Y\u0001\u0000\u0000\u0000\\]\u0007\u0000\u0000\u0000]\u0005\u0001\u0000"+ + "\u0000\u0000^_\u0007\u0001\u0000\u0000_\u0007\u0001\u0000\u0000\u0000"+ + "`a\u0007\u0002\u0000\u0000a\t\u0001\u0000\u0000\u0000bf\u0005!\u0000\u0000"+ + "ce\u0005(\u0000\u0000dc\u0001\u0000\u0000\u0000eh\u0001\u0000\u0000\u0000"+ + "fd\u0001\u0000\u0000\u0000fg\u0001\u0000\u0000\u0000gi\u0001\u0000\u0000"+ + "\u0000hf\u0001\u0000\u0000\u0000im\u0003\u0002\u0001\u0000jl\u0005(\u0000"+ + "\u0000kj\u0001\u0000\u0000\u0000lo\u0001\u0000\u0000\u0000mk\u0001\u0000"+ + "\u0000\u0000mn\u0001\u0000\u0000\u0000n\u0080\u0001\u0000\u0000\u0000"+ + "om\u0001\u0000\u0000\u0000pt\u0005\u0001\u0000\u0000qs\u0005(\u0000\u0000"+ + "rq\u0001\u0000\u0000\u0000sv\u0001\u0000\u0000\u0000tr\u0001\u0000\u0000"+ + "\u0000tu\u0001\u0000\u0000\u0000uw\u0001\u0000\u0000\u0000vt\u0001\u0000"+ + "\u0000\u0000w{\u0003\u0002\u0001\u0000xz\u0005(\u0000\u0000yx\u0001\u0000"+ + "\u0000\u0000z}\u0001\u0000\u0000\u0000{y\u0001\u0000\u0000\u0000{|\u0001"+ + "\u0000\u0000\u0000|\u007f\u0001\u0000\u0000\u0000}{\u0001\u0000\u0000"+ + "\u0000~p\u0001\u0000\u0000\u0000\u007f\u0082\u0001\u0000\u0000\u0000\u0080"+ + "~\u0001\u0000\u0000\u0000\u0080\u0081\u0001\u0000\u0000\u0000\u0081\u0083"+ + "\u0001\u0000\u0000\u0000\u0082\u0080\u0001\u0000\u0000\u0000\u0083\u0084"+ + "\u0005\"\u0000\u0000\u0084\u000b\u0001\u0000\u0000\u0000\u0085\u0086\u0007"+ + "\u0003\u0000\u0000\u0086\r\u0001\u0000\u0000\u0000\u0087\u0088\u0007\u0004"+ + "\u0000\u0000\u0088\u000f\u0001\u0000\u0000\u0000\u0089\u0093\u0005%\u0000"+ + "\u0000\u008a\u0093\u0005#\u0000\u0000\u008b\u0093\u0005$\u0000\u0000\u008c"+ + "\u0093\u0003\u0014\n\u0000\u008d\u0093\u0005)\u0000\u0000\u008e\u0093"+ + "\u0005,\u0000\u0000\u008f\u0093\u0005&\u0000\u0000\u0090\u0093\u0005\'"+ + "\u0000\u0000\u0091\u0093\u0001\u0000\u0000\u0000\u0092\u0089\u0001\u0000"+ + "\u0000\u0000\u0092\u008a\u0001\u0000\u0000\u0000\u0092\u008b\u0001\u0000"+ + "\u0000\u0000\u0092\u008c\u0001\u0000\u0000\u0000\u0092\u008d\u0001\u0000"+ + "\u0000\u0000\u0092\u008e\u0001\u0000\u0000\u0000\u0092\u008f\u0001\u0000"+ + "\u0000\u0000\u0092\u0090\u0001\u0000\u0000\u0000\u0092\u0091\u0001\u0000"+ + "\u0000\u0000\u0093\u0011\u0001\u0000\u0000\u0000\u0094\u0095\u0007\u0005"+ + "\u0000\u0000\u0095\u0013\u0001\u0000\u0000\u0000\u0096\u0097\u0007\u0006"+ + "\u0000\u0000\u0097\u0015\u0001\u0000\u0000\u0000\r\'.16;WYfmt{\u0080\u0092"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanFilterListener.java b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanFilterListener.java index 92c3423..7c66f00 100644 --- a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanFilterListener.java +++ b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanFilterListener.java @@ -77,7 +77,7 @@ public void exitToExpression(BooleanExpressionParser.ToExpressionContext ctx) { @Override public void exitArrayExpression(BooleanExpressionParser.ArrayExpressionContext ctx) { validateField(ctx.field, ctx.getText()); - final String field = getField(ctx.field.getText()); + final String field = getField(ctx.field != null ? ctx.field.getText() : null); final List items = getArrayElements(ctx.data.children); final Operator operator = Operator.getOperatorFromSymbol(ctx.op.getText()).orElse(Operator.EQUALS); currentNodes.add(new ArrayNode(field, operator, items)); @@ -199,7 +199,7 @@ private ArithmeticNode mapArithmeticExpressionContext(BooleanExpressionParser.Ar private Node mapInExpressionContext(BooleanExpressionParser.InExpressionContext ctx) { validateField(ctx.field, ctx.getText()); - final String field = getField(ctx.field.getText()); + final String field = getField(ctx.field != null ? ctx.field.getText() : null); final List items = getArrayElements(ctx.data.children); final InNode inNode = new InNode(field, items); if (Objects.isNull(ctx.not)) { @@ -211,7 +211,7 @@ private Node mapInExpressionContext(BooleanExpressionParser.InExpressionContext private NumericRangeNode mapToExpressionContext(BooleanExpressionParser.ToExpressionContext ctx) { validateField(ctx.field, ctx.getText()); - final String field = getField(ctx.field.getText()); + final String field = getField(ctx.field != null ? ctx.field.getText() : null); final DataType lowerDataType = getDataType(ctx.lower.start); final Object lowerValue = ValueUtils.convertValue(ctx.lower.start.getText(), lowerDataType); final DataType upperDataType = getDataType(ctx.upper.start); @@ -220,7 +220,7 @@ private NumericRangeNode mapToExpressionContext(BooleanExpressionParser.ToExpres } private void validateField(final Token token, final String text) { - if (Objects.isNull(token) || (StringUtils.isBlank(token.getText()) && StringUtils.isBlank(this.defaultField))) { + if ((Objects.isNull(token) || StringUtils.isBlank(token.getText())) && StringUtils.isBlank(this.defaultField)) { throw new InvalidExpressionException(String.format("Error parsing expression (missing field) for the string %s", text)); } } diff --git a/src/main/java/resources/BooleanExpression.g4 b/src/main/java/resources/BooleanExpression.g4 index 6b84f66..46a92f7 100644 --- a/src/main/java/resources/BooleanExpression.g4 +++ b/src/main/java/resources/BooleanExpression.g4 @@ -18,9 +18,9 @@ expression | left=arithmeticFunction data=wordlist #arithmeticFunctionExpression | left=expression op=binary right=expression #binaryExpression | types #typesExpression - | (field=FIELD) lower=numericTypes TO upper=numericTypes #toExpression - | (field=FIELD) (not=NOT)? IN data=wordlist #inExpression - | (field=FIELD) op=arrayOperators data=wordlist #arrayExpression + | (field=FIELD)? lower=numericTypes TO upper=numericTypes #toExpression + | (field=FIELD)? (not=NOT)? IN data=wordlist #inExpression + | (field=FIELD)? op=arrayOperators data=wordlist #arrayExpression ; comparator diff --git a/src/test/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluatorTest.java b/src/test/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluatorTest.java index c3c4625..d2ffe55 100644 --- a/src/test/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluatorTest.java +++ b/src/test/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluatorTest.java @@ -516,6 +516,19 @@ public void testContainsAnyTrueCondition() { assertTrue(booleanOptional.get()); } + @Test + public void testContainsAnyTrueConditionDefault() { + final Map data = new HashMap<>(); + final List ages = new ArrayList<>(); + ages.add(1); + ages.add(2); + ages.add(3); + data.put("age", ages); + final Try booleanOptional = booleanExpressionEvaluator.evaluate("contains_any (2)", data, "age"); + assertTrue(booleanOptional.isSuccess()); + assertTrue(booleanOptional.get()); + } + @Test public void testContainsAnyFalseCondition() { final Map data = new HashMap<>(); From af29c9c597c826de978abdeb868ff14cfaedb885 Mon Sep 17 00:00:00 2001 From: Sidhant Aggarwal Date: Wed, 11 Feb 2026 17:42:01 +0530 Subject: [PATCH 2/2] version bump --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b29980d..ba61228 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { } group 'com.github.sidhant92' -version = "2.0.0" +version = "2.0.1" java { sourceCompatibility = JavaVersion.VERSION_21