diff --git a/runtime/Java/src/org/antlr/v4/runtime/atn/LexerATNSimulator.java b/runtime/Java/src/org/antlr/v4/runtime/atn/LexerATNSimulator.java index a3a10fceb..966a91d7d 100644 --- a/runtime/Java/src/org/antlr/v4/runtime/atn/LexerATNSimulator.java +++ b/runtime/Java/src/org/antlr/v4/runtime/atn/LexerATNSimulator.java @@ -568,10 +568,15 @@ public class LexerATNSimulator extends ATNSimulator { } } - if ( config.context == null || config.context.isEmpty() ) { - configs.add(config); - return; + if ( config.context == null || config.context.hasEmpty() ) { + if (config.context == null || config.context.isEmpty()) { + configs.add(config); + return; + } + + configs.add(new LexerATNConfig(config, config.state, PredictionContext.EMPTY)); } + if ( config.context!=null && !config.context.isEmpty() ) { for (SingletonPredictionContext ctx : config.context) { if ( !ctx.isEmpty() ) { @@ -603,8 +608,8 @@ public class LexerATNSimulator extends ATNSimulator { } ATNState p = config.state; - boolean nonGreedy = p instanceof DecisionState && ((DecisionState)p).nonGreedy - || p instanceof PlusBlockStartState && ((PlusBlockStartState)p).loopBackState.nonGreedy; + boolean nonGreedy = (p instanceof DecisionState && ((DecisionState)p).nonGreedy && !(p instanceof PlusLoopbackState)) + || (p instanceof PlusBlockStartState && ((PlusBlockStartState)p).loopBackState.nonGreedy); for (int i=0; i