From 6fa853c14f5e0eea85cd42063371c6e0a0ab1be2 Mon Sep 17 00:00:00 2001 From: Sam Harwell Date: Mon, 15 Oct 2012 02:01:07 -0500 Subject: [PATCH] Fixes to LexerATNSimulator.closure, fixes to non-greedy positive closure --- .../v4/runtime/atn/LexerATNSimulator.java | 32 +++++++++++++------ .../v4/runtime/atn/PredictionContext.java | 4 +++ 2 files changed, 27 insertions(+), 9 deletions(-) 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