protected void generateNFAs(Grammar g) { DOTGenerator dotGenerator = new DOTGenerator(g); Collection rules = g.getAllImportedRules(); rules.addAll(g.getRules()); for (Iterator itr = rules.iterator(); itr.hasNext();) { Rule r = (Rule) itr.next(); try { String dot = dotGenerator.getDOT(r.startState); if (dot != null) { writeDOTFile(g, r, dot); } } catch (IOException ioe) { ErrorManager.error(ErrorManager.MSG_CANNOT_WRITE_FILE, ioe); } } }
@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 ); }
st = stlib.getInstanceOf("state"); st.add("name", getStateLabel(s)); dot.add("states", st); st.add("label", getEdgeLabel(edge)); st.add("src", getStateLabel(s)); st.add("target", getStateLabel(edge.target)); st.add("arrowhead", arrowhead); dot.add("edges", st); walkCreatingDFADOT(dot, (DFAState)edge.target); // keep walkin'
stateST = stlib.getInstanceOf("org/antlr/tool/templates/dot/state"); stateST.setAttribute("name", getStateLabel(s)); dot.setAttribute("states", stateST); NFAState alt = (NFAState)s; while ( alt!=null ) { rankST.setAttribute("states", getStateLabel(alt)); if ( alt.transition[1] !=null ) { alt = (NFAState)alt.transition[1].target; edgeST.setAttribute("label", "<"+rr.rule.name+">"); edgeST.setAttribute("src", getStateLabel(s)); edgeST.setAttribute("target", getStateLabel(rr.followState)); edgeST.setAttribute("arrowhead", arrowhead); dot.setAttribute("edges", edgeST); walkRuleNFACreatingDOT(dot, rr.followState); continue; edgeST = stlib.getInstanceOf("org/antlr/tool/templates/dot/edge"); edgeST.setAttribute("label", getEdgeLabel(edge)); edgeST.setAttribute("src", getStateLabel(s)); edgeST.setAttribute("target", getStateLabel(edge.target)); edgeST.setAttribute("arrowhead", arrowhead); dot.setAttribute("edges", edgeST); walkRuleNFACreatingDOT(dot, edge.target); // keep walkin'
/** Return a String containing a DOT description that, when displayed, * will show the incoming state machine visually. All nodes reachable * from startState will be included. */ public String getDOT(State startState) { if ( startState==null ) { return null; } // The output DOT graph for visualization StringTemplate dot = null; markedStates = new HashSet(); if ( startState instanceof DFAState ) { dot = stlib.getInstanceOf("org/antlr/tool/templates/dot/dfa"); dot.setAttribute("startState", Utils.integer(startState.stateNumber)); dot.setAttribute("useBox", Boolean.valueOf(Tool.internalOption_ShowNFAConfigsInDFA)); walkCreatingDFADOT(dot, (DFAState)startState); } else { dot = stlib.getInstanceOf("org/antlr/tool/templates/dot/nfa"); dot.setAttribute("startState", Utils.integer(startState.stateNumber)); walkRuleNFACreatingDOT(dot, startState); } dot.setAttribute("rankdir", rankdir); return dot.toString(); }
st = stlib.getInstanceOf("state"); st.add("name", getStateLabel(s)); dot.add("states", st); st.add("label", getEdgeLabel(edge)); st.add("src", getStateLabel(s)); st.add("target", getStateLabel(edge.target)); st.add("arrowhead", arrowhead); dot.add("edges", st); walkCreatingDFADOT(dot, (DFAState)edge.target); // keep walkin'
stateST = stlib.getInstanceOf("state"); stateST.add("name", getStateLabel(s)); dot.add("states", stateST); NFAState alt = (NFAState)s; while ( alt!=null ) { rankST.add("states", getStateLabel(alt)); if ( alt.transition[1] !=null ) { alt = (NFAState)alt.transition[1].target; edgeST.add("label", "<" + rr.rule.name + ">"); edgeST.add("src", getStateLabel(s)); edgeST.add("target", getStateLabel(rr.followState)); edgeST.add("arrowhead", arrowhead); dot.add("edges", edgeST); walkRuleNFACreatingDOT(dot, rr.followState); continue; edgeST = stlib.getInstanceOf("edge"); edgeST.add("label", getEdgeLabel(edge)); edgeST.add("src", getStateLabel(s)); edgeST.add("target", getStateLabel(edge.target)); edgeST.add("arrowhead", arrowhead); dot.add("edges", edgeST); walkRuleNFACreatingDOT(dot, edge.target); // keep walkin'
@Override public String getDOTString() throws Exception { DecisionDFAEngine engine = window.decisionDFAEngine; Grammar g; int adjustedColumn = getDecisionColumn(g = engine.getDiscoveredParserGrammar()); if(adjustedColumn == -1) adjustedColumn = getDecisionColumn(g = engine.getDiscoveredLexerGrammar()); if(adjustedColumn == -1) throw new Exception("No decision in the current line"); CodeGenerator generator = new CodeGenerator(new Tool(), g, (String) g.getOption("language")); DFA dfa = g.getLookaheadDFAFromPositionInFile(line, adjustedColumn); decisionNumber = dfa.getDecisionNumber(); DOTGenerator dg = new DOTGenerator(g); g.setCodeGenerator(generator); dg.setArrowheadType("none"); dg.setRankdir("LR"); // Left-to-right return dg.getDOT( dfa.startState ); }
/** Return a String containing a DOT description that, when displayed, * will show the incoming state machine visually. All nodes reachable * from startState will be included. */ public String getDOT(State startState) { if ( startState==null ) { return null; } // The output DOT graph for visualization StringTemplate dot = null; markedStates = new HashSet(); if ( startState instanceof DFAState ) { dot = stlib.getInstanceOf("org/antlr/tool/templates/dot/dfa"); dot.setAttribute("startState", Utils.integer(startState.stateNumber)); dot.setAttribute("useBox", Boolean.valueOf(Tool.internalOption_ShowNFAConfigsInDFA)); walkCreatingDFADOT(dot, (DFAState)startState); } else { dot = stlib.getInstanceOf("org/antlr/tool/templates/dot/nfa"); dot.setAttribute("startState", Utils.integer(startState.stateNumber)); walkRuleNFACreatingDOT(dot, startState); } dot.setAttribute("rankdir", rankdir); return dot.toString(); }
protected void generateNFAs(Grammar g) { DOTGenerator dotGenerator = new DOTGenerator(g); Collection rules = g.getAllImportedRules(); rules.addAll(g.getRules()); for (Iterator itr = rules.iterator(); itr.hasNext();) { Rule r = (Rule) itr.next(); try { String dot = dotGenerator.getDOT(r.startState); if (dot != null) { writeDOTFile(g, r, dot); } } catch (IOException ioe) { ErrorManager.error(ErrorManager.MSG_CANNOT_WRITE_FILE, ioe); } } }
st = stlib.getInstanceOf("org/antlr/tool/templates/dot/state"); st.setAttribute("name", getStateLabel(s)); dot.setAttribute("states", st); st.setAttribute("label", getEdgeLabel(edge)); st.setAttribute("src", getStateLabel(s)); st.setAttribute("target", getStateLabel(edge.target)); st.setAttribute("arrowhead", arrowhead); dot.setAttribute("edges", st); walkCreatingDFADOT(dot, (DFAState)edge.target); // keep walkin'
stateST = stlib.getInstanceOf("state"); stateST.add("name", getStateLabel(s)); dot.add("states", stateST); NFAState alt = (NFAState)s; while ( alt!=null ) { rankST.add("states", getStateLabel(alt)); if ( alt.transition[1] !=null ) { alt = (NFAState)alt.transition[1].target; edgeST.add("label", "<" + rr.rule.name + ">"); edgeST.add("src", getStateLabel(s)); edgeST.add("target", getStateLabel(rr.followState)); edgeST.add("arrowhead", arrowhead); dot.add("edges", edgeST); walkRuleNFACreatingDOT(dot, rr.followState); continue; edgeST = stlib.getInstanceOf("edge"); edgeST.add("label", getEdgeLabel(edge)); edgeST.add("src", getStateLabel(s)); edgeST.add("target", getStateLabel(edge.target)); edgeST.add("arrowhead", arrowhead); dot.add("edges", edgeST); walkRuleNFACreatingDOT(dot, edge.target); // keep walkin'
/** Return a String containing a DOT description that, when displayed, * will show the incoming state machine visually. All nodes reachable * from startState will be included. */ public String getDOT(State startState) { if ( startState==null ) { return null; } // The output DOT graph for visualization ST dot; markedStates = new HashSet<Object>(); if ( startState instanceof DFAState ) { dot = stlib.getInstanceOf("dfa"); dot.add("startState", Utils.integer(startState.stateNumber)); dot.add("useBox", Tool.internalOption_ShowNFAConfigsInDFA); walkCreatingDFADOT(dot, (DFAState)startState); } else { dot = stlib.getInstanceOf("nfa"); dot.add("startState", Utils.integer(startState.stateNumber)); walkRuleNFACreatingDOT(dot, startState); } dot.add("rankdir", rankdir); return dot.render(); }
protected void generateNFAs(Grammar g) { DOTGenerator dotGenerator = new DOTGenerator(g); Collection<Rule> rules = new HashSet<Rule>(g.getAllImportedRules()); rules.addAll(g.getRules()); for (Rule r : rules) { try { String dot = dotGenerator.getDOT(r.startState); if (dot != null) { writeDOTFile(g, r, dot); } } catch (IOException ioe) { ErrorManager.error(ErrorManager.MSG_CANNOT_WRITE_FILE, ioe); } } }
st = stlib.getInstanceOf("org/antlr/tool/templates/dot/state"); st.setAttribute("name", getStateLabel(s)); dot.setAttribute("states", st); st.setAttribute("label", getEdgeLabel(edge)); st.setAttribute("src", getStateLabel(s)); st.setAttribute("target", getStateLabel(edge.target)); st.setAttribute("arrowhead", arrowhead); dot.setAttribute("edges", st); walkCreatingDFADOT(dot, (DFAState)edge.target); // keep walkin'
stateST = stlib.getInstanceOf("org/antlr/tool/templates/dot/state"); stateST.setAttribute("name", getStateLabel(s)); dot.setAttribute("states", stateST); NFAState alt = (NFAState)s; while ( alt!=null ) { rankST.setAttribute("states", getStateLabel(alt)); if ( alt.transition[1] !=null ) { alt = (NFAState)alt.transition[1].target; edgeST.setAttribute("label", "<"+rr.rule.name+">"); edgeST.setAttribute("src", getStateLabel(s)); edgeST.setAttribute("target", getStateLabel(rr.followState)); edgeST.setAttribute("arrowhead", arrowhead); dot.setAttribute("edges", edgeST); walkRuleNFACreatingDOT(dot, rr.followState); continue; edgeST = stlib.getInstanceOf("org/antlr/tool/templates/dot/edge"); edgeST.setAttribute("label", getEdgeLabel(edge)); edgeST.setAttribute("src", getStateLabel(s)); edgeST.setAttribute("target", getStateLabel(edge.target)); edgeST.setAttribute("arrowhead", arrowhead); dot.setAttribute("edges", edgeST); walkRuleNFACreatingDOT(dot, edge.target); // keep walkin'
/** Return a String containing a DOT description that, when displayed, * will show the incoming state machine visually. All nodes reachable * from startState will be included. */ public String getDOT(State startState) { if ( startState==null ) { return null; } // The output DOT graph for visualization ST dot; markedStates = new HashSet<Object>(); if ( startState instanceof DFAState ) { dot = stlib.getInstanceOf("dfa"); dot.add("startState", Utils.integer(startState.stateNumber)); dot.add("useBox", Tool.internalOption_ShowNFAConfigsInDFA); walkCreatingDFADOT(dot, (DFAState)startState); } else { dot = stlib.getInstanceOf("nfa"); dot.add("startState", Utils.integer(startState.stateNumber)); walkRuleNFACreatingDOT(dot, startState); } dot.add("rankdir", rankdir); return dot.render(); }
protected void generateNFAs(Grammar g) { DOTGenerator dotGenerator = new DOTGenerator(g); Collection<Rule> rules = new HashSet<Rule>(g.getAllImportedRules()); rules.addAll(g.getRules()); for (Rule r : rules) { try { String dot = dotGenerator.getDOT(r.startState); if (dot != null) { writeDOTFile(g, r, dot); } } catch (IOException ioe) { ErrorManager.error(ErrorManager.MSG_CANNOT_WRITE_FILE, ioe); } } }
public void generateDFAs(Grammar g) { for (int d = 1; d <= g.getNumberOfDecisions(); d++) { DFA dfa = g.getLookaheadDFA(d); if (dfa == null) { continue; // not there for some reason, ignore } DOTGenerator dotGenerator = new DOTGenerator(g); String dot = dotGenerator.getDOT(dfa.startState); String dotFileName = g.name + "." + "dec-" + d; if (g.implicitLexer) { dotFileName = g.name + Grammar.grammarTypeToFileNameSuffix[g.type] + "." + "dec-" + d; } try { writeDOTFile(g, dotFileName, dot); } catch (IOException ioe) { ErrorManager.error(ErrorManager.MSG_CANNOT_GEN_DOT_FILE, dotFileName, ioe); } } }
public void generateDFAs(Grammar g) { for (int d = 1; d <= g.getNumberOfDecisions(); d++) { DFA dfa = g.getLookaheadDFA(d); if (dfa == null) { continue; // not there for some reason, ignore } DOTGenerator dotGenerator = new DOTGenerator(g); String dot = dotGenerator.getDOT(dfa.startState); String dotFileName = g.name + "." + "dec-" + d; if (g.implicitLexer) { dotFileName = g.name + Grammar.grammarTypeToFileNameSuffix[g.type] + "." + "dec-" + d; } try { writeDOTFile(g, dotFileName, dot); } catch (IOException ioe) { ErrorManager.error(ErrorManager.MSG_CANNOT_GEN_DOT_FILE, dotFileName, ioe); } } }