I\'m building a epsilon NFA to recognize a regular expression using the canonical construction. I\'m using subgraphs to group various parts of the regular expression. The * oper
Here's how I'd write that graph:
rankdir=LR
and added rank=same
only for nodes 0/1 and nodes 2/3.constraint=false
to the edges going against the direction of the graph - the one going from node 4 to node 5, and the one from node 6 to node 3.Here the source:
digraph G {
0 [label = "start", shape = none];
node [shape = circle];
1 [label = "q1"];
2 [label = "q2"];
3 [label = "q3"];
4 [label = "q4"];
5 [label = "q5"];
6 [label = "q6", shape = doublecircle];
{rank = same; 0 -> 1; }
1 -> 2 [label = "0"];
{rank = same; 2 -> 3 [label = "ε"]; }
4 -> 5 [label = "1"];
edge [label = "ε"];
3 -> 4;
5 -> 6;
5 -> 4 [constraint = false];
6 -> 3 [constraint = false];
}
And here's the result:
Now if you want to, you could keep rankdir=LR
, just take the markup you posted, remove the weights and add constraint=false
to the same edges as I did, it works, too.