DFAState s0 = newState(); startState = s0; nfa = decisionStartState.nfa; this.decisionNumber = decisionNumber; this.decisionNFAStartState = decisionStartState; initAltRelatedInfo(); unreachableAlts = null; for (Map.Entry<IntervalSet, List<Integer>> entry : edgeMap.entrySet()) { DFAState s = newState(); s.k = 1; Label e = getLabelForSet(edge); s0.addTransition(s, e); if ( alts.size()==1 ) { s.acceptState = true; int alt = alts.get(0); setAcceptState(alt, s); s.cachedUniquelyPredicatedAlt = alt; int alt = (int)alts.get(i); s.cachedUniquelyPredicatedAlt = NFA.INVALID_ALT_NUMBER; DFAState predDFATarget = getAcceptState(alt); if ( predDFATarget==null ) { predDFATarget = newState(); // create if not there. predDFATarget.acceptState = true; predDFATarget.cachedUniquelyPredicatedAlt = alt; setAcceptState(alt, predDFATarget);
/** From list of lookahead sets (one per alt in decision), create * an LL(1) DFA. One edge per set. * * s0-{alt1}->:o=>1 * | \ * | -{alt2}->:o=>2 * | * ... */ @SuppressWarnings("OverridableMethodCallInConstructor") public LL1DFA(int decisionNumber, NFAState decisionStartState, LookaheadSet[] altLook) { DFAState s0 = newState(); startState = s0; nfa = decisionStartState.nfa; nAlts = nfa.grammar.getNumberOfAltsForDecisionNFA(decisionStartState); this.decisionNumber = decisionNumber; this.decisionNFAStartState = decisionStartState; initAltRelatedInfo(); unreachableAlts = null; for (int alt=1; alt<altLook.length; alt++) { DFAState acceptAltState = newState(); acceptAltState.acceptState = true; setAcceptState(alt, acceptAltState); acceptAltState.k = 1; acceptAltState.cachedUniquelyPredicatedAlt = alt; Label e = getLabelForSet(altLook[alt].tokenTypeSet); s0.addTransition(acceptAltState, e); } }
System.out.println("decision "+decision+" is simple LL(1)"); DFA lookaheadDFA = new LL1DFA(decision, decisionStartState, altLook); setLookaheadDFA(decision, lookaheadDFA); updateLineColumnToLookaheadDFAMap(lookaheadDFA); DFA lookaheadDFA = new LL1DFA(decision, decisionStartState, edgeMap); setLookaheadDFA(decision, lookaheadDFA);
/** From list of lookahead sets (one per alt in decision), create * an LL(1) DFA. One edge per set. * * s0-{alt1}->:o=>1 * | \ * | -{alt2}->:o=>2 * | * ... */ public LL1DFA(int decisionNumber, NFAState decisionStartState, LookaheadSet[] altLook) { DFAState s0 = newState(); startState = s0; nfa = decisionStartState.nfa; nAlts = nfa.grammar.getNumberOfAltsForDecisionNFA(decisionStartState); this.decisionNumber = decisionNumber; this.decisionNFAStartState = decisionStartState; initAltRelatedInfo(); unreachableAlts = null; for (int alt=1; alt<altLook.length; alt++) { DFAState acceptAltState = newState(); acceptAltState.acceptState = true; setAcceptState(alt, acceptAltState); acceptAltState.k = 1; acceptAltState.cachedUniquelyPredicatedAlt = alt; Label e = getLabelForSet(altLook[alt].tokenTypeSet); s0.addTransition(acceptAltState, e); } }
System.out.println("decision "+decision+" is simple LL(1)"); DFA lookaheadDFA = new LL1DFA(decision, decisionStartState, altLook); setLookaheadDFA(decision, lookaheadDFA); updateLineColumnToLookaheadDFAMap(lookaheadDFA); DFA lookaheadDFA = new LL1DFA(decision, decisionStartState, edgeMap); setLookaheadDFA(decision, lookaheadDFA);
DFAState s0 = newState(); startState = s0; nfa = decisionStartState.nfa; this.decisionNumber = decisionNumber; this.decisionNFAStartState = decisionStartState; initAltRelatedInfo(); unreachableAlts = null; for (Map.Entry<IntervalSet, List<Integer>> entry : edgeMap.entrySet()) { DFAState s = newState(); s.k = 1; Label e = getLabelForSet(edge); s0.addTransition(s, e); if ( alts.size()==1 ) { s.acceptState = true; int alt = alts.get(0); setAcceptState(alt, s); s.cachedUniquelyPredicatedAlt = alt; int alt = (int)alts.get(i); s.cachedUniquelyPredicatedAlt = NFA.INVALID_ALT_NUMBER; DFAState predDFATarget = getAcceptState(alt); if ( predDFATarget==null ) { predDFATarget = newState(); // create if not there. predDFATarget.acceptState = true; predDFATarget.cachedUniquelyPredicatedAlt = alt; setAcceptState(alt, predDFATarget);
/** From list of lookahead sets (one per alt in decision), create * an LL(1) DFA. One edge per set. * * s0-{alt1}->:o=>1 * | \ * | -{alt2}->:o=>2 * | * ... */ public LL1DFA(int decisionNumber, NFAState decisionStartState, LookaheadSet[] altLook) { DFAState s0 = newState(); startState = s0; nfa = decisionStartState.nfa; nAlts = nfa.grammar.getNumberOfAltsForDecisionNFA(decisionStartState); this.decisionNumber = decisionNumber; this.decisionNFAStartState = decisionStartState; initAltRelatedInfo(); unreachableAlts = null; for (int alt=1; alt<altLook.length; alt++) { DFAState acceptAltState = newState(); acceptAltState.acceptState = true; setAcceptState(alt, acceptAltState); acceptAltState.k = 1; acceptAltState.cachedUniquelyPredicatedAlt = alt; Label e = getLabelForSet(altLook[alt].tokenTypeSet); s0.addTransition(acceptAltState, e); } }
System.out.println("decision "+decision+" is simple LL(1)"); DFA lookaheadDFA = new LL1DFA(decision, decisionStartState, altLook); setLookaheadDFA(decision, lookaheadDFA); updateLineColumnToLookaheadDFAMap(lookaheadDFA); DFA lookaheadDFA = new LL1DFA(decision, decisionStartState, edgeMap); setLookaheadDFA(decision, lookaheadDFA);
DFAState s0 = newState(); startState = s0; nfa = decisionStartState.nfa; this.decisionNumber = decisionNumber; this.decisionNFAStartState = decisionStartState; initAltRelatedInfo(); unreachableAlts = null; for (Iterator it = edgeMap.keySet().iterator(); it.hasNext();) { DFAState s = newState(); s.k = 1; Label e = getLabelForSet(edge); s0.addTransition(s, e); if ( alts.size()==1 ) { s.acceptState = true; int alt = alts.get(0); setAcceptState(alt, s); s.cachedUniquelyPredicatedAlt = alt; int alt = (int)alts.get(i); s.cachedUniquelyPredicatedAlt = NFA.INVALID_ALT_NUMBER; DFAState predDFATarget = getAcceptState(alt); if ( predDFATarget==null ) { predDFATarget = newState(); // create if not there. predDFATarget.acceptState = true; predDFATarget.cachedUniquelyPredicatedAlt = alt; setAcceptState(alt, predDFATarget);
/** From list of lookahead sets (one per alt in decision), create * an LL(1) DFA. One edge per set. * * s0-{alt1}->:o=>1 * | \ * | -{alt2}->:o=>2 * | * ... */ @SuppressWarnings("OverridableMethodCallInConstructor") public LL1DFA(int decisionNumber, NFAState decisionStartState, LookaheadSet[] altLook) { DFAState s0 = newState(); startState = s0; nfa = decisionStartState.nfa; nAlts = nfa.grammar.getNumberOfAltsForDecisionNFA(decisionStartState); this.decisionNumber = decisionNumber; this.decisionNFAStartState = decisionStartState; initAltRelatedInfo(); unreachableAlts = null; for (int alt=1; alt<altLook.length; alt++) { DFAState acceptAltState = newState(); acceptAltState.acceptState = true; setAcceptState(alt, acceptAltState); acceptAltState.k = 1; acceptAltState.cachedUniquelyPredicatedAlt = alt; Label e = getLabelForSet(altLook[alt].tokenTypeSet); s0.addTransition(acceptAltState, e); } }
System.out.println("decision "+decision+" is simple LL(1)"); DFA lookaheadDFA = new LL1DFA(decision, decisionStartState, altLook); setLookaheadDFA(decision, lookaheadDFA); updateLineColumnToLookaheadDFAMap(lookaheadDFA); DFA lookaheadDFA = new LL1DFA(decision, decisionStartState, edgeMap); setLookaheadDFA(decision, lookaheadDFA);
DFAState s0 = newState(); startState = s0; nfa = decisionStartState.nfa; this.decisionNumber = decisionNumber; this.decisionNFAStartState = decisionStartState; initAltRelatedInfo(); unreachableAlts = null; for (Iterator it = edgeMap.keySet().iterator(); it.hasNext();) { DFAState s = newState(); s.k = 1; Label e = getLabelForSet(edge); s0.addTransition(s, e); if ( alts.size()==1 ) { s.acceptState = true; int alt = alts.get(0); setAcceptState(alt, s); s.cachedUniquelyPredicatedAlt = alt; int alt = (int)alts.get(i); s.cachedUniquelyPredicatedAlt = NFA.INVALID_ALT_NUMBER; DFAState predDFATarget = getAcceptState(alt); if ( predDFATarget==null ) { predDFATarget = newState(); // create if not there. predDFATarget.acceptState = true; predDFATarget.cachedUniquelyPredicatedAlt = alt; setAcceptState(alt, predDFATarget);