diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/yql/ParserBase.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/yql/ParserBase.java | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/yql/ParserBase.java b/container-search/src/main/java/com/yahoo/search/yql/ParserBase.java new file mode 100644 index 00000000000..af3418919e8 --- /dev/null +++ b/container-search/src/main/java/com/yahoo/search/yql/ParserBase.java @@ -0,0 +1,38 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.search.yql; + +import com.google.common.collect.Sets; + +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.tree.ParseTree; + +import java.util.Set; + +/** + * Provides semantic helper functions to Parser. + */ +abstract class ParserBase extends Parser { + + private static String arrayRuleName = "array"; + public ParserBase(TokenStream input) { + super(input); + } + + private Set<String> arrayParameters = Sets.newHashSet(); + + public void registerParameter(String name, String typeName) { + if (typeName.equals(arrayRuleName)) { + arrayParameters.add(name); + } + } + + public boolean isArrayParameter(ParseTree nameNode) { + String name = nameNode.getText(); + if (name.startsWith("@")) { + name = name.substring(1); + } + return name != null && arrayParameters.contains(name); + } + +} |