Я создаю epsilon NFA для распознавания регулярного выражения с использованием канонической конструкции. Я использую подграфы для группировки различных частей регулярного выражения. Оператор * дает мне особые проблемы, поскольку точка решила переместить порядок узлов вокруг. Я попробовал добавить вес границ, чтобы ограничить конкретные края, чтобы сохранить порядок краев в строке, но это, похоже, не работает.
То, что я хотел бы сделать, - заставить узлы в подграфе быть помещены в конкретный порядок, чтобы выходной граф был распознан как конкретный тип (хорошо известной) конструкции. В приведенном ниже примере я хотел бы, чтобы края 3, 4, 5 и 6 помещались в этом порядке, однако точка помещает их в порядок 6, 3, 4, 5. Любые указатели оцениваются.
Обратите внимание, что текущий параметр веса не имеет никакого значения, кроме параметра веса.
У меня есть следующее
digraph G {
rankdir = LR;
node [shape = none];
0 [label = "start"];
node [shape = circle];
1 [label = "q1"];
2 [label = "q2"];
3 [label = "q3"];
4 [label = "q4"];
5 [label = "q5"];
node [shape = doublecircle];
6 [label = "q6"];
subgraph re1 {
rank = same;
edge[label = "0"];
1 -> 2;
};
subgraph re2 {
rank = same;
edge[label = "ε"];
3 -> 4 [weight = 10];
edge[label = "1"];
4 -> 5 [weight = 10];
edge[label = "ε"];
5 -> 6 [weight = 10];
5 -> 4 [weight = 1];
6 -> 3 [weight = 1];
};
edge[color=black];
0 -> 1
edge[label = "ε"];
2 -> 3;
}