protected void configureParser(@NonNull Parser parser, @NonNull ParserConfiguration configuration) {
ParserATNSimulator interpreter = parser.getInterpreter();
// common configuration
interpreter.force_global_context = false;
interpreter.always_try_local_context = true;
interpreter.optimize_tail_calls = true;
parser.setBuildParseTree(true);
parser.removeErrorListeners();
switch (configuration) {
case FASTEST:
interpreter.setPredictionMode(PredictionMode.SLL);
interpreter.tail_call_preserves_sll = false;
interpreter.treat_sllk1_conflict_as_ambiguity = true;
parser.setErrorHandler(new BailErrorStrategy());
break;
case SLL:
throw new UnsupportedOperationException("The tail_call_preserves_sll flag cannot change within a single ATN instance.");
//interpreter.setPredictionMode(PredictionMode.SLL);
//interpreter.tail_call_preserves_sll = true;
//interpreter.treat_sllk1_conflict_as_ambiguity = true;
//parser.setErrorHandler(new BailErrorStrategy<Token>());
//break;
case HYBRID:
interpreter.setPredictionMode(PredictionMode.LL);
interpreter.tail_call_preserves_sll = false;
interpreter.treat_sllk1_conflict_as_ambiguity = true;
parser.setErrorHandler(new BailErrorStrategy());
break;
case HYBRID_SLL:
throw new UnsupportedOperationException("The tail_call_preserves_sll flag cannot change within a single ATN instance.");
//interpreter.setPredictionMode(PredictionMode.LL);
//interpreter.tail_call_preserves_sll = true;
//interpreter.treat_sllk1_conflict_as_ambiguity = true;
//parser.setErrorHandler(new BailErrorStrategy<Token>());
//break;
case PRECISE:
interpreter.setPredictionMode(PredictionMode.LL);
interpreter.tail_call_preserves_sll = false;
interpreter.treat_sllk1_conflict_as_ambiguity = false;
parser.setErrorHandler(new DefaultErrorStrategy());
parser.addErrorListener(DescriptiveErrorListener.INSTANCE);
break;
default:
throw new IllegalArgumentException("Invalid configuration.");
}
}
GoParserFactory.java 文件源码
java
阅读 25
收藏 0
点赞 0
评论 0
项目:goworks
作者:
评论列表
文章目录