
com.weaverplatform.sp4rql.parser.Sp4rqlParser Maven / Gradle / Ivy
package com.weaverplatform.sp4rql.parser;
import com.weaverplatform.sp4rql.error.NotSupportedException;
import com.weaverplatform.sp4rql.error.ParseException;
import com.weaverplatform.sp4rql.model.scope.ScopeQuery;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.misc.ParseCancellationException;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
import sp4rql.Sp4rql11Lexer;
import sp4rql.Sp4rql11Parser;
public class Sp4rqlParser {
private static BaseErrorListener errorListener = new BaseErrorListener() {
@Override
public void syntaxError(Recognizer, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) throws ParseCancellationException {
throw new ParseCancellationException("line " + line + ":" + charPositionInLine + " " + msg);
}
};
private static Sp4rql11Parser getParser(String query) {
Sp4rql11Lexer lexer = new Sp4rql11Lexer(CharStreams.fromString(query));
lexer.removeErrorListeners();
lexer.addErrorListener(errorListener);
CommonTokenStream tokens = new CommonTokenStream(lexer);
Sp4rql11Parser parser = new Sp4rql11Parser(tokens);
parser.removeErrorListeners();
parser.addErrorListener(errorListener);
return parser;
}
public static ScopeQuery parseQuery(String query) throws ParseException, NotSupportedException {
try {
Sp4rql11Parser parser = getParser(query);
Sp4rql11Parser.QueryUnitContext context = parser.queryUnit();
QueryUnitListener listener = new QueryUnitListener();
ParseTreeWalker.DEFAULT.walk(listener, context);
listener.finish();
return listener.getUnit();
} catch(ParseCancellationException e) {
throw new ParseException(String.format("Failed parsing the Sp4rql query: %s", e.getMessage()));
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy