aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java51
1 files changed, 20 insertions, 31 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..c84ed0a0565 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
@@ -56,6 +56,7 @@ import com.yahoo.search.yql.yqlplusParser.TimeoutContext;
import com.yahoo.search.yql.yqlplusParser.UnaryExpressionContext;
import com.yahoo.search.yql.yqlplusParser.WhereContext;
+import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.BaseErrorListener;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CommonTokenStream;
@@ -69,7 +70,6 @@ import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.RuleNode;
import org.antlr.v4.runtime.tree.TerminalNode;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
@@ -83,50 +83,39 @@ import java.util.Set;
final class ProgramParser {
public yqlplusParser prepareParser(String programName, InputStream input) throws IOException {
- return prepareParser(programName, new CaseInsensitiveInputStream(input));
+ //TODO ANTLRInputStream goes away on 4.7, so must use CharStreams.fromXXX() when upgrading
+ return prepareParser(programName, new CaseInsensitiveCharStream(new ANTLRInputStream(input)));
}
public yqlplusParser prepareParser(String programName, String input) throws IOException {
- return prepareParser(programName, new CaseInsensitiveInputStream(input));
+ //TODO ANTLRInputStream goes away on 4.7, so must use CharStreams.fromXXX() when upgrading
+ return prepareParser(programName, new CaseInsensitiveCharStream(new ANTLRInputStream(input)));
}
- public yqlplusParser prepareParser(File file) throws IOException {
- return prepareParser(file.getAbsoluteFile().toString(), new CaseInsensitiveFileStream(file.getAbsolutePath()));
+ private static class ErrorListener extends BaseErrorListener {
+ private final String programName;
+ ErrorListener(String programName) { this.programName = programName; }
+ @Override
+ public void syntaxError(Recognizer<?, ?> recognizer,
+ Object offendingSymbol,
+ int line,
+ int charPositionInLine,
+ String msg,
+ RecognitionException e) {
+ throw new ProgramCompileException(new Location(programName, line, charPositionInLine), "%s", msg);
+ }
}
private yqlplusParser prepareParser(String programName, CharStream input) {
+ ErrorListener errorListener = new ErrorListener(programName);
yqlplusLexer lexer = new yqlplusLexer(input);
lexer.removeErrorListeners();
- lexer.addErrorListener(new BaseErrorListener() {
-
- @Override
- public void syntaxError(Recognizer<?, ?> recognizer,
- Object offendingSymbol,
- int line,
- int charPositionInLine,
- String msg,
- RecognitionException e) {
- throw new ProgramCompileException(new Location(programName, line, charPositionInLine), "%s", msg);
- }
-
- });
+ lexer.addErrorListener(errorListener);
TokenStream tokens = new CommonTokenStream(lexer);
yqlplusParser parser = new yqlplusParser(tokens);
parser.removeErrorListeners();
- parser.addErrorListener(new BaseErrorListener() {
-
- @Override
- public void syntaxError(Recognizer<?, ?> recognizer,
- Object offendingSymbol,
- int line,
- int charPositionInLine,
- String msg,
- RecognitionException e) {
- throw new ProgramCompileException(new Location(programName, line, charPositionInLine), "%s", msg);
- }
-
- });
+ parser.addErrorListener(errorListener);
parser.getInterpreter().setPredictionMode(PredictionMode.SLL);
return parser;
}