protected Node drawAbstractElementTree(AbstractElement ele, Digraph d) { Node n = newNode(ele, aeSwitch.doSwitch(ele)); d.add(n); for (EObject c : ele.eContents()) if (c instanceof AbstractElement) { drawAbstractElementTree((AbstractElement) c, d); d.add(drawGrammarContainementEdge(ele, (AbstractElement) c)); } return n; }
@Override protected Props drawObject(Object obj) { if (obj == null) throw new NullPointerException("Obj null"); if (obj instanceof Grammar) return drawGrammar((Grammar) obj, new Digraph()); if (obj instanceof AbstractRule) return drawRule((AbstractRule) obj, new Digraph()); throw new RuntimeException("Unknown type: " + obj.getClass().getName()); }
@Override @SuppressWarnings({ "unchecked" }) protected Props drawObject(Object obj) { if (obj == null) throw new NullPointerException("Obj null"); if (obj instanceof TransitionMatcher) { TransitionMatcher<IElementMatcherProvider.IElementPattern> m = (TransitionMatcher<IElementMatcherProvider.IElementPattern>) obj; nfaProvider = m.nfaProvider; return super.drawObject(m.getGrammar().getGrammar()); } return super.drawObject(obj); }
protected Digraph drawRule(AbstractRule rule, Digraph d) { if (rule.getType().getClassifier() instanceof EClass) drawAbstractElementTree(rule.getAlternatives(), d); return d; }
protected Digraph drawGrammar(Grammar g, Digraph d) { for (AbstractRule r : GrammarUtil.allRules(g)) drawRule(r, d); return d; }
@Override protected Node drawAbstractElementTree(AbstractElement ele, Digraph d) { Node n = super.drawAbstractElementTree(ele, d); DefaultNFAState nfas = nfaProvider.getNFA(ele); for (DefaultNFATransition t : nfas.getOutgoing()) d.add(drawFollowerEdge(ele, t, false)); for (DefaultNFATransition t : nfas.getOutgoingAfterReturn()) d.add(drawFollowerEdge(ele, t, true)); if (nfas.getOutgoing().size() == 0 && nfas.getOutgoingAfterReturn().size() == 0 && !nfas.isEndState()) n.setStyle("dotted"); if (nfas.isEndState()) n.put("peripheries", "2"); return n; }
@Override protected Node drawAbstractElementTree(AbstractElement grammarElement, Digraph digraph) { Node node = super.drawAbstractElementTree(grammarElement, digraph); MatcherState nfas = nfaProvider.getNFA(grammarElement); for (MatcherTransition outgoing : nfas.getOutgoing()) digraph.add(drawFollowerEdge(grammarElement, outgoing, false)); for (MatcherTransition outgoingAfterReturn : nfas.getOutgoingAfterReturn()) digraph.add(drawFollowerEdge(grammarElement, outgoingAfterReturn, true)); // for (MatcherTransition outgoingToNextRule : nfas.getOutgoingToNextRule()) // digraph.add(drawOutgoingToNextRuel(outgoingToNextRule)); if (nfas.isEndState()) node.put("peripheries", "2"); if (!nfas.hasTransitions()) node.setStyle("dotted"); return node; }
@Override protected Node drawAbstractElementTree(AbstractElement grammarElement, Digraph digraph) { Node node = super.drawAbstractElementTree(grammarElement, digraph); TreeConstState nfas = nfaProvider.getNFA(grammarElement); for (TreeConstTransition outgoing : nfas.getOutgoing()) digraph.add(drawFollowerEdge(grammarElement, outgoing, false)); for (TreeConstTransition outgoingAfterReturn : nfas.getOutgoingAfterReturn()) digraph.add(drawFollowerEdge(grammarElement, outgoingAfterReturn, true)); if (nfas.getStatusInternal() != Status.ENABLED) node.setStyle("dashed"); if (nfas.isEndState()) node.put("peripheries", "2"); setStatusStyle(node, nfas.getStatus()); node.setLabel(nfas + node.get("label")); return node; }