OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 16 Ноябрь, 2018 10:30

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




Начать новую тему Ответить на тему  [ Сообщений: 113 ]  На страницу Пред.  1, 2, 3, 4, 5, 6
Автор Сообщение
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Вторник, 25 Декабрь, 2012 09:51 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Да, здорово, спасибо, Дмитрий! :)
Вот и ещё иллюстрация как к возможностям ДАЛВЯЗ, так и к тому, какое место алгоритмическая часть занимает в программной модели процесса. ;) И отсюда где-то и к тому, зачем нужно "разделять и связывать абстракции" в программных описаниях... хотя бы как в примере, упомянутом здесь: viewtopic.php?p=76208#p76208.
Пример достоин служить иллюстрацией на странице решения... сделано... однако разрешение маловато...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Среда, 26 Декабрь, 2012 09:54 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Вот наконец скриншот:
Вложение:
Захват-Dalvjaz2-main+verbox.png
Захват-Dalvjaz2-main+verbox.png [ 27.11 КБ | Просмотров: 6998 ]
- не знаю, насколько ещё актуально... :)

И по ЦС ещё. Как можно понять, здесь Вы предлагаете, чтобы вместо этого:
В.Д. Паронджанов в ВП:ДРАКОН от 21:05, 14 декабря 2012, п. 3.5 писал(а):
... При этом функция исходного кода программы переходит к дракон-схемам. Это позволит отказаться от текстовых управляющих структур, используемых в языках высокого уровня, и заменить их на управляющую графику ДРАКОНа. Исходный код программы станет более понятным и удобным для человека, увеличится производительность труда программистов[85][86].
- передать функцию человекочитаемого представления от "исходного кода" (в какой бы то ни было форме записи) к автоматной модели? А код по ней генерить автоматически, и человеку не показывать?..
С Вами в этом отношении, как видно, согласен не только Алмазов, но и Шалыто. Ну и я уже говорил, что согласен - конечно, лучше человеку работать с таким представлением: viewtopic.php?p=68884#p68884, чем с такими: .

Однако есть вопрос практической реализации. Сказанное здесь справедливо при условии полноты и непротиворечивости системы переходов: viewtopic.php?p=71826#p71826.
Т.е. силуэт (и любая алгоритмизованная модель деятельности) представляет именно полный и непротиворечивый КА. Так что если разработчик может сделать то, что предлагает Шалыто (и Прохоренко), уже в автоматной модели - то да, дальше возможна автогенерация. Если же это не получается однозначно, то возможна ситуация, когда автоматный код где-то придётся писать вручную.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Среда, 26 Декабрь, 2012 11:03 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 126
Рекомендуемое разрешение работы с программой: 1280 * 1024
Что делать для случая 1024 * 768 я уже писал выше.
Но, как видно из скриншота - возможны варианты, кое-где могут быть и такие глюки.
Но ничего страшного в этом нет, ведь моя программа - это бесплатный макет и поставляется
"как есть".
Так как в архиве версии есть и исходный код, то можно адаптировать приложение под
компьютер, перетранслировав его на своей машине под D4 - D7.
При втаскивании в более новые версии будут проблемы, ведь у меня идет обработка
однобайтовых символов, а в новых версиях D уже юникод.
-------------------------------------------------------------------------
Ну не такой уж я фанатик автоматного программирования.
Да и моя программка как раз и была написана так, чтобы программисту было как
можно легче разбираться в генерируемом коде. Так что задачи "наглухо" закрыть исходный код
от программиста у меня не было.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Четверг, 27 Декабрь, 2012 08:42 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Ну и ладно... :) Просто в любом случае Шалыто и Вы здесь, наверное, правы - ЦС удобно получать из системы состояний. Которая (например, в форме автоматного графа и/или таблицы переходов) тоже будет частью проекта среды... и процесса Разработки И Документирования... Т.к. именно от неё можно переходить и к ручному писанию автоматного кода. В этом посте систематизировал основные характеристики проекта для поддержки этого.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Воскресенье, 30 Декабрь, 2012 09:03 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
На эту страницу добавил введение в среду. В одной из форм документа, возможной для перспективной среды. :) Наверное, многое интуитивно понятно; возможно, что-то требует уточнения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Вторник, 05 Февраль, 2013 09:29 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 126
Ответ Владиславу на его личное сообщение (т.к. "личного" там практически нет, то и отвечу публично)
---------------------------------------------------------------------------------------------------------
О развитии ДАЛВЯЗ
От: Владислав Жаринов
Отправлено: Понедельник, 04 Февраль, 2013 18:53
Кому: Дмитрий_ВБ

Сообщение

Заголовок: "Прошу удалить" М-да... хорошо, что у Вас всё называется иначе... только "цикл-силуэт"
всё-таки придётся переименовать...

Уважаемый Дмитрий,
а что Вы думаете о реализации какого-то описания типов? Скажем как у Ярослава: http://drakon.su/d2o_dron ?.. Имеется в виду, чтобы и в деклар-части появились таблицы...

Удачи!
Владислав
--------------------------------------

1) Здесь имеется в виду следующее сообщение Владимира Даниеловича:

Цитата:
Владимир Паронджанов Заголовок сообщения: Re: Пересмотр терминологии ДРАКОН-аДобавлено: Воскресенье, 03 Февраль, 2013 15:07

Здесь возникает вопрос авторского права.

Я как автор языка ДРАКОН требую, чтобы во всей документации, связанной с языком ДРАКОН, в точности соблюдалась, причем без искажений, установленная мной терминология. Любое отступление от авторской терминологии означает, что я не могу дать согласия на использование термина ДРАКОН.


Не собираюсь отказываться от понятия "силуэт", и вот почему.
Википедия: "Силуэт — ограниченное контуром отображение чего-либо"

Даже MS не смог запатентовать слово "Окна" - пришлось после него добавлять R в кружочке.
Вот и Владимиру Даниеловичу придется сделать то же самое, если он (хотя вряд ли) захочет
запатентовать слово "силуэт", а я использую это слово в его буквальном смысле, а не как чью-либо
торговую марку.

2) По поводу политики форума и его деления на темы: я участвую в форуме http://forum.oberoncore.ru/
и на сайте drakon.su выкладывать свои материалы не собираюсь.
Я уже писал, что согласен с Алексеем Донским, что мне не нравится навязчивое использование
слова "дракон" и я не хочу пользоваться этим словом, несущим для меня негативную эмоциональную
окраску, а также размещать какие-либо материалы на сайте с таким названием.

3) Планы по развитию ДАЛВЯЗ есть, но свободного времени хронически нет. В любом случае
у меня нет планов вводить какую-либо типизацию в программистском стиле, т.к. по своей сути
ДАЛВЯЗ является метаязыком и опускать его до уровня оболочки над каим-либо конкретным
языком программирования я не хочу.
Наоборот, сейчас есть мысль объединить форматы представления неструктурированного текста,
документа и исходного кода программы.
В качестве демонстрационного макета может быть набросаю простенькую программку
"Силуэт Для Читателя", если в голове сложится что-нибудь интересное на эту тему.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Вторник, 05 Февраль, 2013 11:47 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Важная инфа, сам уже хотел уточнить отношение к драконсу как площадке (учитывая, что сообщения о ведении мною там материалов по ДАЛВЯЗ ранее Вами не комментировались). Теперь появилась воля автора... чёткая и недвусмысленная... Об исполнении здесь: viewtopic.php?p=77891#p77891.
Надеюсь, что после обозначения отношения отсюда с ДАЛВЯЗ-контентом не попросят немедленно... но м.б. надо подумать, где на именно Оберонкоре можно найти ему место... За пределами-то уже есть... и на специализированных площадках, где содержательный интерес проявляется... Как Вы могли видеть, ДАЛВЯЗ представлялся на двух ресурсах (кстати, против пребывания там ничего не имеете? тогда перенесу недостающие там сведения).

Насчёт объединения не понял, но звучит... ждём... Дело в том, что метаязык тоже может содержать средства типизации... наверное, имелось в виду что-то подобное этому (как вариант)?..
Временных и энергетических ресурсов Вам! :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Вторник, 26 Март, 2013 17:02 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 126
Цитата:
Ярослав Романченко пишет:
В своём коде наверное только Дмитрий_ВБ и разбирается

Когда (и если) у меня появятся свободное время и желание для доведения до рабочего вида
новой версии, подумаю и над вопросом внятного документирования программы dalvjaz2.
Может, что-нибудь и придумаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Пятница, 29 Март, 2013 10:28 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Дмитрий_ВБ писал(а):
...
Когда (и если) у меня появятся свободное время и желание для доведения до рабочего вида
новой версии, подумаю и над вопросом внятного документирования программы dalvjaz2.
Может, что-нибудь и придумаю.
Ну, это будет тоже связано с обсуждаемым здесь, наверное...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Пятница, 29 Март, 2013 16:42 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 126
Простейший вариант использования программы dalvjaz2 при верификации
исходного текста ПО

--------------------------------------------------------------------------

Протокол верификации программы/модуля ___________ ПО системы управления

1. Выполнена сверка исходного текста модуля с алгоритмами работы модуля,
приведенными в спецификации модуля в документе "Описание ПО системы управления"

Соответствие: соответствует. __________ подпись специалиста


2. Выполнено тестирование модуля с целью убедиться в правильности выполняемых
модулем функций и их соответствии функциям, указанным в спецификации модуля.

Протокол тестирования программы/модуля ___________ ПО системы управления

__________ подпись разработчика/тестировщика

__________ подпись руководителя



Форма протокола тестирования модуля может быть такой:

Программа/модуль(модули, если одновременно тестируются несколько модулей):

Назначение: (берется из описания ПО)

Разработчик: __________

Дата и время последней модификации: __________

Методика тестирования: (можно взять как перечисление проверяемых функций из
описания ПО)

Тестовый проект: (нужно указать название тестовой программы, при помощи
которой тестируется модуль (или модули)

Дата и время тестирования: ___________

Результаты тестирования: ___________


--------------------------------------------------------------------------

Алгоритмы работы процедур модуля записываются псевдокодом и помещаются
в файл "Описание ПО системы управления".

Псевдокод копируется в исходный текстовый файл для программы dalvjaz2,
которая строит из этого псевдокода схему алгоритма.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Четверг, 04 Апрель, 2013 07:16 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Методику тестирования, кстати, тоже можно оформлять как ДАЛВЯЗ-схему (ЛСП-таблицу)... с подключением команд сценария...
А вообще главное - внедрить наконец в какую-то практику...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Четверг, 20 Июнь, 2013 23:42 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 126
DAL_VJAZ_2 0.83

Вложение:
dal2_083.rar [378.46 КБ]
Скачиваний: 135


Как обычно, примерно раз в полгода выкладываю обновления.
Не могу сказать, что в этот раз получилось создать что-то революционно
новое, типа того, что предлагается в теме "КУБ-СИЛУЭТ ...".
Скорее наоборот, попробовал собрать вместе старые заделы.

Ну и перелистал на досуге книгу С.Макконнела "Совершенный код", главу 9,
"Процесс программирования с псевдокодом":

"* Избегайте синтаксических элементов языков программирования. Псевдокод
позволяет проектировать на несколько более высоком уровне, чем код.
Применяя конструкции языка программирования, вы мыслите на более низком
уровне и теряете преимущества проектирования на высоком уровне, загружая
себя ненужными синтаксическими ограничениями.
* Пишите псевдокод на уровне намерений. Описывайте назначение подхода,
а не то, как этот подход нужно реализовать на выбранном языке
программирования.
* Пишите псевдокод на достаточно низком уровне, так чтобы код из
него генерировался практически автоматически.

[При описаниии метода] начните с основных моментов, а затем детализируйте
их. Самая главная часть метода - заголовок-комментарий, описывающий
действия метода, так что начните с краткой формулировки назначения метода.
Написание этой формулировки поможет вам прояснить ваше понимание метода.

Написав общий комментарий, добавьте высокоуровневый псевдокод.

Написав псевдокод, вы окружаете его кодом, а псевдокод превращаете в
комментарии программы. Если вы руководствуетесь перечисленными правилами
создания псевдокода, комментарии в вашей программе будут полными и ясными."


Конечно, эти утверждения не бесспорны. Например, если взять книгу "Проект
Оберон", то из приведенных там листингов видно, что Н.Вирт и Ю.Гуткнехт
скорее придерживаются идеи о самодокументировании хорошо написанных
программ.
Но такие почти идеальные тексты ПО в жизни встречаются не слишком часто.
Поэтому наличие достаточно подробных комментариев (а насколько подробных
я постараюсь ответить) в тексте программы представляется мне желательным
даже с точки зрения самого программиста, если он планирует сколько-нибудь
длительное время сопровождать написанный им код.


Итак, DAL_VJAZ_2 0.83, основные изменения:

1) изменение формата служебных комментариев при работе с текстом программы;
все служебные комментарии в файлах u_dalvj.pas, u_ls.pas, u_fajly.pas и
u_red.pas программы dalvjaz2 приведены к новому формату;
2) возвращение полноценной функциональности минимизированной схеме и
улучшение взаимодействия между минимизированной и полной формами визуальной
схемы;
3) выполнена предварительная подготовка к переносу проекта dalvjaz2
в Delphi 2009 и выше (будет транслироваться, но с множеством warning-ов).


Пункт 1:

Я решил начиная с версии 0.83 изменить формат служебных комментариев
dalvjaz2 для работы с исходным кодом программы

Код:
параметры конфигурации    версия 0.82                  версия 0.83
в файле dalvjaz.cfg

; заголовки программных и текстовых записей задаются как раньше:

__загол_прог_записи      "(* i."                       "(* i."
__загол_текст_записи     "(* t."                       "(* t."

__строка_док_IF        "(*i*)  if"                   "(** если"
__строка_док_EI        "(*i*)  end else if"          "(** иначе если"
__строка_док_EB        "(*i*)  end else begin"       "(** иначе"
__строка_док_END       "(*i*)  end;"                 "(** конец"
__строка_док_CB        "(*i CB *)"                   "(** цикл"
__строка_док_CE        "(*i CE *)"                   "(** конец цикла"
__строка_док_A         "(*i*)"                       "(**"
__проверка_ветки       "if (wetka = "                "if (wetka = " 
__переход_к_ветке      "wetka := "                   "wetka := "
__строка_док_RET       "(*i ВЫХОД *)"                "(** выход"
__строка_док_STOP      "(*i КОНЕЦ *)"                "(** КОНЕЦ СХЕМЫ"

Также в версии 0.83 теперь в конфигурации явно задаются открывающий
и закрывающий комментарии для языка программирования.


Исходный код для 0.82

(* i.3. простой силуэт *)     
   (*i*)  begin
   (*i*)  wetka := 1;                       
   (*i CB *)  while (wetka <> 0) do begin             
      (*i*)  if (wetka = 1)
         (*i*)  if (что-нибудь) then begin           
            (*i*)           
         (*i*)  end else if (что-нибудь) then begin 
            (*i*)             
         (*i*)  end else begin
            (*i*)             
         (*i*)  end;         
         (*i*)  wetka := 2;   
      (*i*)  end else if (wetka = 2) 
         (*i*)                       
         (*i*)  wetka := 3;           
      (*i*)  end else if (wetka = 3) 
         (*i*)  if (что-нибудь) then begin 
            (*i*)   
         (*i*)  end else if (что-нибудь) then begin
            (*i*) 
         (*i*)  end else if (что-нибудь) then begin
            (*i*)           
         (*i*)  end;         
         (*i*)  wetka := 0; 
      (*i*)  end;           
   (*i CE *)  end;
   (*i ВЫХОД *)             
   end;
(*i КОНЕЦ *)


Исходный код для 0.83

(* i.3. простой силуэт *)     
   (**)  begin
   (**)  wetka := 1;
   (** цикл для ветки *)                       
   while (wetka <> 0) do begin             
      (** если *)
      if (wetka = 1)
         (** если *) 
         if (что-нибудь) then begin           
            (**)
         (** иначе если *)             
         end else if (что-нибудь) then begin 
            (**)
         (** иначе *)             
         end else begin
            (**)             
         (** конец *)  end;         
         (**)  wetka := 2;   
      (** иначе если *)
      end else if (wetka = 2) 
         (**)                       
         (**)  wetka := 3;           
      (** иначе если *)
      end else if (wetka = 3) 
         (** если *)
         if (что-нибудь) then begin 
            (**)
         (** иначе если *) 
         end else if (что-нибудь) then begin
            (**) 
         (** иначе если *) 
         end else if (что-нибудь) then begin 
            (**)           
         (** конец *)  end;         
         (**)  wetka := 0; 
      (** конец *)  end;           
   (** конец цикла *)  end;
   (** выход *)             
   end;
(** КОНЕЦ СХЕМЫ *)

Из сравнения вышеприведенных фрагментов исходного кода для версий 0.82 и 0.83
видно, что хотя в версии 0.83 текст процедуры стал немного длиннее, но
служебные комментарии, нужные для формирования схемы из текста исходного
кода, теперь по внешнему виду почти не отличаются от обычных комментариев,
встречающихся в тексте программы.
Так что при использовании программы dalvjaz2 0.83 можно сказать, что обычные
комментарии теперь нужны не только для пояснения смысла действий, выполняемых
в процедуре, но и для формирования программой dalvjaz2 визуальной схемы этой
процедуры.


ДАЛВЯЗ 2 дает программистам возможность создавать визуальные схемы из уже
существующих процедур и загружать уже существующие проекты из нескольких
модулей на языках семейств Pascal и С/С++. Для этого один или несколько
модулей проекта разбиваются на текстовые записи заголовками вида:
(* t. имя записи *) - для семейства Pascal
/* t. имя записи */ - для семейства C/C++
после чего модуль может быть считан в программу dalvjaz2.

Программные записи могут отображаться как текст или как схема, в зависимости
от того, взведен или сброшен флажок <схема>.

Для преобразования текстовой записи в программную нужно:
1) вставить в процедуру служебные комментарии dalvjaz2 (подробнее см. ниже,
п. "Постепенное документирование процедуры");
2) поменять в заголовке записи t на i ;
3) взвести флажок <схема> - после этого запись отобразится как схема.


ВНИМАНИЕ:

Т.к. я не могу поручиться, что генерация кода в dalvjaz2 отлажена на 100%, то

РЕЖИМ РАБОТЫ "ТЕКСТ -> СХЕМА"

(т.е. автоматическое считывание программой dalvjaz2 измененных файлов
исходного кода программы и построение новых версий визуальных схем процедур
после нажатия кнопки, пункта меню или горячей клавиши "Сохранить" в текстовом
редакторе)

ЯВЛЯЕТСЯ СЕЙЧАС ОСНОВНЫМ РЕЖИМОМ РАБОТЫ ПРОГРАММЫ dalvjaz2.

В режиме "ТЕКСТ -> СХЕМА" модули исходного кода в файле dalvjaz.cfg должны
быть заданы с параметром ПРОСМ во избежание непреднамеренного изменения
программой dalvjaz2 просматриваемых файлов исходного кода.

После установки флага "Nстр" на рабочей панели dalvjaz2 рядом с верхним
левым углом каждого блока схемы отображается номер строки в файле исходного
кода, соответствующий началу описания этого блока схемы.


Постепенное документирование процедуры

Допустим вы хотите документировать процедуру размером более 30 строк,
написанную вами более полугода назад (или вообще написанную не вами).
Что делается в процедуре в лучшем случае в общих чертах понятно из ее
названия, т.к. комментариев к тексту процедуры нет.
Тогда вставка в процедуру служебных комментариев dalvjaz2 выполняется в
несколько этапов:
Код:
1) разбейте процедуру на несколько обособленных логических блоков при помощи
комментариев действий, причем названия этих действий сейчас не важны:

procedure proc;

   (**)
   begin
   ...
   (**)
   ...
   (**)
   ...
   (**)
   ...
   (** выход *)             
   end;
(** КОНЕЦ СХЕМЫ *)

2) с той степенью подробности, какая вам нужна, проявите логическую
структуру процедуры (ЛСП), например:

procedure proc;

   (**)
   begin
   ...
   (** если *)
      ...
   (** иначе если *)
      ...
   (** конец *)  end;
   (**)
   ...
   (** цикл *)
      ...
   (** конец цикла *)  end;
   (** выход *)             
   end;
(** КОНЕЦ СХЕМЫ *)

Теперь ЛСП проявлена и dalvjaz2 может построить визуальную схему процедуры,

| КОТОРАЯ ПОЗВОЛИТ ВАМ РАССМОТРЕТЬ ДЕЙСТВИЯ, ВЫПОЛНЯЕМЫЕ В ПРОЦЕДУРЕ, БОЛЕЕ
| ВНИМАТЕЛЬНО, ЧЕМ В ТЕКСТОВОМ ФОРМАТЕ, Т.К. НА СХЕМЕ КАЖДОЕ ИЗ ВЫДЕЛЕННЫХ
| ВАМИ ДЕЙСТВИЙ БУДЕТ ОБВЕДЕНО РАМКОЙ И БУДУТ ПОКАЗАНЫ ЛОГИЧЕСКИЕ СВЯЗИ
| МЕЖДУ ВЫПОЛНЯЕМЫМИ ДЕЙСТВИЯМИ.
Код:
3) теперь, когда после изучения текста процедуры стало понятно, что в ней
происходит, нужно все это записать, чтобы потом снова не забыть:

procedure proc;

   (** начальные действия *)
   begin
   ...
   (** если выполняется условие 1 *)
      ...
   (** иначе если выполняется условие 2 *)
      ...
   (** конец *)  end;
   (** промежуточные действия *)
   ...
   (** цикл для всех элементов массива *)
      ...
   (** конец цикла *)  end;
   (** выход *)             
   end;
(** КОНЕЦ СХЕМЫ *)

Что касается оператора switch, то т.к. этот оператор является аналогом
сложного условия, то для его описания можно использовать служебные
комментарии dalvjaz2, используемые для описания сложного условия:

(** если
(** иначе если
(** иначе
(** конец

Как обычно, привожу исходный код и графический файл для процедуры
b_sozdatx_shemuClick:
Код:
(* i.9. создать из списка ЛСП визуальную схему *)

procedure Tform_ls.b_sozdatx_shemuClick(Sender: TObject);
var  wetka, i, tw:integer;
begin
   (**)  wetka := 1;
   (** цикл *)
   while (wetka <> 0)  do begin
      (** если *)
      if (wetka = 1)  then begin

         (** устанавливаем параметры главной вертикали схемы *)

         tek_alg.m_wert[dalvjaz_tek_wetka]._type := T_WERT_GLAWNAQ;
         tek_alg.m_wert[dalvjaz_tek_wetka].used := YES;
         tek_alg.m_wert[dalvjaz_tek_wetka].x  :=
                             tek_alg.m_x_wetok[dalvjaz_tek_wetka];

         tek_alg.m_inew[dalvjaz_tek_wetka] := -1;

         tek_alg.m_el_wert[dalvjaz_tek_wetka] := 0;

         tek_alg.m_wert[dalvjaz_tek_wetka].tyel := 0;

         tek_alg.m_wert[dalvjaz_tek_wetka].y1 :=
                         DALVJAZ_Y_ZAGOL;
         (** инициализация массива
             открытых вертикалей схемы *)
         mow__init(dalvjaz_tek_wetka); //_>.42.

         (** начальная инициализация переменных *)

         tek_str_lsp := 0;  // текущая строка списка ЛСП = 0
         osh_sozd_shemy := SHEMA_OK;  // номер ошибки сброшен

         pred_bl_el_sh._type := t_A;  // предидущий блочный эл-т
                                      //при построении схемы = действие
         (** удаляем вертикали для схемы *)
         udal_wert_tek_wetki(Sender); //_>.10
         (** если    РИС .e? *)
         if (osh_sozd_shemy <> SHEMA_OK)   then  begin
            (**) wetka := 50;
         (** иначе *)
         end else begin
            (**)  sbros_steka_lsp;  //_>.37.
            (** инициализация цикла сканирования ЛСП *)
            i := 0;
            (**)  wetka := 2;
         (** конец *)  end;
      (** иначе если
          начало цикла сканирования ЛСП *)
      end else if (wetka = 2)  then begin
         (** задание текущей строки ЛСП *)
         tek_str_lsp := i;
         (** запомнить блочный элемент схемы *)

         if ((i > 0) and
            ((tek_alg.m_el[i]._type = t_IF) or
             (tek_alg.m_el[i]._type = t_EI) or
             (tek_alg.m_el[i]._type = t_EB) or
             (tek_alg.m_el[i]._type = t_E) or
             (tek_alg.m_el[i]._type = t_CB) or
             (tek_alg.m_el[i]._type = t_CE)))  then
            pred_bl_el_sh := tek_el_shemy;
         (** получить текущий элемент схемы из ЛСП *)

         tek_el_shemy.ind      := tek_alg.m_el[i].ind;
         tek_el_shemy._type    := tek_alg.m_el[i]._type;
         tek_el_shemy.n_strz   := tek_alg.m_el[i].n_strz;
         tek_el_shemy.ind_m_el := i;

         tek_el_shemy.n_str := i;

         (** получить вершину стека ЛСП *)
         give_stek_lsp(0);  //_>.36.
         (** проверка ошибок ЛСП *)
         prow_oshibki_struktury(Sender);  //_>.12.
         (** если  РИС .e? *)
         if (osh_sozd_shemy <> SHEMA_OK) then  begin
            (**) wetka := 50;
         (** иначе *)
         end else begin
            (**)  wetka := 3;
         (** конец *)  end;
      (** иначе если - окончание цикла сканирования ЛСП *)
      end else if (wetka = 3)  then begin
         (** если  начало IF/EI/цикла *)
         if ((tek_el_shemy._type = t_IF) or
             (tek_el_shemy._type = t_EI) or
             (tek_el_shemy._type = t_CB))  then begin
            (** обработка  t_IF  //_>.14. *)
            if (tek_el_shemy._type = t_IF) then obr_shemy_dlq_IF(Sender);
            (** обработка  t_EI  //_>.16. *)
            if (tek_el_shemy._type = t_EI) then obr_shemy_dlq_EI(Sender);
            (** обработка  t_CB  //_>.19. *)
            if (tek_el_shemy._type = t_CB) then obr_shemy_dlq_CB(Sender);
            (** проверка ошибки   РИС .e? . *)
            if (osh_sozd_shemy <> SHEMA_OK)  then begin
               wetka := 50;   continue;
            end;
            (** заносим текущий элемент в стек ЛСП *)
            push_stek_lsp;   //_>.34.
         (** иначе если *)
         end else if (tek_el_shemy._type = t_EB)
         then begin
            (** обработка  t_EB *)
            obr_shemy_dlq_EB(Sender);  //_>.17.
            (** проверка ошибки  РИС .e? *)
            if (osh_sozd_shemy <> SHEMA_OK)  then begin

               wetka := 50;   continue;
            end;
         (** иначе если *)
         end else if (tek_el_shemy._type = t_E)
         then begin
            (** обработка t_E *)
            obr_shemy_dlq_E(Sender);  //_>.18.
            (**  проверка ошибки   РИС .e? *)
            if (osh_sozd_shemy <> SHEMA_OK)  then begin

               wetka := 50;   continue;
            end;
            (** цикл ДО *)
            repeat
               (** если     РИС .e?
                   эл. стека не используется *)
               if (el_steka_lsp.used = NO)  then begin
                  (** ошибка "нет ЕСЛИ для КОНЕЦ" *)
                  osh_sozd_shemy := SHEMA_no_IF_for_E;

                  break; // а не continue, потому что
                         // мы во внутреннем цикле
               (** иначе *)
               end else begin
                  (** извлечь элемент из стека ЛСП *)
                  pop_stek_lsp;  //_>.35.
               (** конец *)  end;
            (** конец цикла если в стеке t_IF *)
            until  (el_steka_lsp._type = t_IF);
            (**  проверка ошибки   РИС .e? *)
            if (osh_sozd_shemy <> SHEMA_OK)  then begin

               wetka := 50;   continue;
            end;
         (** иначе если *)
         end else if (tek_el_shemy._type = t_CE)  then begin
            (** обработка  t_CE *)
            obr_shemy_dlq_CE(Sender);  //_>.20.
            (**  проверка ошибки   РИС .e? *)
            if (osh_sozd_shemy <> SHEMA_OK)  then begin

               wetka := 50;   continue;
            end;
            (** если     РИС .e?
                эл. стека не используется *)
            if (el_steka_lsp.used = NO)  then begin

              (** ошибка "нет начала для конца цикла" *)
               osh_sozd_shemy := SHEMA_no_CB_for_CE;

               wetka := 50;   continue;
            (** конец *)  end;
            (** извлечь элемент из стека ЛСП *)
            pop_stek_lsp;   //_>.35.
         (** иначе *)
         end else begin
            (** обработка для действия *)
            obr_shemu_dlq_A(Sender);  //_>.21.
            (**  проверка ошибки   РИС .e?  *)
            if (osh_sozd_shemy <> SHEMA_OK)  then begin

               wetka := 50;   continue;
            end;
         (** конец *)  end;
         (** если не все эл. ЛСП *)
         if (i < (tek_alg.kol_elem - 1))  then  begin
            (** переход к следующему шагу
                цикла сканирования ЛСП *)
                inc(i);
            (**)  wetka := 2;
         (** иначе *)
         end else begin
            (**)  wetka := 4;
         (** конец *)  end;
      (** иначе если - завершающие действия *)
      end else if (wetka = 4)  then begin
         (** получить вершину стека ЛСП *)
         give_stek_lsp(0);   //_>.36.
         (** если     РИС .e?
             эл. стека используется *)
         if (el_steka_lsp.used = YES)  then begin

           (** ошибка "в стеке ЛСП есть эл." *)
            osh_sozd_shemy := SHEMA_el_w_steke_LSP;

            wetka := 50;   continue;
         (** конец *) end;
         (** обработка после сканирования ЛСП *)
         obr_shemy_w_konce_lsp(Sender);   //_>.25.
         (** если нет ошибок создания схемы *)
         if (osh_sozd_shemy = SHEMA_OK) then begin
            (** если схема считана *)
            if (dalvjaz_shema_schitana = YES) then begin
               (** сейчас никаких действий *)
            (** конец *)  end;
            (** сейчас никаких действий *)
         (** конец*)  end;
         (**)  wetka := 50;
      (** иначе если - обработка ошибки *)
      end else if (wetka = 50)  then begin
         (** обработка ошибки  РИС .er  *)

         if (osh_sozd_shemy <> SHEMA_OK) then begin
            obrabotka_oshibok(Sender);
            fl_oshibki := YES;

            if (komanda_ot = 1)  then begin
               form_dalvjaz.komanda_ot := 2;
               form_dalvjaz.zagruzka_shemy(Sender);
               form_dalvjaz.komanda_ot := 1;
            end;
         end
         else begin
            if (komanda_ot = 1)  then
               m_fajlow[fajly.tek_fajl].fl_red := YES;
         end;
         (**)  wetka := 0;
      (** конец *)  end;
   (** конец цикла для ветки *)  end;
   (** выход *)
   end;
(** КОНЕЦ СХЕМЫ *)


Вложение:
shema.JPG
shema.JPG [ 543.19 КБ | Просмотров: 6436 ]


Пункт 2:

У мини-формы схемы при наведении мыши на элементы, как это было
раньше, опять появляются всплывающие окна с активными ссылками.
Чтобы избавиться от мельтешения всплывающих окон при быстром
перемещении мыши по мини-схеме, нужно при перемещении мыши по схеме
держать нажатой клавишу Shift.

Чтобы выйти мышью на ссылку всплывающего окна, нужно навести мышь
на элемент с края противоположного тому, где должно появится
всплывающее окно, а затем не торопясь перевести мышь на всплывающее
окно и щелкнуть по ссылке.

Чтобы перейти от мини-формы схемы к нужному месту полной схемы,
нужно навести мышь на элемент и нажать клавишу F2. После перехода
к полной форме схемы у выбранного элемента рядом с его верхним
левым углом будет отображаться зеленым цветом номер начальной
строки этого элемента в файле исходного кода.

Теперь номера начальных строк элементов в файле исходного кода
отображаются не только для полной формы схемы, но также и для
мини-формы схемы.
Включением/отключением этой опции управляет флажок "N стр" на
рабочей панели программы dalvjaz2.




Пункт 3:

Основная проблема была в том, что начиная с D2009 присвоение вида

stro[0] := chr(23)

стало ошибочным - предлагается использовать процедуру SetLength.

Но т.к. я в своей программе иногда заполнял строки достаточно
экзотическими способами, то предпочел написать для себя свою
процедуру задания длины строки:


procedure set_len_stro(var s:s_dl_stro; n:integer);
var i:integer; st:s_dl_stro; st2:string[10];
begin
st := ''; st2 := '0';
for i:=1 to n do begin
st2[1] := s[i]; st := st + st2;
end;
s := st;
end;

Пусть не слишком оптимально, зато работает.


----------------------------------

По поводу подробного документирования программы.
Я думаю, что с введением нового формата служебных комментариев
для работы с исходным кодом программы это дело наконец стронулось
с места и будет рано или поздно сделано.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программы AB_VJAZ и DAL_VJAZ
СообщениеДобавлено: Суббота, 29 Июнь, 2013 19:44 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 126
Добавляю описание основной логики работы программы DAL_VJAZ_2 0.83 в текстовом формате
Вложение:
dal2_083.txt [92.37 КБ]
Скачиваний: 143


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

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


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

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


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

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