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. Там же лежит старая версия ДРАКОН-редактора, которую поддерживает ДРОН. Схема процедуры быстрой сортировки: Вложение: Файл ДРАКОН-схемы для ДРОН-а: Вложение: Сгенерированный код: Код: 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 и список локальных переменных. Затем после генерации кода можно смело его компилировать ЗЫ. Добавьте ещё в любом месте листа блок "комментарий" с содержимым вида (** AUTHOR " ... "; PURPOSE " ... " *), и если не возражаете я добавлю схему в архив с транслятором |
Автор: | Евгений Темиргалеев [ Среда, 22 Апрель, 2009 10:29 ] |
Заголовок сообщения: | Re: Пример. Схема QSort. ДРОН - генерация кода |
Ярослав Романченко писал(а): ЗЫ. Добавьте ещё в любом месте листа блок "комментарий" с содержимым вида (** AUTHOR " ... "; PURPOSE " ... " *), и если не возражаете я добавлю схему в архив с транслятором Не будет слишком помпезно для простого примера? Не возражаю, если Вы просто так добавите.
|
Автор: | Илья Ермаков [ Среда, 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 писал(а): А планируется ли синхронизировать формат входных файлов генератора кода с текущей версией редактора? Тяжело быть в роли догоняющего Для меня не очевидны преимущества новых версий редактора и необходимость постоянного изменения формата. Нет гарантий что формат опять не поменяется.
|
Автор: | 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)Вложение: Вложение: В тексте окончательное решение оформлял бы в виде одной процедуры. Однако по правилам ДРАКОНа в схемах "примитив" нельзя использовать много икон. Переделал в схему-силуэт:Вложение: Вложение: Схемы смотрятся не идеально, но редактор пока - какой есть, тому и рады.На построение этих схем потратил минут 20 (учитывая то, что вторую схему пришлось рисовать с нуля). Думаю, что при наличии близкого к идеальному ДРАКОН-редактора и опыте составления ДРАКОН-алгоритмов (можно было сразу делать схему-силуэт), на это ушло бы минут 5. Положительный опыт: реально почувствовал на второй схеме, что воспринимаю большую часть алгоритма (по сравнению с текстом, хоть он и меньше места на экране занял бы). |
Автор: | Евгений Темиргалеев [ Пятница, 24 Апрель, 2009 21:31 ] |
Заголовок сообщения: | Пример: удаление папки. Генерация кода для КП/ББ. |
Вторая схема была напечатана, и по ней в старом редакторе для ДРОНА с нуля рисовалась схема, по которой должен генерироваться код. Были сделаны уточнения для проверки ошибочных ситуаций. Замечание: имена переменных местами не совсем правильны, но с имеющимися ср-ми их переделывать трудоёмко. Код писался под КП/ББ (декларативные/маршрутные части у Компонентного Паскаля и Активного Оберона почти одинаковы). Вложение: Вложение: Сгенерированный код:Вложение: В него нужно внести два исправления - добавить слово CONST перед объявлением констант Dr000VtkExit...(в АО CONST не обязателен?) и переместить процедуру Test в конец модуля (мне не понятен порядок, по которому перебираются схемы с листа). Надеюсь, уважаемый Ярослав Романченко найдёт время пояснить ситуацию.Итоговый модуль ББ (с исп-ми и командером для вызова Test): Вложение: С этим схемами провозился часа 2-3 (правка схемы->генерация кода->перенос с испр-ми в ББ->компиляция->правка ошибок текстового кода в схеме->...). Сколько бы потратилось время с идеальным инструментом, сказать не возьмусь, т.к. пока трудно представить, как он устроен. После (первой) удачной компиляции, код выполняется правильно (сужу по результатам нескольких тестов). Ест-но, могу ошибаться. Положительный опыт: почувствовал, что удобнее - быстрее чем в тексте писать заготовки IF THEN ELSE и т.п. (даже с F5) и искать куда ткнуть текстовый курсор/бегать туда сюда кл-ми кур-ра при правках, создавать кусочек схемы-слепыша (иконы быстро натыкиваются) и место ввода текстовых операторов видно лучше и проще выбрать. Наверно, не особо понятно, но это, имхо, надо скорее прочувствовать самостоятельно... Замечание: первая схема не совсем правильна с т.з. ДРАКОНА. Вот более правильная схема, где выполнена "пересадка лианы" и лишние блоки INC(cf) и INC(cd) убраны: Вложение: Вложение: Но по этой схеме, если не ошибся, генерируется не правильный код... Снова прошу Ярослава Романченко прокомментировать ситуацию, по-возможности.
|
Автор: | Ярослав Романченко [ Понедельник, 27 Апрель, 2009 15:08 ] |
Заголовок сообщения: | Re: Пример: удаление папки. Генерация кода для КП/ББ. |
Евгений Темиргалеев писал(а): в АО CONST не обязателен? Вы обнаружили ошибку в программе. Исправленная версия уже доступна по тому-же адресу для загрузки.Евгений Темиргалеев писал(а): мне не понятен порядок, по которому перебираются схемы с листа Для АО порядок процедур не имеет никакого значения, в редакторе порядок процедур возможно задан порядком добавления схем в лист. Вобщем, при генерации кода это никак дополнительно не контролируется и порядок может при генерации даже быть изменён.Евгений Темиргалеев писал(а): Но по этой схеме, если не ошибся, генерируется не правильный код... Фактически данный приём в ДРАКОНе устраняет дублирование кода, в целевом же языке дублирования кода по-видимому избежать не удастся. Действительно, пока код генерируется неправильный. Эта ошибка пока присутствует и в исправленной версии транслятора.
|
Автор: | Евгений Темиргалеев [ Понедельник, 27 Апрель, 2009 16:12 ] |
Заголовок сообщения: | Re: Пример: удаление папки. Генерация кода для КП/ББ. |
Ярослав Романченко писал(а): Фактически данный приём в ДРАКОНе устраняет дублирование кода, в целевом же языке дублирования кода по-видимому избежать не удастся. Действительно, пока код генерируется неправильный. Эта ошибка пока присутствует и в исправленной версии транслятора. Так в работающей схеме иконы и так дублируются. А хотелось бы со схемы их убрать (раз правила построения позволяют), тогда схема будет лучше восприниматься. А что код итоговый будет дублироваться - не беда.
|
Автор: | Pimbom [ Четверг, 24 Февраль, 2022 21:34 ] |
Заголовок сообщения: | Re: Примеры ДРАКОН-схем и ДРОН-генерации кода |
Генерация Дракон => Active Oberon viewtopic.php?f=143&t=1080 Подскажите пожалуйста, где-нибудь есть инструкция, как пользоваться старым редактором, используемым для Дрон и генерации кода в Оберон? |
Автор: | Владимир Паронджанов [ Четверг, 24 Февраль, 2022 21:58 ] |
Заголовок сообщения: | Re: Примеры ДРАКОН-схем и ДРОН-генерации кода |
Pimbom писал(а): Напишите в личку автору ДРОНа Ярославу Романченко. Для этого 1) зайдите на форум OberonCore https://forum.oberoncore.ru/ 2) зайдите в профиль Ярослава https://forum.oberoncore.ru/memberlist. ... file&u=287 3) напишите ему в личку. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |