DRAKON.SU

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

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




Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 10 Апрель, 2012 06:30 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 239
Откуда: Россия, Стерлитамак
Можно поподробнее, что непроизводительного в цикле:
Код:
Пока Не ИмяВетки = "Выход" Цикл
   Если ИмяВетки = ...

   КонецЕсли;
КонецЦикла


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 10 Апрель, 2012 10:35 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Геннадий Тышов писал(а):
Само использование алгоритмов передачи управления от программного кода иконы к следующей не позволяет использовать все синтаксические структуры языка программирования, в частности цикла FOR.

Дело в том, что хитроумный алгоритм работает на этапе генерации кода, а не во время выполнения.

Вот что выдаёт генератор для приведённой ниже ДРАКОН-схемы:
Код:
def fibonacci(n):
    if n == 0:
        result = [0]
    else:
        if n == 1:
            result = [0, 1]
        else:
            result = [0, 1]
            i = 2
            while True:
                if i <= n:
                    f2 = result[i - 2]
                    f1 = result[i - 1]
                    fib = f1 + f2
                    result.append(fib)
                    i += 1
                    continue
                else:
                    break
    return result

Здесь нет никаких дополнительных затрат на переход между иконами.
Все желающие могут взять данный алгоритм генерации кода (или лежащие в его основе идеи) из исходников DRAKON Editor.


Вложения:
fibonacci.png
fibonacci.png [ 16.78 КБ | Просмотров: 17557 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 10 Апрель, 2012 10:40 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Степан Митькин писал(а):
Геннадий Тышов писал(а):
Само использование алгоритмов передачи управления от программного кода иконы к следующей не позволяет использовать все синтаксические структуры языка программирования, в частности цикла FOR.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 10 Апрель, 2012 16:00 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 341
Степан Митькин писал(а):
хитроумный алгоритм работает на этапе генерации кода, а не во время выполнения...
Все желающие могут взять данный алгоритм генерации кода (или лежащие в его основе идеи) из исходников DRAKON Editor.

Спасибо!

Степан, честно говоря, просто лень лезть и разбираться с исходниками.

Можно здесь алгоритм описать? В двух словах? :wink:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Апрель, 2012 08:07 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Кстати, было бы неплохо, чтобы исходники самодокументировались в том же редакторе... как начал Дмитрий_ВБ: viewtopic.php?p=71627#p71627.

Да, там, видимо, идёт сначала проверка наложения вершин на линии (чтобы сформировать граф из отдельно размещённого на диосцене... или это делается сразу при размещении...)? И так решается вопрос с "джамповыми" лианами?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Апрель, 2012 11:22 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
TAU писал(а):
Можно здесь алгоритм описать? В двух словах? :wink:

DRAKON Editor (начиная с версии 1.9) генерирует исходный код из ДРАКОН-схем следующим образом:

Создание графа алгоритма
Из графических элементов схемы выделяется абстрактный граф алгоритма.
Последовательные иконы "действие" объединяются в одну.
Веточные циклы превращаются в обычные циклы со стрелкой вверх.
Циклы "для" разворачиваются в обычные циклы со стрелкой вверх.
Переключатели преобразуются в развилки.
Производится поиск паттернов логического программирования "И" и "ИЛИ" и их упрощение.
Код:
|
A----
|    |
B----|
|    |
C    D
|    |
|----
|
становится
|
A and B--
|       |
C       D
|       |
|--------
|

На данном этапе в графе есть только два типа узлов: действие и развилка.


Подготовка графа
Граф сканируется на наличие циклов. Рёбра, ведущие вверх ("стрелки"), получают особую метку.
Вставляются "технические" узлы: начало и конец алгоритма, начала циклов.
Граф "нормализуется":
происходит проход по графу при котором игнорируются "стрелки вверх"
ветвление приводится к стандартному процедурному виду if-else
если надо, иконы копируются
Код:
   
|
A----
|    |
|    C
B----|
|    |
D    E
|----|
|
становится
|
A-----
|     |
|     C
B--|  |
|  |  |
D  E  E
|  |  |
|------
|



Поиск
Если б не было циклов, поиск был бы не нужен. Но циклы есть.
Общая задача поиска: привести циклы к следующему виду:
Код:
while true:
   do something
   if must exit:
      break
   if must continue
      continue      

Результатом процедуры поиска является иерархическая структура (дерево) алгоритма, в которой
есть две основные конструкции структурного программирования: if-else и while.
Места, куда надо вставить while true известны - это иконы, на которые указывают стрелки вверх.
Места, куда надо вставить continue, тоже найти просто: это иконы, из которых исходит стрелка вверх.
Таким образом, конкретной задачей поиска является нахождение мест, куда надо ставить break.

Пространство поиска: множество всех возможных деревьев алгоритмов.
Начало поиска: пустое дерево.
В процессе поиска в дерево добавляются узлы из графа алгоритма.
Поиск завершён, когда все узлы из графа были добавлены в дерево.
Поиск завершён успешно, когда в построенном дереве нет незаконченных елементов if и while.
Принципиальный вопрос при добавлении узла из графа в дерево: "а можно ли сюда сунуть break?".
Ветвление поиска (т.е. поиск следующих возможных состояний из текущего) происходит за счёт
выбора очерёдности добавления узлов, а также добавления или не добавления break.

Поиск в глубину зарекомендовал себя хорошо, A* - плохо.

Не все схемы можно преобразовать к структурному виду. Например, преобразованию не поддаются следующие:
- Выход из вложенного цикла ДЛЯ.
- Циклы, в которые есть более двух входов (таковые, кстати, запрещены правилами ДРАКОНА).
- Циклы, в которых есть возврат не к началу, а в середину цикла.

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

Если поиск не удался, генерируем код обычным образом (вечный цикл и перебор икон).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Апрель, 2012 12:37 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Степан Митькин писал(а):
...
Подготовка графа
Граф сканируется на наличие циклов. Рёбра, ведущие вверх ("стрелки"), получают особую метку.
Вставляются "технические" узлы: начало и конец алгоритма, начала циклов.
Граф "нормализуется":
происходит проход по графу при котором игнорируются "стрелки вверх"
ветвление приводится к стандартному процедурному виду if-else
если надо, иконы копируются
В общем, "разъединение"...

Степан Митькин писал(а):
...
Поиск
Если б не было циклов, поиск был бы не нужен. Но циклы есть.
Общая задача поиска: привести циклы к следующему виду:
Код:
while true:
   do something
   if must exit:
      break
   if must continue
      continue      

Результатом процедуры поиска является иерархическая структура (дерево) алгоритма, в которой
есть две основные конструкции структурного программирования: if-else и while.
Места, куда надо вставить while true известны - это иконы, на которые указывают стрелки вверх.
Места, куда надо вставить continue, тоже найти просто: это иконы, из которых исходит стрелка вверх.
Таким образом, конкретной задачей поиска является нахождение мест, куда надо ставить break.

Пространство поиска: множество всех возможных деревьев алгоритмов.
Начало поиска: пустое дерево.
В процессе поиска в дерево добавляются узлы из графа алгоритма.
Поиск завершён, когда все узлы из графа были добавлены в дерево.
Поиск завершён успешно, когда в построенном дереве нет незаконченных елементов if и while.
Принципиальный вопрос при добавлении узла из графа в дерево: "а можно ли сюда сунуть break?".
Ветвление поиска (т.е. поиск следующих возможных состояний из текущего) происходит за счёт
выбора очерёдности добавления узлов, а также добавления или не добавления break.
...
В общем, строится "дерево использования" (развёртка "по Ермакову") - как описано в этом пункте?..
А континуй просто играет роль команды БП по петле цикла (в представлении отсюда)?..
А брейк зачем вставлять? И как в языках без "заменителей"?..


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 13 Апрель, 2012 10:07 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 341
Степан Митькин писал(а):
DRAKON Editor (начиная с версии 1.9) генерирует исходный код из ДРАКОН-схем следующим образом:...

Степан! Человеческое спасибо!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 13 Апрель, 2012 18:08 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Да... за графитизацию функциональности в частности... :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 14 Апрель, 2012 10:25 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Кстати, в DRAKON Editor Оберон-07 поддерживается?.. В видах, в частности, сказанного в этой ветке. И для программирования встроенки вообще предполагается редактор развивать?


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

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Владислав Жаринов писал(а):
Кстати, в DRAKON Editor Оберон-07 поддерживается?.. В видах, в частности, сказанного в этой ветке. И для программирования встроенки вообще предполагается редактор развивать?

Оберон не поддерживается. Это, конечно, стыдно: мы всё-таки на oberoncore.ru живём. Что такое "встроенка", я не понял...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Апрель, 2012 09:39 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Машины, встраиваемые в разные объекты для управления ими. Т.е. и обычные микроконтроллеры, и сложные комплексы.

P.S. Скажем, "Бисер" - это встроенка в "Буран" (показано здесь: http://www.buran.ru/htm/su.htm)... :)


Последний раз редактировалось Владислав Жаринов Четверг, 19 Апрель, 2012 11:45, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Апрель, 2012 10:05 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Я так думаю, оберонщики не обидятся за отсутствие поддержки языка... :) Тут важно другое - чтобы не было противопоставления техноязыка каким-то парадигмам "КАК-программирования"... которое, кстати, свойствами языка и "исчисления икон" отнюдь не обусловлено: viewtopic.php?p=71988#p71988 ...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 19 Апрель, 2012 11:46 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Кстати, есть ощущение, что пошёл оффтопик... м.б. пора ветку выделять... :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 01 Май, 2012 10:00 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Выпуск ИС Дракон от 01.05.2012 выложен здесь
Заменен на выпуск от 03.06.2012, выложен там же.

Выпуск к празднику Весны и Труда, поздравляю с праздником.


Последний раз редактировалось ==== Воскресенье, 03 Июнь, 2012 19:53, всего редактировалось 1 раз.

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

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Выпуск ИС Дракон от 03.06.2012 выложен здесь
Заменен на выпуск от 22.07.2012, выложен там же.

Выпуск для каникулярных занятий.


Последний раз редактировалось ==== Воскресенье, 22 Июль, 2012 21:41, всего редактировалось 1 раз.

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

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
В описании к выпуску от 03.06.2012 дополнен пункт 4.


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

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Выпуск ИС Дракон от 22.07.2012 выложен здесь

Выпуск предлагается использовать в новом учебном году 2012-2013.


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

Зарегистрирован: Среда, 07 Декабрь, 2011 18:33
Сообщения: 37
при тестировании версии от 22.07.12 , при генерации кода для 1С
выдает :

...... в описании языка нет строки "Comment=..."

Хотя файл Prg_1C.ini такой же как и для Dragon_2012_06_03
И там все работает .
И строка
Comment=// <Comment/>
присутствует.


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

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Уважаемый serj_lb, будем разбираться.

1. Проверил у себя и проблемы нет, работает должным образом.

2. Сделаем предположение о том, что у Вас происходить.
Здесь сказано
Цитата:
Выпуск ИС Дракон от 03.06.2012
...
2. Теперь в иконе "Модуль" имена файлов должны начинаться с символа "\" или "$".
Файл программного кода генерируется в папке программы Dragon.exe.
Файл описания языка программирования с расширением ".ini" помещать там же, в икону "Модуль" имя вставляем из системного буфера после просмотра в пункте "Программирование / Файл описания языка".

В иконе "Модуль" примерно должно быть так -
Вложение:
Новый_01.png
Желаю успехов.


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

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


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

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


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

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