forked from jasder/antlr
Properly encapsulate LexerATNConfig.lexerActionExecutor, and mark as final
This commit is contained in:
parent
41e04a27c0
commit
27270fdd05
|
@ -36,8 +36,10 @@ import org.antlr.v4.runtime.misc.Nullable;
|
||||||
import org.antlr.v4.runtime.misc.ObjectEqualityComparator;
|
import org.antlr.v4.runtime.misc.ObjectEqualityComparator;
|
||||||
|
|
||||||
public class LexerATNConfig extends ATNConfig {
|
public class LexerATNConfig extends ATNConfig {
|
||||||
/** Capture lexer actions we traverse. */
|
/**
|
||||||
public LexerActionExecutor lexerActionExecutor;
|
* This is the backing field for {@link #getLexerActionExecutor}.
|
||||||
|
*/
|
||||||
|
private final LexerActionExecutor lexerActionExecutor;
|
||||||
|
|
||||||
private final boolean passedThroughNonGreedyDecision;
|
private final boolean passedThroughNonGreedyDecision;
|
||||||
|
|
||||||
|
@ -47,6 +49,7 @@ public class LexerATNConfig extends ATNConfig {
|
||||||
{
|
{
|
||||||
super(state, alt, context, SemanticContext.NONE);
|
super(state, alt, context, SemanticContext.NONE);
|
||||||
this.passedThroughNonGreedyDecision = false;
|
this.passedThroughNonGreedyDecision = false;
|
||||||
|
this.lexerActionExecutor = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LexerATNConfig(@NotNull ATNState state,
|
public LexerATNConfig(@NotNull ATNState state,
|
||||||
|
@ -80,6 +83,14 @@ public class LexerATNConfig extends ATNConfig {
|
||||||
this.passedThroughNonGreedyDecision = checkNonGreedyDecision(c, state);
|
this.passedThroughNonGreedyDecision = checkNonGreedyDecision(c, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the {@link LexerActionExecutor} capable of executing the embedded
|
||||||
|
* action(s) for the current configuration.
|
||||||
|
*/
|
||||||
|
public final LexerActionExecutor getLexerActionExecutor() {
|
||||||
|
return lexerActionExecutor;
|
||||||
|
}
|
||||||
|
|
||||||
public final boolean hasPassedThroughNonGreedyDecision() {
|
public final boolean hasPassedThroughNonGreedyDecision() {
|
||||||
return passedThroughNonGreedyDecision;
|
return passedThroughNonGreedyDecision;
|
||||||
}
|
}
|
||||||
|
|
|
@ -346,7 +346,7 @@ public class LexerATNSimulator extends ATNSimulator {
|
||||||
Transition trans = c.state.transition(ti);
|
Transition trans = c.state.transition(ti);
|
||||||
ATNState target = getReachableTarget(trans, t);
|
ATNState target = getReachableTarget(trans, t);
|
||||||
if ( target!=null ) {
|
if ( target!=null ) {
|
||||||
LexerActionExecutor lexerActionExecutor = ((LexerATNConfig)c).lexerActionExecutor;
|
LexerActionExecutor lexerActionExecutor = ((LexerATNConfig)c).getLexerActionExecutor();
|
||||||
if (lexerActionExecutor != null) {
|
if (lexerActionExecutor != null) {
|
||||||
lexerActionExecutor = lexerActionExecutor.fixOffsetBeforeMatch(input.index() - startIndex);
|
lexerActionExecutor = lexerActionExecutor.fixOffsetBeforeMatch(input.index() - startIndex);
|
||||||
}
|
}
|
||||||
|
@ -537,7 +537,7 @@ public class LexerATNSimulator extends ATNSimulator {
|
||||||
// getEpsilonTarget to return two configurations, so
|
// getEpsilonTarget to return two configurations, so
|
||||||
// additional modifications are needed before we can support
|
// additional modifications are needed before we can support
|
||||||
// the split operation.
|
// the split operation.
|
||||||
LexerActionExecutor lexerActionExecutor = LexerActionExecutor.append(config.lexerActionExecutor, atn.lexerActions[((ActionTransition)t).actionIndex]);
|
LexerActionExecutor lexerActionExecutor = LexerActionExecutor.append(config.getLexerActionExecutor(), atn.lexerActions[((ActionTransition)t).actionIndex]);
|
||||||
c = new LexerATNConfig(config, t.target, lexerActionExecutor);
|
c = new LexerATNConfig(config, t.target, lexerActionExecutor);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -684,7 +684,7 @@ public class LexerATNSimulator extends ATNSimulator {
|
||||||
|
|
||||||
if ( firstConfigWithRuleStopState!=null ) {
|
if ( firstConfigWithRuleStopState!=null ) {
|
||||||
proposed.isAcceptState = true;
|
proposed.isAcceptState = true;
|
||||||
proposed.lexerActionExecutor = ((LexerATNConfig)firstConfigWithRuleStopState).lexerActionExecutor;
|
proposed.lexerActionExecutor = ((LexerATNConfig)firstConfigWithRuleStopState).getLexerActionExecutor();
|
||||||
proposed.prediction = atn.ruleToTokenType[firstConfigWithRuleStopState.state.ruleIndex];
|
proposed.prediction = atn.ruleToTokenType[firstConfigWithRuleStopState.state.ruleIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue