DRAKON.SU
https://forum.drakon.su/

Примеры ДРАКОН-схем и ДРОН-генерации кода
https://forum.drakon.su/viewtopic.php?f=176&t=1489
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Среда, 22 Апрель, 2009 01:56 ]
Заголовок сообщения:  Примеры ДРАКОН-схем и ДРОН-генерации кода

Генератор кода ДРОН Ярослава Романченко: http://sage.com.ua/ru.shtml?e6l0. Там же лежит старая версия ДРАКОН-редактора, которую поддерживает ДРОН.

Схема процедуры быстрой сортировки:
Вложение:
sort.PNG
sort.PNG [ 17.97 КБ | Просмотров: 15032 ]

Файл ДРАКОН-схемы для ДРОН-а:
Вложение:
Комментарий к файлу: sort.drt
sort.7z [722 байт]
Скачиваний: 540

Сгенерированный код:
Код:
MODULE sort;

PROCEDURE Sort(VAR a: ARRAY OF INTEGER;
l, r: INTEGER);
VAR i, j,x: INTEGER;
BEGIN
  i := l;
  j := r;
  x := a[(r+l) DIV 2];
  REPEAT
    WHILE a[i] < x DO
      INC(i)
    END; (* WHILE *)
    WHILE x < a[j] DO
      DEC(j)
    END; (* WHILE *)
    IF i <= j THEN
      t := a[i]; a[i] := a[j]; a[j] := t;
      INC(i); DEC(j)
    END; (* IF *)
  UNTIL i > j;
  IF l < j THEN
    Sort(a, l, j)
  END; (* IF *)
  IF i < r THEN
    Sort(a, i, r)
  END; (* IF *)
END Sort;


END sort.

Замечание: в исходном варианте я допустил ошибку, забыл объявить локальные переменные i, j, x: INTEGER. См. сообщение Ярослава Романченко.

Автор:  Ярослав Романченко [ Среда, 22 Апрель, 2009 08:47 ]
Заголовок сообщения:  Re: Пример. Схема QSort. ДРОН - генерация кода

:)
Объявление локальных переменных пропущено. Для них пока предусматривается место в блоке параметров, т.е. после ); надо ещё написать VAR и список локальных переменных.
Затем после генерации кода можно смело его компилировать :wink:
ЗЫ. Добавьте ещё в любом месте листа блок "комментарий" с содержимым вида (** AUTHOR " ... "; PURPOSE " ... " *), и если не возражаете я добавлю схему в архив с транслятором :roll:

Автор:  Евгений Темиргалеев [ Среда, 22 Апрель, 2009 10:29 ]
Заголовок сообщения:  Re: Пример. Схема QSort. ДРОН - генерация кода

Ярослав Романченко писал(а):
ЗЫ. Добавьте ещё в любом месте листа блок "комментарий" с содержимым вида (** AUTHOR " ... "; PURPOSE " ... " *), и если не возражаете я добавлю схему в архив с транслятором :roll:
Не будет слишком помпезно для простого примера? Не возражаю, если Вы просто так добавите. :)

Автор:  Илья Ермаков [ Среда, 22 Апрель, 2009 10:45 ]
Заголовок сообщения:  Re: Пример. Схема QSort. ДРОН - генерация кода

Пустые обходы по "нет" в двух местах надо бы пустить наоборот, по прямой. Принцип "правее-хуже" тут надо интерпретировать так: "ничего не делать - всегда лучше всего" :)

Автор:  Geniepro [ Среда, 22 Апрель, 2009 10:52 ]
Заголовок сообщения:  Re: Пример. Схема QSort. ДРОН - генерация кода

А планируется ли синхронизировать формат входных файлов генератора кода с текущей версией редактора?

Автор:  Евгений Темиргалеев [ Среда, 22 Апрель, 2009 11:42 ]
Заголовок сообщения:  Re: Пример. Схема QSort. ДРОН - генерация кода

Илья Ермаков писал(а):
Пустые обходы по "нет" в двух местах надо бы пустить наоборот, по прямой. Принцип "правее-хуже" тут надо интерпретировать так: "ничего не делать - всегда лучше всего" :)
Без сомнения. Но в той совсем старой версии Дракон-редактора, которую поддерживает ДРОН, у меня это не получилось... А уж по какой схеме код генерился, ту и показываю, надо быть объективными.

Автор:  Ярослав Романченко [ Среда, 22 Апрель, 2009 14:08 ]
Заголовок сообщения:  Re: Пример. Схема QSort. ДРОН - генерация кода

Geniepro писал(а):
А планируется ли синхронизировать формат входных файлов генератора кода с текущей версией редактора?
Тяжело быть в роли догоняющего :D Для меня не очевидны преимущества новых версий редактора и необходимость постоянного изменения формата. Нет гарантий что формат опять не поменяется.

Автор:  Geniepro [ Среда, 22 Апрель, 2009 14:29 ]
Заголовок сообщения:  Re: Пример. Схема QSort. ДРОН - генерация кода

Вам бы что-ли как-то договориться вдвоём о сотрудничестве...
Вот подумайте, сейчас более-менее какой-никакой, а ажиотаж вокруг Дракон-редактора возник. Понаскачивают люди что? Естественно последнюю версию редактора. И окажетесь Вы и Ваш кодогенератор отрезанным от большей части потенциальных пользователей Вашего кодогенератора...

Автор:  Евгений Темиргалеев [ Пятница, 24 Апрель, 2009 20:40 ]
Заголовок сообщения:  Пример: удаление папки

Прежде всего хочу сказать большое спасибо тов. stikriz-у и тов. Ивану Иваноффу. См. http://www.computerra.ru/forum/index.ph ... TID=332361, около сообщения #625. Благодаря их настойчивости, я получил свой первый и интересный опыт составления алгоритма, начиная с ДРАКОН-схемы.
Задача писал(а):
Удалить заданную папку со всем содержимым, исключая файлы объемом больше 100КБ и папки NO_DEL.
Стал делать методом пошагового уточнения (в ДРАКОН-редакторе от 18.04.2009). Сначала получилось: (в арх-х .7z лежат файлы схем .drt)
Вложение:
deldir1.png
deldir1.png [ 20.38 КБ | Просмотров: 15026 ]
Вложение:
deldir1.7z [1.09 КБ]
Скачиваний: 539
В тексте окончательное решение оформлял бы в виде одной процедуры. Однако по правилам ДРАКОНа в схемах "примитив" нельзя использовать много икон. Переделал в схему-силуэт:
Вложение:
deldir2.png
deldir2.png [ 17.75 КБ | Просмотров: 15021 ]
Вложение:
deldir2.7z [1.02 КБ]
Скачиваний: 517
Схемы смотрятся не идеально, но редактор пока - какой есть, тому и рады.

На построение этих схем потратил минут 20 (учитывая то, что вторую схему пришлось рисовать с нуля). Думаю, что при наличии близкого к идеальному ДРАКОН-редактора и опыте составления ДРАКОН-алгоритмов (можно было сразу делать схему-силуэт), на это ушло бы минут 5.

Положительный опыт: реально почувствовал на второй схеме, что воспринимаю большую часть алгоритма (по сравнению с текстом, хоть он и меньше места на экране занял бы).

Автор:  Евгений Темиргалеев [ Пятница, 24 Апрель, 2009 21:31 ]
Заголовок сообщения:  Пример: удаление папки. Генерация кода для КП/ББ.

Вторая схема была напечатана, и по ней в старом редакторе для ДРОНА с нуля рисовалась схема, по которой должен генерироваться код. Были сделаны уточнения для проверки ошибочных ситуаций. Замечание: имена переменных местами не совсем правильны, но с имеющимися ср-ми их переделывать трудоёмко.

Код писался под КП/ББ (декларативные/маршрутные части у Компонентного Паскаля и Активного Оберона почти одинаковы).
Вложение:
deldir.gif
deldir.gif [ 31.17 КБ | Просмотров: 15025 ]
Вложение:
deldir.7z [1.89 КБ]
Скачиваний: 494
Сгенерированный код:
Вложение:
deldir.Mod.txt [2.78 КБ]
Скачиваний: 770
В него нужно внести два исправления - добавить слово CONST перед объявлением констант Dr000VtkExit...(в АО CONST не обязателен?) и переместить процедуру Test в конец модуля (мне не понятен порядок, по которому перебираются схемы с листа). Надеюсь, уважаемый Ярослав Романченко найдёт время пояснить ситуацию.

Итоговый модуль ББ (с исп-ми и командером для вызова Test):
Вложение:
deldir.odc [3.76 КБ]
Скачиваний: 766

С этим схемами провозился часа 2-3 (правка схемы->генерация кода->перенос с испр-ми в ББ->компиляция->правка ошибок текстового кода в схеме->...). Сколько бы потратилось время с идеальным инструментом, сказать не возьмусь, т.к. пока трудно представить, как он устроен.
После (первой) удачной компиляции, код выполняется правильно (сужу по результатам нескольких тестов). Ест-но, могу ошибаться. :mrgreen:

Положительный опыт: почувствовал, что удобнее - быстрее чем в тексте писать заготовки IF THEN ELSE и т.п. (даже с F5) и искать куда ткнуть текстовый курсор/бегать туда сюда кл-ми кур-ра при правках, создавать кусочек схемы-слепыша (иконы быстро натыкиваются) и место ввода текстовых операторов видно лучше и проще выбрать. Наверно, не особо понятно, но это, имхо, надо скорее прочувствовать самостоятельно...

Замечание: первая схема не совсем правильна с т.з. ДРАКОНА. Вот более правильная схема, где выполнена "пересадка лианы" и лишние блоки INC(cf) и INC(cd) убраны:
Вложение:
deldir.right.gif
deldir.right.gif [ 30.29 КБ | Просмотров: 15022 ]
Вложение:
deldir.right.7z [1.88 КБ]
Скачиваний: 495
Но по этой схеме, если не ошибся, генерируется не правильный код... Снова прошу Ярослава Романченко прокомментировать ситуацию, по-возможности.

Автор:  Ярослав Романченко [ Понедельник, 27 Апрель, 2009 15:08 ]
Заголовок сообщения:  Re: Пример: удаление папки. Генерация кода для КП/ББ.

Евгений Темиргалеев писал(а):
в АО CONST не обязателен?
Вы обнаружили ошибку в программе. Исправленная версия уже доступна по тому-же адресу для загрузки.
Евгений Темиргалеев писал(а):
мне не понятен порядок, по которому перебираются схемы с листа
Для АО порядок процедур не имеет никакого значения, в редакторе порядок процедур возможно задан порядком добавления схем в лист. Вобщем, при генерации кода это никак дополнительно не контролируется и порядок может при генерации даже быть изменён.
Евгений Темиргалеев писал(а):
Но по этой схеме, если не ошибся, генерируется не правильный код...
Фактически данный приём в ДРАКОНе устраняет дублирование кода, в целевом же языке дублирования кода по-видимому избежать не удастся. Действительно, пока код генерируется неправильный. Эта ошибка пока присутствует и в исправленной версии транслятора.

Автор:  Евгений Темиргалеев [ Понедельник, 27 Апрель, 2009 16:12 ]
Заголовок сообщения:  Re: Пример: удаление папки. Генерация кода для КП/ББ.

Ярослав Романченко писал(а):
Фактически данный приём в ДРАКОНе устраняет дублирование кода, в целевом же языке дублирования кода по-видимому избежать не удастся. Действительно, пока код генерируется неправильный. Эта ошибка пока присутствует и в исправленной версии транслятора.
Так в работающей схеме иконы и так дублируются. А хотелось бы со схемы их убрать (раз правила построения позволяют), тогда схема будет лучше восприниматься. А что код итоговый будет дублироваться - не беда.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/