OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 06:15

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




Начать новую тему Ответить на тему  [ Сообщений: 259 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 13  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 29 Ноябрь, 2013 10:16 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Вот мне творческая задача:
Описать синтаксис этого языка и реализовать транслятор. :)

Думаю, что это будет полезное упражнение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Ноябрь, 2013 10:19 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ilovb писал(а):
Помня об этой теореме, полезно при этом не забывать и замечание Дейкстры:
Цитата:
Упражнения по более или менее механическому переводу произвольной схемы алгоритма в схему без переходов, однако, не рекомендуются. При этом не ожидается, что результирующая схема будет более понятной, чем исходная.
Источник: "О вреде оператора GOTO".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Ноябрь, 2013 10:27 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Ну это действительно так. Схема без переходов становится совершенно ненаглядной. В двухмерных изображениях алгоритмов несколько другие правила, имхо. И существование Дракона это подтверждает.


ps Проблема то в том и заключается, что вы хотите любую двухмерную схему иметь в виде одномерной структурной программы. Т.е. вы не хотите мириться с тем фактом, что при преобразовании схемы в структурный линейный текст, неизбежно вылезут дублирования, коих на схеме не было. Ведь так?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Ноябрь, 2013 10:45 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Кстати, если кто не в курсе, в цифровой технике, на мой взгляд есть некий аналог теоремы Бёма-Якопини: любое цифровое устройство (хоть комбинационное, хоть последовательностное) можно построить, используя только лишь один базовый логический элемент 2И-НЕ (в нужном количестве). Принципиальная электрическая схема устройства при этом, в полном соответствии с замечанием Дейкстры, в общем случае не становится ни проще, ни понятнее. На практике в распоряжении разработчика находится широкий набор как базовых логических элементов (если собирать схему на "рассыпухе"), так и готовых интегральных схем (регистры, триггеры и т.д.)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Ноябрь, 2013 10:48 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ilovb писал(а):
ps Проблема то в том и заключается, что вы хотите любую двухмерную схему иметь в виде одномерной структурной программы. Т.е. вы не хотите мириться с тем фактом, что при преобразовании схемы в структурный линейный текст, неизбежно вылезут дублирования, коих на схеме не было. Ведь так?
Я пока воздержусь от ответа. Хочу досконально во всём этом разобраться.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Ноябрь, 2013 23:43 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Рекомендую перечитать раздел "О понимании программ" из статьи Дейкстры "Заметки по структурному программированию"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Ноябрь, 2013 08:50 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ilovb писал(а):
Рекомендую перечитать раздел "О понимании программ" из статьи Дейкстры "Заметки по структурному программированию"
Уже перечитываю, в том числе и другие источники.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Ноябрь, 2013 13:05 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
igor писал(а):
Хочу досконально во всём этом разобраться.
Пока что я понял только то, что языки Оберон, Оберон-2 и Компонентный Паскаль не отвечают принципам структурного программирования. Вот такая вот суровая правда. Но я пока не утверждаю, что это плохо (или хорошо). Просто констатирую факт.
Кстати, в последней ревизии языка Оберон неструктурный оператор LOOP(EXIT) уже отсутствует. (Тоже просто факт, без комментариев)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Ноябрь, 2013 22:34 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
igor писал(а):
Кстати, в последней ревизии языка Оберон неструктурный оператор LOOP(EXIT) уже отсутствует. (Тоже просто факт, без комментариев)


Еще отсутствует неструктурный RETURN :wink: Последний Оберон, возможно, единственный чистый структурный язык.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Ноябрь, 2013 23:40 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
ilovb писал(а):
Илья Ермаков писал(а):
Процесс выполнения которой имеет вид: Проверка; { Действия; Проверка }

Это сообщение натолкнуло на любопытную фантазию :)

Еще нафантазировалась такая картинка:
Вложение:
Snap 2013-12-01 at 00.24.48.png
Snap 2013-12-01 at 00.24.48.png [ 71.3 КБ | Просмотров: 12735 ]


Тут структурная программа изображена в виде дерева, где каждая ветка (последовательность S) растет из первичного охранника B(BEGIN) и оканчивается вторичным охранником E(END)

(Bn, Sn, ..., Sn, En) - это ветка по номером n

Так и напрашивается императивный лисп! :D
Код:
(B0,
   (B1,
      S1,
      (B2,
         S2,
      E2),
      S1,
   E1),
   S0,
   (B3,
      S3,
      (B4,
         S4, S4,
      E4),
      S3, S3,
   E3),
   S0, S0, S0, S0,
E0)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Декабрь, 2013 06:13 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
Построение блок схем программы в виде дерева рассмотрено на форуме здесь - " Альтернативный ВИЗУАЛЬНЫЙ СТРУКТУРНЫЙ ПОДХОД К АЛГОРИТМАМ".

Предложена методика для практического применения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Декабрь, 2013 13:05 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
ilovb писал(а):
ilovb писал(а):
Илья Ермаков писал(а):
Тут структурная программа изображена в виде дерева, где каждая ветка (последовательность S) растет из первичного охранника B(BEGIN) и оканчивается вторичным охранником E(END)


В теории схем это называется древесной развёрткой алгоритма (если не путаю).

А циклический алгоритм даёт бесконечно рекурсивные ветки в таком дереве...

И вообще, уже любой набор управляющих конструкций можно рассматривать как способ "упаковки" такого дерева.
Структурный, "драконистый" и т.п.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Декабрь, 2013 13:59 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 144
Откуда: Россия, Питер
ilovb писал(а):
ps Проблема то в том и заключается, что вы хотите любую двухмерную схему иметь в виде одномерной структурной программы. Т.е. вы не хотите мириться с тем фактом, что при преобразовании схемы в структурный линейный текст, неизбежно вылезут дублирования, коих на схеме не было. Ведь так?

Не могли бы Вы привести пример (или ссылку) двухмерной схемы, которую невозможно преобразовать в структурный линейный текст, кроме как использовав дублирование?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Декабрь, 2013 14:44 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Эдуард, смотрите в этом сообщении: viewtopic.php?f=88&t=2008#p83930

2 igor:
Вирт таки прокомментировал этот формализм!
Цитата:
The following, and last two, examples of problems are added to show that often the need for an exit in the middle construct is based a preconceived notion rather than on a real necessity, and that sometimes an even better solution is found when sticking to the fundamental constructs.

http://www.inf.ethz.ch/personal/wirth/A ... ograms.pdf
стр. 254-255

ps Даже холодок по спине. Статья будто после прочтения этой ветки написана... :D
Вложение:
Snap 2013-12-01 at 15.49.15.png
Snap 2013-12-01 at 15.49.15.png [ 8.68 КБ | Просмотров: 12688 ]

Мое замечание про два goto...
Вложение:
Snap 2013-12-01 at 15.48.47.png
Snap 2013-12-01 at 15.48.47.png [ 16.53 КБ | Просмотров: 12688 ]

Исходный while, с которого началось обсуждение...
Вложение:
Snap 2013-12-01 at 15.49.30.png
Snap 2013-12-01 at 15.49.30.png [ 11.08 КБ | Просмотров: 12688 ]

Вариант Валерия Лаптева...
Вложение:
Snap 2013-12-01 at 15.48.59.png
Snap 2013-12-01 at 15.48.59.png [ 10.47 КБ | Просмотров: 12688 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Декабрь, 2013 18:18 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Ух, ты! Полный расклад :)
ilovb писал(а):
ps Даже холодок по спине. Статья будто после прочтения этой ветки написана... :D
История ходит по кругу...

ilovb писал(а):
Вирт таки прокомментировал этот формализм!
Цитата:
The following, and last two, examples of problems are added to show that often the need for an exit in the middle construct is based a preconceived notion rather than on a real necessity, and that sometimes an even better solution is found when sticking to the fundamental constructs.

http://www.inf.ethz.ch/personal/wirth/A ... ograms.pdf
стр. 254-255
Не уверен, что я правильно понял предложение. Поправьте пожалуйста, если что:
Цитата:
Следующий, и два последние, примеры проблем были добавлены чтобы показать, что часто необходимость в выходе из середины конструкции основана больше на предвзятом мнении, чем на реальной необходимости, и что иногда равное лучшее решение основано на привязке к фундаментальным конструкциям.
Если я правильно понял, Вирт в 1974 году не одобрял выходы из середины цикла.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Декабрь, 2013 18:44 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Все так. Ключевая мысль вот:
Цитата:
...основана больше на предвзятом мнении, чем на реальной необходимости...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Декабрь, 2013 19:45 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Ну и последний комментарий Вирта по этому вопросу:
Цитата:
Porting the Oberon Compiler from Oberon to Oberon-07
Niklaus Wirth, 15. 8. 2007
...
Features that had been removed
1. The Loop Statement
There were only 4 loop statements in the compiler – a sign of good programming ☺. The principal
characteristic of the loop statement is that it allows several termination points. Thus, there is no
general recipe for translating it into a repeat or while statement. In my experience, a careful
search for a new formulation is worth while. In all cases, the new solution turned out to be more
satisfactory.

...


ps Фразу "There were only 4 loop statements in the compiler – a sign of good programming" лично я не понял, ибо компилятор был набит этими Loop под завязку.

Добавлено:
Еще комментарий:
Цитата:
It had been thought that the while statement with the termination condition at its entry, and the
repeat statement with the termination condition at its end must be amended by a general and
flexible construct with termination conditions anywhere. The loop statement with its exit
statements represents, however, a break with the idea of a structured language, where properties
of a statement can be derived from those of its components. The loop statement with its
syntactically unconnected exit statements does not allow this. It has therefore been deleted from
the language together with the associated exit statement

http://www.inf.ethz.ch/personal/wirth/O ... eron07.pdf


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Декабрь, 2013 06:47 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
По поводу двух скрытых goto внутри цикла. Раз все молчат, тогда скажу я. :)
Демонстрация наличия внутри цикла двух скрытых goto сама по себе не может служить доказательством неструктурности этого оператора. Аналогичное "доказательство" можно было бы применить и к структурному циклу WHILE:
Код:
L1: if ~C then goto L2;
    <statement sequence>;
    goto L1;
L2: ...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Декабрь, 2013 07:28 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Никто и не говорил, что это что-то доказывает.

Илья Ермаков писал(а):
А циклический алгоритм даёт бесконечно рекурсивные ветки в таком дереве...

Значит не совсем такое дерево. На моей схеме уже есть и ветвления и циклы. Ветка выполняется если B и повторяется пока E


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Декабрь, 2013 08:31 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ilovb писал(а):
Никто и не говорил, что это что-то доказывает.
Значит вопрос о неструктурности цикла с выходом из середины для меня остаётся открыт (по крайней мере до тех пор, пока я не дойду до того места у Дейкстры, где он это доказывает).


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

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


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

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


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

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