DRAKON.SU

Текущее время: Пятница, 29 Март, 2024 00:54

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




Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 16:38 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
Надо было мне продумать алгоритм, и я решил нарисовать его с помощью редактора Геннадия Тышова.
Можно порассуждать о том, насколько понятно получилось. Признаю, что текст, написанный на языке программирования вместо русского, читать сложнее. А как в остальном эргономика? Трудно ли понять и проверить правильность алгоритма? Приглашаю всех попробовать найти ошибку в алгоритме и поделиться впечатлениями. : )
Вложение:
Комментарий к файлу: Схема (убрать расширение .odc)
парсер.drt.odc [8.62 КБ]
Скачиваний: 952

Вложение:
Комментарий к файлу: Та же схема
парсер.png
парсер.png [ 44.4 КБ | Просмотров: 26685 ]

Во время работы с редактором замечены некоторые недостатки:
- перемещение схем по листу (стрелочками клавиатуры) не делает доступной кнопку сохранения документа;
- при добавлении нового элемента программа не предлагает написать в него текст, даже если установлена галочка "Эл.". Необходимо выполнить дополнительный щелчок левой кнопкой мыши по вновь добавленному элементу, затем щелчок по полю ввода, затем выделить непонятно откуда взявшийся текст вида "///-114" и только после этого можно написать то, ради чего создан элемент. Удобно было бы сразу отобразить и активировать поле ввода. Более того, если элемент вновь создан, то можно сразу выделить текст "///-114", чтобы ввод пользователя заменил этот текст на нужный.


Последний раз редактировалось Александр Ильин Суббота, 19 Апрель, 2008 09:04, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 17:03 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 140
Откуда: Троицк, Москва
Так чем это лучше, чем хорошо форматированный текст на Обероне?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 19:40 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 24
Александр Ильин писал(а):
Надо было мне продумать алгоритм, и я решил нарисовать его с помощью редактора Геннадия Тышова.


Ужас :) Такой результат я бы не стал использовать для демонстрации достижений визуальных языков :) Конкретно эта программа на традиционном языке будет выглядеть намного понятнее. Хотя с асмом и можно посоревноваться :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 20:32 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
Перевожу сейчас этот алгоритм в текст на Обероне. Столкнулся с некоторыми трудностями, не всё гладко переводится. Например, в процедуре GetIdent цикл с двумя выходами. Не в том смысле, что из двух мест выход, а В ДВЕ ВЕТКИ алгоритма выход. Мне пришлось из-за этого продублировать условие "i >= 0":
Код:
PROCEDURE GetIdent (r: Reader; VAR id: IdentDesc);
VAR i, lastInd: LONGINT;
BEGIN
   lastInd := LEN (id.name) - 1;
   i := lastInd;
   WHILE (i >= 0) & IdentChar (r.ch) DO
      id.name [i] := r.ch;
      DEC (i);
      IF i >= 0 THEN
         r.ReadPrev
      END
   END;
   IF (i >= 0) & (i < lastInd) & IdentFirstChar (id.name [i + 1]) THEN
      MoveBlock (id.name, i + 1, lastInd - i, 0);
      id.name [lastInd - i] := 0X
   ELSE
      id.name [0] := 0X
   END
END GetIdent;
Получается, что ДРАКОН в данном случае позволил мне составить более компактный алгоритм, без лишнего повтора проверки. Отсутствие дубля означает, что логическая структура алгоритма отражена более точно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 20:50 
Модератор
Аватара пользователя

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

Однако пример действительно неудачный.
Это ж типичная автоматная задачка. Здесь бы как раз Драконом и развернуться от души :-)

Что я и сделал. Часть логики предполагается в "умном" типе Ident (накопление символов, проверка длины идентификатора и допустимого первого символа). Т.е. "подавтомат" (его не рисовал, т.к. тривиально).


Вложения:
Ilyin.JPG
Ilyin.JPG [ 219.31 КБ | Просмотров: 26658 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 21:00 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
По редактору: действительно, проблемы у него есть, хотя для забав пока сойдёт :-) И кроме удобства. Например, позиции элементов не сохраняются (не могу выровнять операторы в разных ветках отн. друг друга - всё равно сбрасываются). В целом, ведёт себя как настоящий... Микрософт Ворд прямо какой-то... (в смысле, с глубокой внутренней логикой думания, недоступной прямолинейно мыслящему юзеру) :-)

Теперь в целом касательно представления схем, что бросилось в глаза сразу на примере примера Александра :-)

Линии слишком жирные, текст бледный на их фоне - хотя должно быть наоборот.
Вызов процедур лучше оформлять значком для "подалгоритма".
Независимые действия типа INC(from); INC(to); INC(len) хорошо бы группировать в одном знаке.
Т.к. их порядок выполнения неважен, просто одним шагом...

И касательно самой задачки типа извлечения идентификаторов...
Их бы делать на основе синт. дерева компилятора... Чтобы руками не ваять каждый самопальный частичный разбор, который всё равно не учитывает всех ситуаций...
Короче, аналога ASIS хочется :-) (эк, размечтался... Особенно для закрытого XDS, на котором Александр работает).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 21:27 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
Илья Ермаков писал(а):
И касательно самой задачки типа извлечения идентификаторов...
Их бы делать на основе синт. дерева компилятора... Чтобы руками не ваять каждый самопальный частичный разбор, который всё равно не учитывает всех ситуаций...
Короче, аналога ASIS хочется :-) (эк, размечтался... Особенно для закрытого XDS, на котором Александр работает).
Закрытость XDS - не проблема. Просто я пока не ставил перед собой задачу разобраться с синтаксическими деревьями компиляторов, а решил сгородить временное решение на своём текущем уровне знаний.

А что такое ASIS? Гугл слишком много ссылок дал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 21:34 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Ada Semantic Interface Specification.
Для Ады стандартизирован интерфейс библиотеки для доступа ко всей информации о разобранной программе.
Т.е. инструментам разного рода уже не нужно самостоятельно перемалывать исходник.

Изначально разработан компанией AdaCore, разработчик - наш соотечественник С.И. Рыбин, из НИИВЦ МГУ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 21:42 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Александр Ильин писал(а):
Получается, что ДРАКОН в данном случае позволил мне составить более компактный алгоритм, без лишнего повтора проверки. Отсутствие дубля означает, что логическая структура алгоритма отражена более точно.

Вложение:
.JPG

Вы успешно осваиваите Дракон-редактор. Надо освоить объединение линий, икона
"Конец" должна находится на одной вертикале (шампуре) с заголовком.
Ссылка на каталог Дракон-редактора, можно будет просмотреть процесс формирования схемы.
http://narod.ru/disk/124663000/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%98%D0%BD%D0%B0%D1%87%D0%B5.rar
Архивированный каталог со всем содержимым больше 250 Кбайт, потому и помещаю на НАРОДЕ

Сообщение поправлено администратором. Пример с Народа размещён ниже.


Последний раз редактировалось ==== Пятница, 18 Апрель, 2008 22:31, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 22:15 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
Геннадий Тышов писал(а):
Надо освоить объединение линий, икона "Конец" должна находится на одной вертикале (шампуре) с заголовком.
Спасибо за ваш вариант!
И за то, что напоминаете правила, - я так и не удосужился их как следует изучить.

PS: Когда пишете сообщение на форум, ниже кнопки "Отправить" есть поле "Имя файла" и кнопка "Choose..." (= "Выбрать...") рядом. Так я прикрепляю картинки (и прочие файлы) прямо к сообщению. Ограничение на размер файла - 250 килобайт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 22:19 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 24
Илья Ермаков писал(а):
Что я и сделал.


О! Совсем другое дело. Хотя я и не изучал Дракон. Мне кажется, что главное отличие - видимая структура.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 22:21 
Модератор
Аватара пользователя

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

В общем, можно сказать, что Дракон - это автоматное программирование.
Но Дракон позволяет без выкрутасов выражать и обычный алгоритм ("неосновные состояния" в терминах Шалыто, которые они записывают на обычном языке программирования).
Т.е. структурно-автоматный язык.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 23:31 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Илья Ермаков от 18.04.2008 21:50 писал(а):
Это ж типичная автоматная задачка. Здесь бы как раз Драконом и развернуться от души :-)
К вопросу программирования схемы Силуэт в КП:
Код:
PROCEDURE ИмяСилуэт(IN ИмяВетки:ARRAY OF CHAR;.......);
BEGIN
  LOOP    (*Цикл Силуэта*) 
    IF ИмяВетки$="Ветка_1" THEN    (* Для константы используются текст или его фрагмент иконки "Ветка"*)
       .................
       ИмяВетки:="Ветка_2"        (*Переход на другую ветку*)
    ELSEIF ИмяВетки$="Ветка_2" THEN  (*Ветка с 2 адресами*)
       IF Условие THEN                   
         .................
         ИмяВетки:="Ветка_1"      (*Веточный цикл, т.е. переход на ранее описанную ветку*)
       ELSE
         .................
         ИмяВетки:="Ветка_3"
       END
    ELSEIF ИмяВетки$="Ветка_3" THEN (* Последняя ветка с иконкой "Конец"*)
       .................
       EXIT    (*Иконка "Конец"*)
    END 
  END
END ИмяСилуэт
 
ИмяСилуэт("Ветка_1", .........);  (*Вызов процедуры со входом в 1-ю ветку*)
Для Силуэта с несколькими Заголовками, могут вызываться другие ветки.


Последний раз редактировалось ==== Воскресенье, 20 Апрель, 2008 05:29, всего редактировалось 6 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Пятница, 18 Апрель, 2008 23:49 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 140
Откуда: Троицк, Москва
Александр Ильин писал(а):
Перевожу сейчас этот алгоритм в текст на Обероне. ...


Прошу прощения, но процедура вызывает подозрения... не нравится мне цикл, первая проверка лишняя? ... что-то не то. Вероятно, дело в том, как процедура "вырезана" из контекста... но проверять сил нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Суббота, 19 Апрель, 2008 00:44 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
Info21 писал(а):
Прошу прощения, но процедура вызывает подозрения... не нравится мне цикл, первая проверка лишняя?
Первая половина условия на первой итерации всегда выполняется, поэтому можно переписать так:
Код:
   (* было: *)
   WHILE (i >= 0) & IdentChar (r.ch) DO
      id.name [i] := r.ch;
      DEC (i);
      IF i >= 0 THEN
         r.ReadPrev
      END
   END;
   (* стало: *)
   IF IdentChar (r.ch) THEN
      REPEAT
         id.name [i] := r.ch;
         DEC (i);
         IF i >= 0 THEN
            r.ReadPrev
         END
      UNTIL ~(i >= 0) OR ~IdentChar (r.ch)
   END
Убрать дубль проверки "i >= 0" можно, если добавить переменную done: BOOLEAN:
Код:
   IF IdentChar (r.ch) THEN
      done := FALSE;
      REPEAT
         id.name [i] := r.ch;
         DEC (i);
         IF i >= 0 THEN
            r.ReadPrev;
            done := ~IdentChar (r.ch)
         ELSE
            done := TRUE
         END
      UNTIL done
   END
Просто так более громоздко, да и переменная дополнительная, а сэкономили чуть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Суббота, 19 Апрель, 2008 07:08 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Александр Ильин писал(а):
Надо было мне продумать алгоритм, и я решил нарисовать его с помощью редактора Геннадия Тышова.

Извените при просмотре, в результате каких то действий с моей стороны, изображение исчезло, появилось .png . Прошу восстановить.
Предлагаю в сообщениях прикреплять выходной файл дракон-редактора (.drt). Можно будет и просмотреть и внести предлагаемые изменения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Суббота, 19 Апрель, 2008 07:09 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Геннадий Тышов писал(а):
Александр Ильин писал(а):
Надо было мне продумать алгоритм, и я решил нарисовать его с помощью редактора Геннадия Тышова.

Извините, при просмотре, в результате каких то действий с моей стороны, изображение исчезло, появилось .png . Прошу восстановить.
Предлагаю в сообщениях прикреплять выходной файл дракон-редактора (.drt). Можно будет и просмотреть и внести предлагаемые изменения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Суббота, 19 Апрель, 2008 08:59 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
Геннадий Тышов писал(а):
Извените при просмотре, в результате каких то действий с моей стороны, изображение исчезло, появилось .png. Прошу восстановить.
Скорее всего, вы отключили показ картинок в своём браузере. На сервере вы ничего поломать не могли.
Геннадий Тышов писал(а):
Предлагаю в сообщениях прикреплять выходной файл дракон-редактора (.drt). Можно будет и просмотреть и внести предлагаемые изменения.
Хорошая мысль! Прикрепил файл к первому сообщению.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Суббота, 19 Апрель, 2008 10:08 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Александр Ильин писал(а):
Хорошая мысль! Прикрепил файл к первому сообщению.

Ваш файл изменил:
1. Соседние иконки "Действия" заменил одной.
2. Выполнил объединения соседних линий, имеющих соединение, в одну. Для этого выбирается узел на 1-й линий и соединении, операция "Узел: объединить линии", выбирается узел на 2-й линии и соединении. Возможно образуется наложение линий и элементов, устранить соответствующим сдвигом элементов и узлов. Для этого выбрать элемент или узел, сдвинуть Ctrl+стрелки.
3. Выполнение алгоритма производится только по шампуру т.е. вниз по вертикали, исключение выход вправо из "Вопроса".
Скачать:http://forum.oberoncore.ru/download/file.php?mode=view&id=116
Для вложенных файлов не допускается расширение .drt , можно ли разрешить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пример алгоритма на ДРАКОНе
СообщениеДобавлено: Суббота, 19 Апрель, 2008 13:27 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 28
Откуда: Ленинград, Емельянов Алексей Николаевич
Честно говоря, ни один из вариантов схем меня совершенно не вдохновил. Как-то все не очень понятно. Что касается цикла, может лучше так?
Код:
   IF IdentChar (r.ch) THEN
      LOOP
         id.name [i] := r.ch;
         DEC (i);
         IF (i >= 0)&(IdentChar (r.ch)) THEN
            r.ReadPrev
         END
         ELSE EXIT END
       END
   END


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу 1, 2, 3, 4  След.

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


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

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


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

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