1 package org.antlr.works.grammar; 2 3 import org.antlr.analysis.DFA; 4 import org.antlr.analysis.NFAState; 5 import org.antlr.tool.DOTGenerator; 6 import org.antlr.tool.Grammar; 7 import org.antlr.tool.Rule; 8 import org.antlr.works.components.grammar.CEditorGrammar; 9 39 40 public class TokensDFA extends GrammarDOTTab { 41 42 public TokensDFA(CEditorGrammar editor) { 43 super(editor); 44 } 45 46 @Override 47 public String getDOTString() throws Exception { 48 EngineGrammar eg = editor.getEngineGrammar(); 49 eg.analyze(); 50 51 Grammar g = eg.getLexerGrammar(); 52 if(g == null) { 53 throw new Exception ("Cannot show tokens DFA because there is no lexer grammar"); 54 } 55 Rule r = g.getRule(Grammar.ARTIFICIAL_TOKENS_RULENAME); 56 NFAState s = (NFAState)r.startState.transition(0).target; 57 DFA dfa = g.getLookaheadDFA(s.getDecisionNumber()); 58 59 DOTGenerator dg = new DOTGenerator(g); 60 dg.setArrowheadType("none"); 61 dg.setRankdir("LR"); return dg.getDOT( dfa.startState ); 63 } 64 65 public String getTabName() { 66 return Grammar.ARTIFICIAL_TOKENS_RULENAME+" DFA"; 67 } 68 69 } 70 | Popular Tags |