DRAKON.SU

Текущее время: Четверг, 26 Апрель, 2018 14:43

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 22 Апрель, 2009 01:56 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 143
Откуда: Россия, Орёл
Генератор кода ДРОН Ярослава Романченко: http://sage.com.ua/ru.shtml?e6l0. Там же лежит старая версия ДРАКОН-редактора, которую поддерживает ДРОН.

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

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

Сгенерированный код:
Код:
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. См. сообщение Ярослава Романченко.


Последний раз редактировалось Евгений Темиргалеев Пятница, 24 Апрель, 2009 20:10, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Апрель, 2009 08:47 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Апрель, 2009 10:29 
Модератор
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Апрель, 2009 10:45 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Пустые обходы по "нет" в двух местах надо бы пустить наоборот, по прямой. Принцип "правее-хуже" тут надо интерпретировать так: "ничего не делать - всегда лучше всего" :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Апрель, 2009 10:52 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
А планируется ли синхронизировать формат входных файлов генератора кода с текущей версией редактора?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Апрель, 2009 11:42 
Модератор
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Апрель, 2009 14:08 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 221
Откуда: Украина, Киев
Geniepro писал(а):
А планируется ли синхронизировать формат входных файлов генератора кода с текущей версией редактора?
Тяжело быть в роли догоняющего :D Для меня не очевидны преимущества новых версий редактора и необходимость постоянного изменения формата. Нет гарантий что формат опять не поменяется.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Апрель, 2009 14:29 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
Вам бы что-ли как-то договориться вдвоём о сотрудничестве...
Вот подумайте, сейчас более-менее какой-никакой, а ажиотаж вокруг Дракон-редактора возник. Понаскачивают люди что? Естественно последнюю версию редактора. И окажетесь Вы и Ваш кодогенератор отрезанным от большей части потенциальных пользователей Вашего кодогенератора...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Пример: удаление папки
СообщениеДобавлено: Пятница, 24 Апрель, 2009 20:40 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 143
Откуда: Россия, Орёл
Прежде всего хочу сказать большое спасибо тов. 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 КБ | Просмотров: 9418 ]
Вложение:
deldir1.7z [1.09 КБ]
Скачиваний: 280
В тексте окончательное решение оформлял бы в виде одной процедуры. Однако по правилам ДРАКОНа в схемах "примитив" нельзя использовать много икон. Переделал в схему-силуэт:
Вложение:
deldir2.png
deldir2.png [ 17.75 КБ | Просмотров: 9413 ]
Вложение:
deldir2.7z [1.02 КБ]
Скачиваний: 275
Схемы смотрятся не идеально, но редактор пока - какой есть, тому и рады.

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

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


Последний раз редактировалось Евгений Темиргалеев Пятница, 24 Апрель, 2009 21:32, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Апрель, 2009 21:31 
Модератор
Аватара пользователя

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

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

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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 27 Апрель, 2009 15:08 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 27 Апрель, 2009 16:12 
Модератор
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2018, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB