Тут мне стало известно о пакете graphviz, с помощью которого легко и удобно рисовать графы.
Делается это так. Допустим, вы сидите под убунту, тогда пакет называется graphviz и ставить его нужно так:
apt-get install graphviz
Дальше создаем файлик state_machine.dot (принятое расширение .dot) и для примера пишем следующее.
digraph state_machine {
one -> two [label = "буква"];
one -> five [label = "все остальное"];
two -> three [label = "цифра"];
three -> one [label = "пробел, запятая"];
three -> five [label = "все остальное", len = 1.0];
}
Да, это не конечный автомат, а так, первое, что пришло в голову, но для примера сойдет :)
Дальше компилируем так:
dot -Tpdf -O state_machine.dot
Почему pdf? Его легко вставить в теховский файл и скомпилировать pdflatex-ом.
Также можно получить png, svg, ps и пр. путем изменения параметра при ключе T. В итоге получаем:
Рисунок немного уродский, что нужно непременно исправить. Например, можно повернуть изображение горизонтально, обозначить конечное и начальное состояние окружностями. Да че уж там, все состояния обозначим окружностями, а конечные — двойными. Ну и для учебного примера одно из состояний нарисуем ромбом, заполненным цветом. И подпишем рисуночек снизу. И уменьшим чуть-чуть весь рисунок.
digraph state_machine {
rankdir = LR; // альбомная представление рисунка
size = "10"; // размер рисунка
node [shape = doublecircle]; one five; // двойной круг
node [shape = circle]; two; // круг
node [shape = diamond, style = filled, color = lightgray]; three // ромб, внутри залитый светло-серым цветом
one -> two [label = "буква"];
one -> five [label = "все остальное"];
two -> three [label = "цифра"];
three -> one [label = "пробел, запятая"];
three -> five [label = "все остальное", len = 1.0]; // длина стрелочки вроде
label = "Пример для понимания, как работает graphviz"
fontsize = 10;
}
Результат:
Чуть-чуть стало приличнее. Я думаю, можно дальше поиграться и построить нормальный сложный автомат, который дают на лабах.
Простейший пример можно посмотреть здесь: http://www.youtube.com/watch?v=6eJnQo22nHA
Чуть-чуть есть здесь http://mydebianblog.blogspot.com/2010/01/graphviz.html
А чуть сложнее здесь: http://www.graphviz.org/Gallery.php Но надеюсь, что примеры, расположенные снизу (если пройти по ссылке) никогда вам не пригодятся.
мне обычно google-docs помогают в таких случаях
ОтветитьУдалитьТак в гугл-доках нельзя автоматически построить графы, все ручками, не?
Удалить