Изменения

Перейти к: навигация, поиск

Участник:Sementry/Гайд по vizi

1350 байт добавлено, 06:53, 20 января 2012
Пример функции
Пожалуй, самая неприятная часть. Да-да, логику программы мы будем писать на языке разметки XML. Для подробных сведений о спецификации используемого метаязыка читайте указанный двумя абзацами выше файл, а также ознакомьтесь с примерами, здесь я опишу лишь некоторые подводные камни.
У нас есть конструкции step для присвоений, if-then-else для переменных, while для циклов и call-auto для вызова функции. Можно спокойно объявлять и пользоваться одиночными переменными и массивами примитивных типов, с другими объектами могут возникнуть внезапные осложнения. В описании спецификации сказано, что переменные бывают локальными и глобальными. Это не так, реальная область видимости у всех переменных одна и та же; главное отличие состоит в том, что значение по умолчанию у глобальных переменных обязательно присутствует, а у локальных {{---}} обязательно отсутствует. Поэтому с рекурсией все грустно, если она необходима, то, видимо, нужно написать стек самостоятельно, либо использовать на свой страх и риск объект stack, который Vizi сама пропишет(но позже там могут возникнуть проблемы с обращением автомата). Можно также схалтурить и написать основную часть кода в визуализаторе, а xml-файл менять как угодно, лишь бы только запланированное разбиение вашего алгоритма на шаги, которые будет видеть пользователь, оставалось прежним.
Рекомендуемый способ разработки: взять тщательно протестированный и уже сданный код вашего алгоритма на Java, выкинуть из него все сложные классы и языковые конструкции, включая рекурсию и циклы for и свалить все переменные в одну кучу "class Data". Сохраните люмпенизированный таким образом код и убедитесь в том, что он все еще работает так, как надо. Теперь полученный код можно постепенно перерабатывать в xml-файл, окружая все действия нужными тегами. Пока лучше ничего не рисовать, тег draw можно добавить и потом.
Когда все напишете, запустите ant.bat с параметром debug-source. Если где-то есть ошибка, то вам скажут, где именно. Если все написано верно, то версия кода для дебага должна появиться в папке src/ru/ifmo/vizi/%your_project%/%your_project%Debug.java. Сравните ее на похожесть с ранее упрощенным кодом, должно получиться примерно то же самое. Подебажьте сгенерированный код и убедитесь в том, что оно и работает так, как запланировано. Если все хорошо, то можно запустить ant.bat без параметров, сборка не дойдет до конца, но вы сгенерируете код src/ru/ifmo/vizi/%your_project%/%your_project%.java, который написан уже в стиле автоматного программирования и пригодится вам для написания визуализатора в вашей любимой IDE.
 
=== Пример функции ===
 
<auto id = "test" description = "факториал">
<variable
description = "Переменная цикла для test"
name ="testI"
type = "int"
/>
<step id = "testInit" description = "" level = "-1">
<action>
@testI @= 1;
@testResult @= 1;
</action>
</step>
<while
id="testLoop"
description="loop"
test="@testI & lt;= @testArgument" <nowiki><!--после амперсанда пробела не должно быть--></nowiki>
level="-1"
>
<step id = "testLoop1" description = "ololo" level = "-1">
<action>
@testResult @= @testResult * @testI;
@testI @= @testI + 1;
</action>
</step>
</while>
</auto>
 
По невыясненной причине все функции должны быть описаны в самом конце тега algorithm.
 
=== Пример вызова функции ===
 
<step id = "testArgs" description = "" level = "-1">
<action>
@testArg @= @n;
</action>
</step>
<call-auto id = "test" />
<step id = "getFact" description = "" level = "-1">
<action>
@fact @= @testResult;
</action>
</step>
== %your_project%-configuration.xml ==
1302
правки

Навигация