diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-11-22 15:19:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-22 15:19:42 +0100 |
commit | ea7d530c80515724f8384ded392da5b9a3ab3741 (patch) | |
tree | 64d17747179cf40077f1504361413add6be59936 /container-search | |
parent | af3ed2033e8c4b9cd999196daf28f8c6eb018534 (diff) | |
parent | 589b52b4f74fc52597b6347abb8ccbc65eeb4f08 (diff) |
Merge pull request #20153 from vespa-engine/revert-20078-balder/upgrade-antlr
Revert "antlr4 4.5 -> 4.9.3"
Diffstat (limited to 'container-search')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java b/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java index d32033249f1..e1e88c83725 100644 --- a/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java +++ b/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java @@ -65,6 +65,8 @@ import org.antlr.v4.runtime.Recognizer; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.TokenStream; import org.antlr.v4.runtime.atn.PredictionMode; +import org.antlr.v4.runtime.misc.NotNull; +import org.antlr.v4.runtime.misc.Nullable; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.RuleNode; import org.antlr.v4.runtime.tree.TerminalNode; @@ -100,12 +102,12 @@ final class ProgramParser { lexer.addErrorListener(new BaseErrorListener() { @Override - public void syntaxError(Recognizer<?, ?> recognizer, - Object offendingSymbol, + public void syntaxError(@NotNull Recognizer<?, ?> recognizer, + @Nullable Object offendingSymbol, int line, int charPositionInLine, - String msg, - RecognitionException e) { + @NotNull String msg, + @Nullable RecognitionException e) { throw new ProgramCompileException(new Location(programName, line, charPositionInLine), "%s", msg); } @@ -117,12 +119,12 @@ final class ProgramParser { parser.addErrorListener(new BaseErrorListener() { @Override - public void syntaxError(Recognizer<?, ?> recognizer, - Object offendingSymbol, + public void syntaxError(@NotNull Recognizer<?, ?> recognizer, + @Nullable Object offendingSymbol, int line, int charPositionInLine, - String msg, - RecognitionException e) { + @NotNull String msg, + @Nullable RecognitionException e) { throw new ProgramCompileException(new Location(programName, line, charPositionInLine), "%s", msg); } @@ -193,6 +195,7 @@ final class ProgramParser { final Scope parent; Set<String> cursors = ImmutableSet.of(); Set<String> variables = ImmutableSet.of(); + Set<String> views = Sets.newHashSet(); Map<String, Binding> bindings = Maps.newHashMap(); final yqlplusParser parser; final String programName; @@ -244,6 +247,13 @@ final class ProgramParser { return variables.contains(name) || (parent != null && parent.isVariable(name)); } + public void bindModule(Location loc, List<String> binding, String symbolName) { + if (isBound(symbolName)) { + throw new ProgramCompileException(loc, "Name '%s' is already used.", symbolName); + } + root.bindings.put(symbolName, new Binding(binding)); + } + public void defineDataSource(Location loc, String name) { if (isCursor(name)) { throw new ProgramCompileException(loc, "Alias '%s' is already used.", name); @@ -265,6 +275,16 @@ final class ProgramParser { } + public void defineView(Location loc, String text) { + if (this != root) { + throw new IllegalStateException("Views MUST be defined in 'root' scope only"); + } + if (views.contains(text)) { + throw new ProgramCompileException(loc, "View '%s' already defined", text); + } + views.add(text); + } + Scope child() { return new Scope(root, this); } @@ -331,8 +351,8 @@ final class ProgramParser { List<Orderby_fieldContext> orderFieds = ((OrderbyContext) child) .orderby_fields().orderby_field(); orderby = Lists.newArrayListWithExpectedSize(orderFieds.size()); - for (var field: orderFieds) { - orderby.add(convertSortKey(field, scope)); + for (int j = 0; j < orderFieds.size(); ++j) { + orderby.add(convertSortKey(orderFieds.get(j), scope)); } break; case yqlplusParser.RULE_limit: @@ -906,8 +926,8 @@ final class ProgramParser { List<String> path = readName((Namespaced_nameContext) parseTree.getChild(0)); Location loc = toLocation(scope, parseTree.getChild(0)); String alias = path.get(0); - OperatorNode<ExpressionOperator> result; - int start; + OperatorNode<ExpressionOperator> result = null; + int start = 0; if (scope.isCursor(alias)) { if (path.size() > 1) { result = OperatorNode.create(loc, ExpressionOperator.READ_FIELD, alias, path.get(1)); |