/** Method visitDecisionState() is called when the interpreter reaches * a decision state (instance of DecisionState). It gives an opportunity * for subclasses to track interesting things. */ protected int visitDecisionState(DecisionState p) { int predictedAlt = 1; if ( p.getNumberOfTransitions()>1 ) { getErrorHandler().sync(this); int decision = p.decision; if ( decision == overrideDecision && _input.index() == overrideDecisionInputIndex && !overrideDecisionReached ) { predictedAlt = overrideDecisionAlt; overrideDecisionReached = true; } else { predictedAlt = getInterpreter().adaptivePredict(_input, decision, _ctx); } } return predictedAlt; }
protected void predicateDFAState(DFAState dfaState, DecisionState decisionState) { // We need to test all predicates, even in DFA states that // uniquely predict alternative. int nalts = decisionState.getNumberOfTransitions(); // Update DFA so reach becomes accept state with (predicate,alt) // pairs if preds found for conflicting alts BitSet altsToCollectPredsFrom = getConflictingAltsOrUniqueAlt(dfaState.configs); SemanticContext[] altToPred = getPredsForAmbigAlts(altsToCollectPredsFrom, dfaState.configs, nalts); if ( altToPred!=null ) { dfaState.predicates = getPredicatePredictions(altsToCollectPredsFrom, altToPred); dfaState.prediction = ATN.INVALID_ALT_NUMBER; // make sure we use preds } else { // There are preds in configs but they might go away // when OR'd together like {p}? || NONE == NONE. If neither // alt has preds, resolve to min alt dfaState.prediction = altsToCollectPredsFrom.nextSetBit(0); } }
@Override protected int visitDecisionState(DecisionState p) { int predictedAlt = super.visitDecisionState(p); if ( p.getNumberOfTransitions()>1 ) { // System.out.println("decision "+p.decision+": "+predictedAlt); if ( p.decision==this.overrideDecision && this._input.index()==this.overrideDecisionInputIndex ) { ((PreviewInterpreterRuleContext)overrideDecisionRoot).isDecisionOverrideRoot = true; } } return predictedAlt; }
checkCondition(decisionState.getNumberOfTransitions() <= 1 || decisionState.decision >= 0);
/** Method visitDecisionState() is called when the interpreter reaches * a decision state (instance of DecisionState). It gives an opportunity * for subclasses to track interesting things. */ protected int visitDecisionState(DecisionState p) { int predictedAlt = 1; if ( p.getNumberOfTransitions()>1 ) { getErrorHandler().sync(this); int decision = p.decision; if ( decision == overrideDecision && _input.index() == overrideDecisionInputIndex && !overrideDecisionReached ) { predictedAlt = overrideDecisionAlt; overrideDecisionReached = true; } else { predictedAlt = getInterpreter().adaptivePredict(_input, decision, _ctx); } } return predictedAlt; }
/** Method visitDecisionState() is called when the interpreter reaches * a decision state (instance of DecisionState). It gives an opportunity * for subclasses to track interesting things. */ protected int visitDecisionState(DecisionState p) { int predictedAlt = 1; if ( p.getNumberOfTransitions()>1 ) { getErrorHandler().sync(this); int decision = p.decision; if ( decision == overrideDecision && _input.index() == overrideDecisionInputIndex && !overrideDecisionReached ) { predictedAlt = overrideDecisionAlt; overrideDecisionReached = true; } else { predictedAlt = getInterpreter().adaptivePredict(_input, decision, _ctx); } } return predictedAlt; }
protected void predicateDFAState(DFAState dfaState, DecisionState decisionState) { // We need to test all predicates, even in DFA states that // uniquely predict alternative. int nalts = decisionState.getNumberOfTransitions(); // Update DFA so reach becomes accept state with (predicate,alt) // pairs if preds found for conflicting alts BitSet altsToCollectPredsFrom = getConflictingAltsOrUniqueAlt(dfaState.configs); SemanticContext[] altToPred = getPredsForAmbigAlts(altsToCollectPredsFrom, dfaState.configs, nalts); if ( altToPred!=null ) { dfaState.predicates = getPredicatePredictions(altsToCollectPredsFrom, altToPred); dfaState.prediction = ATN.INVALID_ALT_NUMBER; // make sure we use preds } else { // There are preds in configs but they might go away // when OR'd together like {p}? || NONE == NONE. If neither // alt has preds, resolve to min alt dfaState.prediction = altsToCollectPredsFrom.nextSetBit(0); } }
protected void predicateDFAState(DFAState dfaState, DecisionState decisionState) { // We need to test all predicates, even in DFA states that // uniquely predict alternative. int nalts = decisionState.getNumberOfTransitions(); // Update DFA so reach becomes accept state with (predicate,alt) // pairs if preds found for conflicting alts BitSet altsToCollectPredsFrom = getConflictingAltsOrUniqueAlt(dfaState.configs); SemanticContext[] altToPred = getPredsForAmbigAlts(altsToCollectPredsFrom, dfaState.configs, nalts); if ( altToPred!=null ) { dfaState.predicates = getPredicatePredictions(altsToCollectPredsFrom, altToPred); dfaState.prediction = ATN.INVALID_ALT_NUMBER; // make sure we use preds } else { // There are preds in configs but they might go away // when OR'd together like {p}? || NONE == NONE. If neither // alt has preds, resolve to min alt dfaState.prediction = altsToCollectPredsFrom.nextSetBit(0); } }
protected void predicateDFAState(DFAState dfaState, DecisionState decisionState) { // We need to test all predicates, even in DFA states that // uniquely predict alternative. int nalts = decisionState.getNumberOfTransitions(); // Update DFA so reach becomes accept state with (predicate,alt) // pairs if preds found for conflicting alts BitSet altsToCollectPredsFrom = getConflictingAltsOrUniqueAlt(dfaState.configs); SemanticContext[] altToPred = getPredsForAmbigAlts(altsToCollectPredsFrom, dfaState.configs, nalts); if ( altToPred!=null ) { dfaState.predicates = getPredicatePredictions(altsToCollectPredsFrom, altToPred); dfaState.prediction = ATN.INVALID_ALT_NUMBER; // make sure we use preds } else { // There are preds in configs but they might go away // when OR'd together like {p}? || NONE == NONE. If neither // alt has preds, resolve to min alt dfaState.prediction = altsToCollectPredsFrom.nextSetBit(0); } }
protected void processParser() { g.decisionLOOK = new ArrayList<IntervalSet[]>(g.atn.getNumberOfDecisions()+1); for (DecisionState s : g.atn.decisionToState) { g.tool.log("LL1", "\nDECISION "+s.decision+" in rule "+g.getRule(s.ruleIndex).name); IntervalSet[] look; if ( s.nonGreedy ) { // nongreedy decisions can't be LL(1) look = new IntervalSet[s.getNumberOfTransitions()+1]; } else { LL1Analyzer anal = new LL1Analyzer(g.atn); look = anal.getDecisionLookahead(s); g.tool.log("LL1", "look=" + Arrays.toString(look)); } assert s.decision + 1 >= g.decisionLOOK.size(); Utils.setSize(g.decisionLOOK, s.decision+1); g.decisionLOOK.set(s.decision, look); g.tool.log("LL1", "LL(1)? " + disjoint(look)); } }
protected void processParser() { g.decisionLOOK = new ArrayList<IntervalSet[]>(g.atn.getNumberOfDecisions()+1); for (DecisionState s : g.atn.decisionToState) { g.tool.log("LL1", "\nDECISION "+s.decision+" in rule "+g.getRule(s.ruleIndex).name); IntervalSet[] look; if ( s.nonGreedy ) { // nongreedy decisions can't be LL(1) look = new IntervalSet[s.getNumberOfTransitions()+1]; } else { LL1Analyzer anal = new LL1Analyzer(g.atn); look = anal.getDecisionLookahead(s); g.tool.log("LL1", "look=" + Arrays.toString(look)); } assert s.decision + 1 >= g.decisionLOOK.size(); Utils.setSize(g.decisionLOOK, s.decision+1); g.decisionLOOK.set(s.decision, look); g.tool.log("LL1", "LL(1)? " + disjoint(look)); } }
protected void processParser() { g.decisionLOOK = new ArrayList<IntervalSet[]>(g.atn.getNumberOfDecisions()+1); for (DecisionState s : g.atn.decisionToState) { g.tool.log("LL1", "\nDECISION "+s.decision+" in rule "+g.getRule(s.ruleIndex).name); IntervalSet[] look; if ( s.nonGreedy ) { // nongreedy decisions can't be LL(1) look = new IntervalSet[s.getNumberOfTransitions()+1]; } else { LL1Analyzer anal = new LL1Analyzer(g.atn); look = anal.getDecisionLookahead(s); g.tool.log("LL1", "look=" + Arrays.toString(look)); } assert s.decision + 1 >= g.decisionLOOK.size(); Utils.setSize(g.decisionLOOK, s.decision+1); g.decisionLOOK.set(s.decision, look); g.tool.log("LL1", "LL(1)? " + disjoint(look)); } }
protected void processParser() { g.decisionLOOK = new ArrayList<IntervalSet[]>(g.atn.getNumberOfDecisions()+1); for (DecisionState s : g.atn.decisionToState) { g.tool.log("LL1", "\nDECISION "+s.decision+" in rule "+g.getRule(s.ruleIndex).name); IntervalSet[] look; if ( s.nonGreedy ) { // nongreedy decisions can't be LL(1) look = new IntervalSet[s.getNumberOfTransitions()+1]; } else { LL1Analyzer anal = new LL1Analyzer(g.atn); look = anal.getDecisionLookahead(s); g.tool.log("LL1", "look=" + Arrays.toString(look)); } assert s.decision + 1 >= g.decisionLOOK.size(); Utils.setSize(g.decisionLOOK, s.decision+1); g.decisionLOOK.set(s.decision, look); g.tool.log("LL1", "LL(1)? " + disjoint(look)); } }
protected void processParser() { g.decisionLOOK = new ArrayList<IntervalSet[]>(g.atn.getNumberOfDecisions()+1); for (DecisionState s : g.atn.decisionToState) { g.tool.log("LL1", "\nDECISION "+s.decision+" in rule "+g.getRule(s.ruleIndex).name); IntervalSet[] look; if ( s.nonGreedy ) { // nongreedy decisions can't be LL(1) look = new IntervalSet[s.getNumberOfTransitions()+1]; } else { LL1Analyzer anal = new LL1Analyzer(g.atn); look = anal.getDecisionLookahead(s); g.tool.log("LL1", "look=" + Arrays.toString(look)); } assert s.decision + 1 >= g.decisionLOOK.size(); Utils.setSize(g.decisionLOOK, s.decision+1); g.decisionLOOK.set(s.decision, look); g.tool.log("LL1", "LL(1)? " + disjoint(look)); } }
protected int visitDecisionState(DecisionState p) { int predictedAlt = super.visitDecisionState(p); if( p.getNumberOfTransitions() > 1) {
predicateDFAState(newState, configs, decisionState.getNumberOfTransitions());
checkCondition(decisionState.getNumberOfTransitions() <= 1 || decisionState.decision >= 0);
checkCondition(decisionState.getNumberOfTransitions() <= 1 || decisionState.decision >= 0);
checkCondition(decisionState.getNumberOfTransitions() <= 1 || decisionState.decision >= 0);
checkCondition(decisionState.getNumberOfTransitions() <= 1 || decisionState.decision >= 0);