DRAKON.SU

Текущее время: Четверг, 28 Март, 2024 22:33

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: Понедельник, 07 Июль, 2014 15:35 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Уважаемые коллеги!

Перед Вами статья преподавателей Тюменского государственного университета Григорьева М.В. и Ткаченко И.Н.

Прошу прокомментировать

http://online.rae.ru/1761
http://online.rae.ru/pdf/1761
Цитата:
Трансляция ДРАКОН-схем в программный код С++


Григорьев М.В., Ткаченко И.Н.

Тюменский государственный университет

m_grigoriev@mail.ru

ДРАКОН – графический алгоритмический язык программирования, в котором используются два типа элементов: графические фигуры (иконы) и текстовые надписи [1]. Поэтому язык ДРАКОН имеет не один, а два синтаксиса: графический и текстовый. Графический синтаксис охватывает алфавит икон, правила их размещения в поле чертежа и правила связи икон с помощью соединительных линий. Текстовый синтаксис же зависит от синтаксиса целевого языка программирования. Целевым языком является любой язык программирования, команды которого размещаются в графических фигурах.

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

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

Таких элементов всего два: «примитив» и «силуэт» в формальной грамматике они представлены соответствующими нетерминалами. «Зависимые» элементы представлены терминалами.[2] При создании схемы происходит комбинирование «свободных» и «зависимых» элементов.

Сопоставив формальные грамматики графического языка программирования (моделирования) и текстового языка программирования получим алгоритм трансляции ДРАКОН-схем в программный код С++. [3]

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

Трансляция схемы, так же как и построение, начинается со «свободного» элемента. Метод принимает указатель на элемент, после чего идёт часть общая для всех «свободных» элементов. Каждый из них, имеет заголовок, текст которого выводится в файл, за заголовком идёт открывающая круглая скобка. Если к заголовку присоединён «опциональный» элемент «список формальных параметров, то транслируется и он, в любом случае в конце идёт закрывающая скобка. Затем алгоритм трансляции отличается в зависимости от такого, какой тип «свободного» элемента использовал пользователь. Для трансляции каждого из них существует своя процедура, результаты выполнения этой процедуры заключаются в фигурные скобки.

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

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

При трансляции следует учитывать необходимо ли для текущей ветки использовать метку и если существует обращение к «ветке» с нарушением последовательности, то для ветки используется метка. В свою очередь «ветка» сама может ссылаться на другую «ветку» с помощью иконы «адрес» если ссылка происходит с нарушением порядка, то используется оператор “goto”.

К каждому зависимому элементу можно присоединить «опциональный» элемент – «синхронизатор», именно трансляция синхронизатора является общей для всех «зависимых» элементов. После, в зависимости от типа транслируемого элемента, вызываются процедуры трансляции для следующих типов: действие, ввод, вывод, вставка, полка, вопрос, метка, начало цикла ДЛЯ, конец цикла ДЛЯ, выбор, пауза, таймер.

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

Список литературы:

1. Описание визуального синтаксиса языка ДРАКОН [Электронный ресурс] // Сайт про язык ДРАКОН URL: http://drakon.su/jazyk/vizualnyj_sintaksis. (Дата обращения: 02.06.2013).

2. Гладкий А. В. Формальные грамматики и языки. — М.: Наука, 1973

3. Бьерн Страуструп. Язык программирования С++. – Издательства: Бином, Невский Диалект, 2008 г. – 1104 с.:ил. ISBN 5-7989-0226-2


ОПУБЛИКОВАНО

Григорьев М.В., Ткаченко И.Н. Трансляция ДРАКОН-схем в программный код С++. // Современные проблемы науки и образования - 2014.-№6. (приложение "Технические науки"). - C. 7

Григорьев Михаил Викторович — доцент кафедры информационных систем Института математики, естественных наук и информационных технологий Тюменского государственного университета, кандидат технических наук


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 07 Июль, 2014 18:12 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Владимир Паронджанов писал(а):
Прошу прокомментировать

Тема является повторением темы "Трансляция ДРАКОН-схем в программный код С++" на форуме "Инструменты ДРАКОН-схем" от Четверг, 13 Март, 2014 16:04 - http://forum.oberoncore.ru/viewtopic.php?p=86528#p86528 .

Там же смотрите обсуждение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Июль, 2014 08:38 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
Владимир Паронджанов писал(а):
При трансляции следует учитывать необходимо ли для текущей ветки использовать метку и если существует обращение к «ветке» с нарушением последовательности, то для ветки используется метка. В свою очередь «ветка» сама может ссылаться на другую «ветку» с помощью иконы «адрес» если ссылка происходит с нарушением порядка, то используется оператор “goto”.

1) Уж скоро 50 лет будет статье: Go To Statement Considered Harmful (1968), а мы до сих пор о каких-то goto рассуждаем.
2) Любую неструктурную схему можно представить в виде структурной схемы. Думаю, с этим никто спорить не будет (если кто-то хочет с этим поспорить то надо сначала почитать про теорему Бёма — Якопини). И было бы хорошо, если бы транслятор приводил неструктурную схему на языке Дракон в структурную схему на С++ (или любом другом языке).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Июль, 2014 10:18 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Rifat писал(а):
Уж скоро 50 лет будет статье: Go To Statement Considered Harmful (1968), а мы до сих пор о каких-то goto рассуждаем.

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

Однако в данном случае хочу Вам возразить.

1. Статья Эдсгера Дейкстры Go To Statement Considered Harmful (1968) сыграла важную роль в эпоху ТЕКСТОВОГО программирования, когда никто или почти никто еще не знал о компьютерной графике и ВИЗУАЛЬНОМ программировании. В ту эпоху призыв Дейкстры удалить оператор goto из ИСХОДНОГО (но не из исполняемого) кода программ сыграл важную роль.

2. В эпоху текстового программирования идеи (текстового) структурного программирования были НАИЛУЧШИМ решением.

3. Однако времена меняются. Появилась компьютерная графика и визуальное программирование. Это была революция, значение которой многие (но, к счастью, отнюдь не все) уважаемые специалисты по текстовому программированию не поняли. Скажу больше. Эти уважаемые специалисты до сих пор полагают, что эпоха ТЕКСТОВОГО программирования будет всегда и никогда не закончится.

4. Язык ДРАКОН — язык визуального (а не текстового) программирования. Исходный код дракон-программы — это чертеж, а не текст. На этом чертеже (то есть на дракон-схеме) ОТСУТСТВУЕТ оператор goto. Таким образом, чертеж дракон-схемы полностью соответствует правилу Эдсгера Дейкстры, изложенному в цитируемой Вами, уважаемый Rifat, статье «Go To Statement Considered Harmful» («Оператор goto считается вредным»).

5. Повторяю. В языке ДРАКОН нет и никогда не было оператора goto. Это значит, что в ИСХОДНОМ коде дракон-программы нет оператора goto.

6. О чем же тогда заботится уважаемый Rifat? Он заботится не об ИСХОДНОМ коде. А о чем?

7. Уважаемый Rifat хочет, чтобы оператор goto отсутствовал в программе на языке Си. Но зачем? Ведь человек не пишет на языке Си. Человек пишет на ДРАКОНе (на гибридном языке Дракон-Си).

8. Код на Си формируется автоматически в результате трансляции (в результате работы маршрутного транслятора).

9. Поясняю. Исходный код дракон-программы подается на вход маршрутного транслятора. Маршрутный транслятор преобразует исходный код дракон-программы (программы на гибридном языке Дракон-Си) в исходный код на языке Си. В данном случае исходный код на Си — это уже не подлинный исходный код, а аналог исполняемого кода или кода на ассемблере. В автоматически получаемом исходном коде на языке Си оператор goto вполне допустим, точно так же, как на ассемблере.

10. Человек не должен смотреть на исходный код на языке Си. К этому коду нельзя прикасаться. Все исправления и изменения следует вносить в исходный код дракон-программы, то есть в дракон-схему.

Вот что пишет Петр Приклонский:
Цитата:
Я уже больше года работаю на связке и.с. DRAKON - DrakonToC - Keil. И ни в коем образе не позволяю себе править промежуточные текстовые Си-файлы. Исходник - это Дракон-схема!
viewtopic.php?p=68616#p68616


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Июль, 2014 11:08 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
Представление алгоритма может быть различным: текстовым или нетекстовым. Алгоритм от этого не меняется.

Для начала нужно понять из каких представлений исходил Дейкстра при написании своей знаменитой статьи:
Цитата:
чтобы сократить концептуальную пропасть между статической программой и динамическим процессом, чтобы сделать соответствие между программой (разворачивающейся в пространстве текста) и процессом (разворачивающимся во времени) настолько очевидным, насколько это возможно.
(перевод статьи на сайте www.vspu.ac.ru/~chul/dijkstra/goto/goto.htm)

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

Если схема неструктурная: содержит гибридные циклы, выходы из середины циклов, входы в середину цикла, то необходимо проанализировать большое количество разных путей на Дракон-схеме и есть вероятность что-либо пропустить. Если же схема структурная: содержит только циклы с предусловием и постусловием, цикл с шагом, то проанализировать такую схему гораздо легче, так как количество возможных путей меньше.

Почему это меня заботит? Так как, насколько я понял, вы утверждаете, что Дракон-схемы - это эргономичное представление алгоритмов.
Определение эргономики, принятое в 2010 году Международной Ассоциацией Эргономики, звучит так: «Научная дисциплина, изучающая взаимодействие человека и других элементов системы, а также сфера деятельности по применению теории, принципов, данных и методов этой науки для обеспечения благополучия человека и оптимизации общей производительности системы».

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Июль, 2014 11:16 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Уважаемый Rifat, поскольку эта тема некогда подробно обсуждалась, то позволю себе дать ссылку вот сюда:
viewtopic.php?f=62&t=2921&p=52716&hilit=+drakon#p52716

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Июль, 2014 11:51 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
Нарисовал один и тот же алгоритм в неструктурном виде (GCD1.png) и в структурном виде (GCD2.png). Лично для меня понятнее структурная схема (GCD2.png), которая идет первой в данном посте.


Вложения:
GCD2.png
GCD2.png [ 32.78 КБ | Просмотров: 10927 ]
GCD1.png
GCD1.png [ 25.42 КБ | Просмотров: 10927 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Июль, 2014 13:37 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Уважаемый Rifat,
обращаю внимание на различные условия завершения алгоритма, для 1-й схемы при S=L, для 2-й схемы при S<>L.

Рекомендации:
1. Пользоваться последним выпуском ИС Дракон.
2. Алгоритм должен иметь название.
3. Для обсуждения нужны номера икон.
4. На схеме, при выводе в файл, не должны присутствовать точки ввода.

5. Goto допускается обосновано использовать.
Goto и его заменители позволяют упростить логику программы, сократить программу и облегчить понимание.


Последний раз редактировалось ==== Вторник, 08 Июль, 2014 13:44, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Июль, 2014 13:43 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
Да, согласен, что да и нет перепутаны в сравнении S = L на рисунке GCD1.png.

P.S. Все люди допускают ошибки :)
Не Rifal, а Rifat.


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

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Владимир Паронджанов писал(а):
Уважаемые коллеги!

Перед Вами статья преподавателей Тюменского государственного университета Григорьева М.В. и Ткаченко И.Н.

Прошу прокомментировать

http://online.rae.ru/1761
http://online.rae.ru/pdf/1761
Цитата:
Трансляция ДРАКОН-схем в программный код С++


Григорьев М.В., Ткаченко И.Н.

Тюменский государственный университет

m_grigoriev@mail.ru
Цитата:
Схему не всегда можно транслировать на язык высокого уровня, т.к. возможны случаи, когда формальная грамматика нотации более свободна, нежели формальная грамматика языка программирования. Поэтому полное транслирование схемы, верной с точки зрения нотации, возможно только на низкоуровневый язык.
Цитата:
При трансляции следует учитывать необходимо ли для текущей ветки использовать метку и если существует обращение к «ветке» с нарушением последовательности, то для ветки используется метка. В свою очередь «ветка» сама может ссылаться на другую «ветку» с помощью иконы «адрес» если ссылка происходит с нарушением порядка, то используется оператор “goto”.

1.
Является ли язык ДРАКОН языком более высокого уровня, чем С++?
(У меня ответа нет : )

2.
При трансляции из ДРАКОН-схемы в текст С++ вполне возможно обойтись без пресловутого GOTO.

Разбор схемы производится рекурсивно, как на рисунке ниже.
Вложение:
b1a.png
b1a.png [ 52.84 КБ | Просмотров: 10560 ]



Схема разбивается на куски домены, которые выполняются в зависимости от того были ли выполнены маршруты, предшествующие маршруту конкретного домена.

Текст на ЯП типа С++ получается примерно как рисунке ниже.
Вложение:
b1.png
b1.png [ 68.45 КБ | Просмотров: 10560 ]



Для силуэта используется оператор switch.
Вложение:
b1b.png
b1b.png [ 76.14 КБ | Просмотров: 10560 ]


3.
Буду рад примеру схемы, которую нельзя транслировать в С++ без GOTO.


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

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


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

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


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

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