2011-10-02 12 views
25

正規の構造を使用して正規表現を認識するためにイプシロンNFAを構築しています。サブグラフを使って正規表現のさまざまな部分をグループ化しています。 *演算子はドットが周りのノードの順序を移動することに決めたので私に特別なトラブルを与えています。私はエッジウェイトを追加して、特定のエッジを短くして、エッジの並びをラインで維持しようとしましたが、動作していないようです。グラフのドットノードの順序

私がしたいのは、サブグラフのノードを特定の順序で配置して、出力グラフが特定のタイプの(よく知られた)構造として認識できるようにすることです。下の例では、エッジ3、4、5、6をこの順に配置したいと考えていますが、ドットは6,3,4,5の順に配置します。

現在のweightパラメータは、weightパラメータとまったく違いがないことに注意してください。私は

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; 
} 

graphiz output

答えて

30

を以下している

は、ここで私はそのグラフを書くと思います方法は次のとおりです。すべての

  • まず、私にはこれは上から行くのグラフであります左から右にではないので、rankdir=LRを削除し、ノード0/1とノード2/3に対してのみrank=sameを追加しました。
  • Iは最も重要なことは、私はグラフの方向に逆行エッジにconstraint=falseを追加したすべての重み
  • を除去 - 3
  • ノードにノード5、ノード4から行く一つであり、ノード6から1ここで

ソース:

graphviz output

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]; 
} 

そして、ここではその結果です

あなたがしたいのであれば、rankdir=LRを投稿したマークアップを取り除いてウエイトを取り除き、constraint=falseを同じエッジに追加しても動作します。

+0

遅れて申し訳ありません、助けてくれてありがとう! –