Skip to content

Commit dd533d0

Browse files
authored
Merge pull request #9 from sidhant92/antlr
Cache Option
2 parents f1825e9 + 3194129 commit dd533d0

5 files changed

Lines changed: 32 additions & 10 deletions

File tree

build.gradle

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,16 @@ repositories {
3131
}
3232

3333
dependencies {
34-
testImplementation group: 'junit', name: 'junit', version: '4.12'
35-
3634
implementation 'ch.qos.logback:logback-classic:1.2.3'
3735
implementation 'ch.qos.logback.contrib:logback-json-classic:0.1.5'
3836
implementation 'ch.qos.logback.contrib:logback-jackson:0.1.5'
3937
implementation 'net.logstash.logback:logstash-logback-encoder:5.2'
4038
implementation 'org.apache.maven:maven-artifact:3.5.2'
4139
implementation 'org.antlr:antlr4-runtime:4.11.1'
4240
implementation 'io.vavr:vavr:0.10.4'
43-
testImplementation 'org.openjdk.jmh:jmh-core:1.35'
44-
testImplementation 'org.openjdk.jmh:jmh-generator-annprocess:1.35'
45-
41+
implementation 'com.github.ben-manes.caffeine:caffeine:2.9.3'
4642
implementation 'org.projectlombok:lombok:1.18.26'
43+
4744
annotationProcessor 'org.projectlombok:lombok:1.18.26'
4845
testAnnotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess:1.36'
4946

@@ -53,6 +50,7 @@ dependencies {
5350
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.4.2'
5451
testImplementation group: 'org.mockito', name: 'mockito-junit-jupiter', version: '3.3.3'
5552
testImplementation group: 'org.mock-server', name: 'mockserver-junit-jupiter', version: '5.10.0'
53+
testImplementation group: 'junit', name: 'junit', version: '4.12'
5654
}
5755

5856
test {

src/main/java/com/github/sidhant92/boolparser/parser/antlr/BoolParser.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,48 @@
33
import org.antlr.v4.runtime.CharStreams;
44
import org.antlr.v4.runtime.CommonTokenStream;
55
import org.antlr.v4.runtime.tree.ParseTreeWalker;
6+
import com.github.benmanes.caffeine.cache.Cache;
7+
import com.github.benmanes.caffeine.cache.Caffeine;
68
import com.github.sidhant92.boolparser.domain.Token;
79
import com.github.sidhant92.boolparser.parser.BoolExpressionParser;
810
import io.vavr.control.Try;
911

1012
public class BoolParser implements BoolExpressionParser {
13+
private boolean useCache;
14+
15+
private Cache<String, Token> cache;
16+
17+
private final ParseTreeWalker parseTreeWalker = new ParseTreeWalker();
18+
19+
public BoolParser() {
20+
}
21+
22+
public BoolParser(final int maxCacheSize) {
23+
this.useCache = true;
24+
this.cache = Caffeine.newBuilder().maximumSize(maxCacheSize).build();
25+
}
26+
1127
@Override
1228
public Try<Token> parseExpression(final String expression) {
1329
return Try.of(() -> getNode(expression));
1430
}
1531

1632
private Token getNode(final String expression) {
33+
if (useCache) {
34+
return cache.get(expression, this::parse);
35+
}
36+
return parse(expression);
37+
}
38+
39+
private Token parse(final String expression) {
1740
BooleanExpressionLexer filterLexer = new BooleanExpressionLexer(CharStreams.fromString(expression));
1841
CommonTokenStream commonTokenStream = new CommonTokenStream(filterLexer);
1942
BooleanExpressionParser filterParser = new BooleanExpressionParser(commonTokenStream);
2043
BooleanExpressionParser.ParseContext filterContext = filterParser.parse();
2144

22-
ParseTreeWalker parseTreeWalker = new ParseTreeWalker();
2345
final BooleanFilterListener listener = new BooleanFilterListener();
2446
parseTreeWalker.walk(listener, filterContext);
47+
2548
return listener.getNode();
2649
}
2750
}

src/test/java/com/github/sidhant92/boolparser/parser/antlr/BooleanFilterBoolParserTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public void testSingleDecimalToken() {
104104

105105
@Test
106106
public void testSingleIntRangeToken() {
107-
final Try<Token> nodeOptional = boolExpressionBoolParser.parseExpression("age: 18 TO 44");
107+
final Try<Token> nodeOptional = boolExpressionBoolParser.parseExpression("age 18 TO 44");
108108
assertTrue(nodeOptional.isSuccess());
109109
assertEquals(nodeOptional.get().getTokenType().name(), TokenType.NUMERIC_RANGE.name());
110110
verifyNumericRangeToken((NumericRangeToken) nodeOptional.get(), "age", 18, 44);
@@ -120,7 +120,7 @@ public void testGreaterThan() {
120120

121121
@Test
122122
public void testSingleDecimalRangeToken() {
123-
final Try<Token> nodeOptional = boolExpressionBoolParser.parseExpression("age: 18.4 TO 44.2");
123+
final Try<Token> nodeOptional = boolExpressionBoolParser.parseExpression("age 18.4 TO 44.2");
124124
assertTrue(nodeOptional.isSuccess());
125125
assertEquals(nodeOptional.get().getTokenType().name(), TokenType.NUMERIC_RANGE.name());
126126
verifyNumericRangeToken((NumericRangeToken) nodeOptional.get(), "age", 18.4, 44.2);

src/test/java/com/github/sidhant92/boolparser/application/EvaluationBenchmarkService.java renamed to src/test/java/com/github/sidhant92/boolparser/parser/antlr/benchmark/EvaluationBenchmarkService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.github.sidhant92.boolparser.application;
1+
package com.github.sidhant92.boolparser.parser.antlr.benchmark;
22

33
import java.io.IOException;
44
import java.util.Map;
@@ -15,6 +15,7 @@
1515
import org.openjdk.jmh.runner.RunnerException;
1616
import org.openjdk.jmh.runner.options.Options;
1717
import org.openjdk.jmh.runner.options.OptionsBuilder;
18+
import com.github.sidhant92.boolparser.application.BooleanExpressionEvaluator;
1819
import com.github.sidhant92.boolparser.parser.antlr.BoolParser;
1920
import com.github.sidhant92.boolparser.provider.BoolParserDataProvider;
2021
import lombok.SneakyThrows;

src/test/java/com/github/sidhant92/boolparser/application/ParserBenchmarkService.java renamed to src/test/java/com/github/sidhant92/boolparser/parser/antlr/benchmark/ParserBenchmarkService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.github.sidhant92.boolparser.application;
1+
package com.github.sidhant92.boolparser.parser.antlr.benchmark;
22

33
import java.io.IOException;
44
import java.util.Map;

0 commit comments

Comments
 (0)