Grundlagen der Theoretischen Informatik

Aus Hochschule Darmstadt - Fachschaft Informatik Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
 
Zeile 1: Zeile 1:
[[Category:Vorlesung]][[Category:3. Semester]][[Category:Bachelor]]
+
== Graph endlicher Automaten erstellen ==
 +
Mit [http://www.graphviz.org/ Graphviz] können Graphen sehr einfach erzeugt werden.
 +
 
 +
Beispiel:
 +
 
 +
[[Bild:Fsm.png]]
 +
 
 +
Zugehöriger Quellcode:
 +
<source lang="dot">
 +
digraph finite_state_machine {
 +
rankdir=LR;
 +
size="8,5"
 +
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
 +
node [shape = circle];
 +
LR_0 -> LR_2 [ label = "SS(B)" ];
 +
LR_0 -> LR_1 [ label = "SS(S)" ];
 +
LR_1 -> LR_3 [ label = "S($end)" ];
 +
LR_2 -> LR_6 [ label = "SS(b)" ];
 +
LR_2 -> LR_5 [ label = "SS(a)" ];
 +
LR_2 -> LR_4 [ label = "S(A)" ];
 +
LR_5 -> LR_7 [ label = "S(b)" ];
 +
LR_5 -> LR_5 [ label = "S(a)" ];
 +
LR_6 -> LR_6 [ label = "S(b)" ];
 +
LR_6 -> LR_5 [ label = "S(a)" ];
 +
LR_7 -> LR_8 [ label = "S(b)" ];
 +
LR_7 -> LR_5 [ label = "S(a)" ];
 +
LR_8 -> LR_6 [ label = "S(b)" ];
 +
LR_8 -> LR_5 [ label = "S(a)" ];
 +
}
 +
 
 +
</source>
 +
Erstellt werden kann der Graph sehr einfach über die Shell:
 +
<source lang="bash">
 +
dot -T$format -o$outfile $infile
 +
</source>
 +
für $format kann svg, svgz, png oder gif (und noch einige mehr) verwendet werden. $infile beschreibt die Eingabedatei (z.B.: fsm.vz). $outfile beschreibt die Ausgabedatei (z.B.: fsm.png).
 +
Für die Ausgabe der Datei "fsm.vz" als PNG in die Datei "fsm.png" würde der Auffruf also
 +
<source lang="bash">
 +
dot -Tpng -ofsm.png fsm.vz
 +
</source>
 +
lauten. Weitere Informationen kann man der [http://www.graphviz.org/Documentation.php Dokumentation] entnehmen.

Version vom 27. März 2009, 20:17 Uhr

Graph endlicher Automaten erstellen

Mit Graphviz können Graphen sehr einfach erzeugt werden.

Beispiel:

Fsm.png

Zugehöriger Quellcode:

digraph finite_state_machine {
	rankdir=LR;
	size="8,5"
	node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
	node [shape = circle];
	LR_0 -> LR_2 [ label = "SS(B)" ];
	LR_0 -> LR_1 [ label = "SS(S)" ];
	LR_1 -> LR_3 [ label = "S($end)" ];
	LR_2 -> LR_6 [ label = "SS(b)" ];
	LR_2 -> LR_5 [ label = "SS(a)" ];
	LR_2 -> LR_4 [ label = "S(A)" ];
	LR_5 -> LR_7 [ label = "S(b)" ];
	LR_5 -> LR_5 [ label = "S(a)" ];
	LR_6 -> LR_6 [ label = "S(b)" ];
	LR_6 -> LR_5 [ label = "S(a)" ];
	LR_7 -> LR_8 [ label = "S(b)" ];
	LR_7 -> LR_5 [ label = "S(a)" ];
	LR_8 -> LR_6 [ label = "S(b)" ];
	LR_8 -> LR_5 [ label = "S(a)" ];
}

Erstellt werden kann der Graph sehr einfach über die Shell:

dot -T$format -o$outfile $infile

für $format kann svg, svgz, png oder gif (und noch einige mehr) verwendet werden. $infile beschreibt die Eingabedatei (z.B.: fsm.vz). $outfile beschreibt die Ausgabedatei (z.B.: fsm.png). Für die Ausgabe der Datei "fsm.vz" als PNG in die Datei "fsm.png" würde der Auffruf also

dot -Tpng -ofsm.png fsm.vz

lauten. Weitere Informationen kann man der Dokumentation entnehmen.

Meine Werkzeuge