public NFAState endStateOfAlternative(NFAState alt) { int endOfBlockStateNumber = alt.endOfBlockStateNumber; NFAState state = alt; while(state.stateNumber != endOfBlockStateNumber) { state = (NFAState)state.transition(0).target; } return state; } }
public boolean isAlternativeTransitionEndingAtSameState(NFAState state) { NFAState endState = endStateOfAlternative((NFAState)state.transition(0).target); for(int t=1; t<state.getNumberOfTransitions(); t++) { Transition transition = state.transition(t); NFAState newEndState = endStateOfAlternative((NFAState)transition.target); if(!endState.equals(newEndState)) return false; } return true; }
public void recursiveAnalysis(NFAState state) { if(processedStates.contains(state)) return; processedStates.add(state); for(int t=0; t<state.getNumberOfTransitions(); t++) { Transition transition = state.transition(t); addIncomingTransitionToState((NFAState)transition.target); recursiveAnalysis((NFAState)transition.target); } }
public boolean hasOneEpsilonTransitionOnly(NFAState state) { return state.getNumberOfTransitions() == 1 && state.transition(0).isEpsilon(); }
protected void addFollowTransition(String ruleName, NFAState following) { //System.out.println("adding follow link to rule "+ruleName); // find last link in FOLLOW chain emanating from rule Rule r = grammar.getRule(ruleName); NFAState end = r.stopState; while ( end.transition(1)!=null ) { end = (NFAState)end.transition(1).target; } if ( end.transition(0)!=null ) { // already points to a following node // gotta add another node to keep edges to a max of 2 NFAState n = factory.newState(); Transition e = new Transition(Label.EPSILON, n); end.addTransition(e); end = n; } Transition followEdge = new Transition(Label.EPSILON, following); end.addTransition(followEdge); }
protected void addFollowTransition( String ruleName, NFAState following ) { //System.Console.Out.WriteLine( "adding follow link to rule " + ruleName ); // find last link in FOLLOW chain emanating from rule Rule r = grammar.getRule( ruleName ); NFAState end = r.stopState; while ( end.transition( 1 ) != null ) { end = (NFAState)end.transition( 1 ).target; } if ( end.transition( 0 ) != null ) { // already points to a following node // gotta add another node to keep edges to a max of 2 NFAState n = factory.newState(); Transition e = new Transition( Label.EPSILON, n ); end.addTransition( e ); end = n; } Transition followEdge = new Transition( Label.EPSILON, following ); end.addTransition( followEdge ); }
protected void addFollowTransition( String ruleName, NFAState following ) { //System.Console.Out.WriteLine( "adding follow link to rule " + ruleName ); // find last link in FOLLOW chain emanating from rule Rule r = grammar.getRule( ruleName ); NFAState end = r.stopState; while ( end.transition( 1 ) != null ) { end = (NFAState)end.transition( 1 ).target; } if ( end.transition( 0 ) != null ) { // already points to a following node // gotta add another node to keep edges to a max of 2 NFAState n = factory.newState(); Transition e = new Transition( Label.EPSILON, n ); end.addTransition( e ); end = n; } Transition followEdge = new Transition( Label.EPSILON, following ); end.addTransition( followEdge ); }
public boolean hasOneOrMoreEpsilonTransitionOnly(NFAState state) { for(int t=0; t<state.getNumberOfTransitions(); t++) { Transition transition = state.transition(t); if(!transition.isEpsilon()) return false; } return state.getNumberOfTransitions()>0; }
public boolean hasMoreThanOneEpsilonTransitionOnly(NFAState state) { for(int t=0; t<state.getNumberOfTransitions(); t++) { Transition transition = state.transition(t); if(!transition.isEpsilon()) return false; } return state.getNumberOfTransitions()>1; }
if(g != null) { Rule r = g.getRule(Grammar.ARTIFICIAL_TOKENS_RULENAME); NFAState s = (NFAState)r.startState.transition(0).target; if(s == null) { System.err.println("NFAState s is null for rule "+r.name);
Transition t = p.transition(j); if (!t.isEpsilon() && !t.label.getSet().and(label).isNil() && next.contains(t.target)) {
Transition t = p.transition(j); if (!t.isEpsilon() && !t.label.getSet().and(label).isNil() && next.contains(t.target)) {
Transition t = p.transition(j); if (!t.isEpsilon() && !t.label.getSet().and(label).isNil() && next.contains(t.target)) {
FAState parentState = js; Transition transition = state.transition(t); NFAState target = (NFAState)transition.target; if(targetStateIsInAnotherRule(transition)) {
Transition transition = state.transition(t); if(targetStateIsInAnotherRule(transition)) { NFAState target = targetStateOfTransition(transition);
@Override public String getDOTString() throws Exception { ANTLRGrammarEngine eg = window.getGrammarEngine().getANTLRGrammarEngine(); eg.analyze(); Grammar g = eg.getLexerGrammar(); if(g == null) { throw new Exception("Cannot show tokens DFA because there is no lexer grammar"); } Rule r = g.getRule(Grammar.ARTIFICIAL_TOKENS_RULENAME); NFAState s = (NFAState)r.startState.transition(0).target; DFA dfa = g.getLookaheadDFA(s.getDecisionNumber()); DOTGenerator dg = new DOTGenerator(g); dg.setArrowheadType("none"); dg.setRankdir("LR"); // Left-to-right return dg.getDOT( dfa.startState ); }
NFAState afterDOWN = (NFAState)((GrammarAST)retval.start).NFATreeDownState.transition(0).target; LookaheadSet s = grammar.LOOK(afterDOWN); if ( s.member(Label.UP) ) {
NFAState afterDOWN = (NFAState)((GrammarAST)retval.start).NFATreeDownState.transition(0).target; LookaheadSet s = grammar.LOOK(afterDOWN); if ( s.member(Label.UP) ) {
NFAState afterDOWN = (NFAState)tree_AST_in.NFATreeDownState.transition(0).target; LookaheadSet s = grammar.LOOK(afterDOWN); if ( s.member(Label.UP) ) {
_t = _retTree; Transition setTrans = gset.left.transition(0); elements.addAll(setTrans.label.getSet());