Петрискрипт - Petriscript
Эта статья использование внешняя ссылка может не следовать политикам или рекомендациям Википедии.Ноябрь 2012 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
PetriScript это язык моделирования за Сети Петри, разработанный Александром Хамесом и Ксавье Рено.[1] В CPN-AMI Платформа предоставляет множество инструментов для работы с сетями Петри, такие как инструменты проверки и проверки моделей.[2]
Первоначально простые сети Петри создавались графический дизайн, но исследования, проводимые внутри компании LIP6 выяснилось, что необходимо автоматизировать такие задачи.[3] PetriScript был разработан для обеспечения некоторых возможностей моделирования переходов мест и раскрашенных сетей Петри в платформе CPN-AMI. Основная цель Petriscript - автоматизировать операции моделирования в сетях Петри путем объединения, создания и подключения узлы. Он поддерживает почти все необходимое, например макросы, управление циклами, списки и нить и арифметические выражения, и максимально блокирует вмешательство пользователя. Его синтаксис Ада-подобный.
Следующее сценарий создает FIFO с тремя разделами:
определять(FIFO_SIZE,3) определять(FIFO_BASE_X,100) определять(FIFO_BASE_Y,100) определять(FIFO_STEP,120) int $волна := 0; за $волна в 1..FIFO_SIZE петля Создайте место "Слот_" & '$волна' (Икс FIFO_BASE_X + FIFO_STEP * $волна, у FIFO_BASE_Y); Создайте место "Пустой_" & '$волна' (Икс FIFO_BASE_X + FIFO_STEP * $волна, у FIFO_BASE_Y + 100, маркировка "1"); конец петля; за $волна в 1..FIFO_SIZE+1 петля Создайте переход "т" & '$волна -1' & "_к_" & '$волна' (Икс FIFO_BASE_X + FIFO_STEP * $волна - FIFO_STEP / 2, у FIFO_BASE_Y + 50); если $волна < FIFO_SIZE+1 тогда соединять "1" переход "т" &'$волна -1' & "_к_" & '$волна' к место "Слот_" & '$волна'; соединять "1" место "Пустой_" & '$волна' к переход "т" &'$волна -1' & "_к_" & '$волна'; конец если; если $волна > 1 тогда соединять "1" переход "т" &'$волна -1' & "_к_" & '$волна' к место "Пустой_" & '$волна - 1'; соединять "1" место "Слот_" & '$волна - 1' к переход "т" &'$волна -1' & "_к_" & '$волна'; конец если; конец петля; набор переход "t0_to_1" к (имя «FIFO_Start»); набор переход "т" & 'FIFO_SIZE' & "_к_" & 'FIFO_SIZE + 1' к (имя "FIFO_End");
Что дает следующие график:
Вот еще один пример, демонстрирующий мощь PetriScript:
определять(Икс,250) определять(Y,350) определять(радиус,50) определять(р,150) определять(РАЗДЕЛЫ,15) определять(INNER_ANGLE,360/РАЗДЕЛЫ) определять(OUTER_ANGLE,360/(2*РАЗДЕЛЫ)) int $я := 0; int $j := 0; за $я в 1.. РАЗДЕЛЫ петля Создайте место "F" & '$я' ( Икс Икс, у Y, р радиус, т $я * INNER_ANGLE); Создайте место "Раздел_" & '$я' ( Икс Икс, у Y, р р, т $я * INNER_ANGLE); Создайте переход "т" & '$я' & "_к_" & '$я мод РАЗДЕЛЫ + 1' ( Икс Икс, у Y, р р, т $я * INNER_ANGLE + OUTER_ANGLE); конец петля; за $я в 1.. РАЗДЕЛЫ петля соединять место "Раздел_" & '$я' к переход "т"&'$я' & "_к_" & '$я мод РАЗДЕЛЫ + 1'; соединять переход "т" & '$я' & "_к_" & '$я мод РАЗДЕЛЫ + 1' к место "Раздел_" & '$я мод РАЗДЕЛЫ + 1'; если $я /= 1 тогда соединять место "F" & '$я' к переход "т" & '$я-1' & "_к_" & '$я'; еще соединять место «F1» к переход "т" & 'РАЗДЕЛЫ' & "_к_" & '1'; конец если; соединять переход "т" &'$я мод РАЗДЕЛЫ + 1' & "_к_" & '($я+1) мод РАЗДЕЛЫ + 1' к место "F" & '$я'; конец петля; за $я в 1.. РАЗДЕЛЫ петля если $я мод 3 = 0 тогда набор место "Раздел_" & '$я' к маркировка "1"; еще набор место "F" & '$я' к маркировка "1"; конец если; конец петля;
Что дает следующий график:
Рекомендации
- ^ Александр Хамес; Ксавье Рено. «Справочное руководство по PetriScript 1.0» (PDF). LIP6. Архивировано из оригинал (PDF) 24 октября 2016 г.
- ^ Принципы информационных систем: информатика
- ^ Системы бизнес-баз данных: информатика, управление базами данных
внешняя ссылка
Доступна полная документация здесь.