void NFA::debugPrintDot() const { dataLogF("digraph NFA_Transitions {\n"); dataLogF(" rankdir=LR;\n"); dataLogF(" node [shape=circle];\n"); dataLogF(" {\n"); for (unsigned i = 0; i < m_nodes.size(); ++i) { dataLogF(" %d [label=<Node %d", i, i); const Vector<uint64_t>& finalRules = m_nodes[i].finalRuleIds; if (!finalRules.isEmpty()) { dataLogF("<BR/>(Final: "); for (unsigned ruleIndex = 0; ruleIndex < finalRules.size(); ++ruleIndex) { if (ruleIndex) dataLogF(", "); dataLogF("%llu", finalRules[ruleIndex]); } dataLogF(")"); } dataLogF(">]"); if (!finalRules.isEmpty()) dataLogF(" [shape=doublecircle]"); dataLogF(";\n"); } dataLogF(" }\n"); dataLogF(" {\n"); for (unsigned i = 0; i < m_nodes.size(); ++i) printTransitions(m_nodes, i, epsilonTransitionCharacter); dataLogF(" }\n"); dataLogF("}\n"); }
void DFA::debugPrintDot() const { dataLogF("digraph DFA_Transitions {\n"); dataLogF(" rankdir=LR;\n"); dataLogF(" node [shape=circle];\n"); dataLogF(" {\n"); for (unsigned i = 0; i < nodes.size(); ++i) { if (nodes[i].isKilled()) continue; dataLogF(" %d [label=<Node %d", i, i); const Vector<uint64_t>& actions = nodes[i].actions(*this); if (!actions.isEmpty()) { dataLogF("<BR/>Actions: "); for (unsigned actionIndex = 0; actionIndex < actions.size(); ++actionIndex) { if (actionIndex) dataLogF(", "); dataLogF("%llu", actions[actionIndex]); } } dataLogF(">]"); if (!actions.isEmpty()) dataLogF(" [shape=doublecircle]"); dataLogF(";\n"); } dataLogF(" }\n"); dataLogF(" {\n"); for (unsigned i = 0; i < nodes.size(); ++i) printTransitions(*this, i); dataLogF(" }\n"); dataLogF("}\n"); }