Как мне построить график построения Томпсона, используя graphviz? - PullRequest
1 голос
/ 07 марта 2020

Я пытаюсь построить график Томпсона, используя graphviz, и я хотел бы знать, может ли кто-нибудь помочь мне составить график одного из правил, чтобы я мог выполнить другие.

Я прикрепляю эталонное изображение : https://en.wikipedia.org/wiki/Thompson%27s_construction# / media / File: Thompson-kleene-star.svg

digraph finite_state_machine {
    rankdir=LR;
    size="8,5"
    node [shape = doublecircle]; s3;
    node [shape = circle];
    s0 -> s1 [ label = "ε" ];   
    s0 -> s3 [ label = "ε" ];
    s1 -> s2 [ label = "ε" ];
    s2 -> s1 [ label = "ε" ];
    s2 -> s3 [ label = "ε" ];
}

1 Ответ

0 голосов
/ 08 марта 2020

Программы Graphviz стараются не размещать узлы поверх других узлов. Вы можете получить размещение узла, явно предоставив атрибуты pos для всех узлов. (Не так сложно, но неприятно.) Вы можете получить neato , чтобы сгенерировать все прямые ребра, но вам придется указать координаты (сплайна) для всех дуг. В противном случае вы получите следующее: enter image description here

В качестве альтернативы, вместо graphviz, если вы используете dpi c или gpi c, эта программа:

.PS

.defcolor pink rgb #FFC0CB
 circlerad=circlerad*.8

 ## we need to place the large oval before we place nodes on it
 Qx: circle invis ; line invis; circle invis; A: line invis; 
 ellipseht=ellipseht*2;  
 ellipsewid=ellipsewid*2
 E:ellipse at  A.c   shaded "pink" " N(s)"

 move to Qx.w 

 Q: circle "q" ; arrow "ε" "";  C1: circle ; A: line invis; C2: circle ; arrow "ε" "";  F: circle "f"; 

 circlerad=circlerad*.8
 F1:circle   at last circle   

 move to E.n; up; P1: box invis "ε"
 arc -> from C2.n to C1.n 

 arcrad=2
 arc -> from Q.s to F.s

  ### gpic version of greek chars:
  # move to E.s; down; box invis "" "\[*e]"
  ########################################

  ###  dpic/svg version of greek chars
  move to E.s; down; box invis "" "ε"

.PE

произвел это: enter image description here

gpi c является частью пакета groff GNU (Linux).
dpi c можно найти здесь: https://ece.uwaterloo.ca/~aplevich/dpic/

...