DRAKON.SU

Текущее время: Четверг, 18 Апрель, 2024 20:14

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




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Текстовый синтаксис для Дракона
СообщениеДобавлено: Суббота, 28 Март, 2009 16:07 

Зарегистрирован: Среда, 18 Март, 2009 09:58
Сообщения: 9
Задумался над вопросом создания "альтернативной" IDE для дракона. На первый взгляд использование в качестве основы одной из RCP (н-р, netbeans или eclipse) должно позволить реализовать IDE достаточно быстро.

Неспеша размышляю над различными аспектами будущей системы :)

Вопрос номер один - формат хранения схем.

Самое простое решение использовать бинарный формат (вплоть до сериализации схемы :)), но оно мне не нравится, т.к.:
1) Схемы могут храниться в cvs. Было бы очень хорошо если бы стандартные diff/merge-инструменты выдавали осмысленную информацию. С бинарным форматом достичь такого не получится.
2) Хочется иметь возможность редактировать текстовое представление схемы "вручную", без использования IDE. Можно представить достаточно много ситуаций, когда "рефакторинг" схемы проще/быстрее осуществить над текстом, чем в "визуальном" режиме.
3) Спецификация бинарного формата обычно сложнее, чем текстового. Это осложняет реализацию и поиск "багов".

Есть какие-нибудь идеи на этот счёт? Может быть текстовое представление и не нужно?

Думал об xml-ном описание. С одной стороны упрощается разбор, с другой - страдает читаемость и модифицируемость "руками"...

-----

Забыл упомянуть один момент.
Текстовое представление может служить для представления:
а) программы на "псевдо" языке, где есть только управляющие конструкции.
Н-р:
Код:
(СИЛУЭТ
    (ЗАГОЛОВОК "Силуэт")
    (ВЕТКА "Поиск автобуса"
        (КОММЕНТАРИЙ "Найди остановку автобуса и займи очередь")
        (АДРЕС "Ожидание посадки"))
    (ВЕТКА "Ожидание посадки"
        (ВОПРОС "Автобус подошёл?"
            (ЕСЛИ_ДА (МЕТКА :M1)
                     (ВОПРОС "Твоя очередь подошла?"
                         (ЕСЛИ_ДА (ВОПРОС "Есть место?"
                                      (ЕСЛИ_ДА (АДРЕС "Посадка в автобус"))
                                      (ЕСЛИ_НЕТ )))
                         (ЕСЛИ_НЕТ (ПРОДОЛЖИТЬ :M1))))
            (ЕСЛИ_НЕТ ))
        (АДРЕС "Ожидание посадки"))
    (ВЕТКА "Посадка в автобус"
        (КОНЕЦ)))

б) описания графа (вариация на тему входного файла для graphviz'a).

(б) - проще реализовать, но вряд ли такое предсталение будет пригодно для ручной правки и diff/merge...


Последний раз редактировалось NotGonnaGetUs Воскресенье, 29 Март, 2009 10:02, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 28 Март, 2009 16:31 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
Для diff/merge обязательно надо текст. По формату - ini-файла достаточно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 28 Март, 2009 16:52 

Зарегистрирован: Среда, 18 Март, 2009 09:58
Сообщения: 9
А что такое формат "ini-файла"?
Можешь привести текст описывающий, какую-нибудь простую дракон-схему?


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Честно предупрежу о двух вещах:

1) Нормальный редактор будет сделан. Загадывать сроки не буду, но вопрос там чисто в рутинной реализации (на подходящей мат. модели никаких концепт. проблем нет), которая уже ведётся у нас.
2) Соваться с кавалерийским наскоком не советую, разве что заняться нечем :) Там без подходящей модели делать нечего. На программёрском уровне не выйдет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 29 Март, 2009 09:33 

Зарегистрирован: Среда, 18 Март, 2009 09:58
Сообщения: 9
Илья Ермаков писал(а):
1) Нормальный редактор будет сделан. Загадывать сроки не буду, ... которая уже ведётся у нас.


"У нас" - это где? Речь о редакторе Тышова или есть ещё какой-то проект (доселе скрытый от общественности)?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 29 Март, 2009 20:32 

Зарегистрирован: Вторник, 17 Июнь, 2008 12:13
Сообщения: 3
И еще вопрос вдогонку. Где-нибудь можно найти простой редактор блок-схем на ББ(и чтоб посмотреть, как-таки оно в ББ можно...)?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 29 Март, 2009 23:21 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
NotGonnaGetUs писал(а):
"У нас" - это где? Речь о редакторе Тышова или есть ещё какой-то проект (доселе скрытый от общественности)?

Извиняюсь, если неясно выразился. Когда я говорю о каких-либо разработках, то речь об организации которую представляю - ООО "Метасистемы", http://metasystems.ru.
OberonCore является интернет-ресурсом, а не коллективом. Поэтому говорить про тех многих людей, которые здесь представляют свои проекты, "у нас" мы не можем.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 29 Март, 2009 23:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
stern писал(а):
(и чтоб посмотреть, как-таки оно в ББ можно...)?

Что именно "можно"? Схемки рисовать?

Вообще, посмотрите что-то в zinnamturm.eu.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Март, 2009 10:45 

Зарегистрирован: Среда, 18 Март, 2009 09:58
Сообщения: 9
Илья Ермаков писал(а):
Извиняюсь, если неясно выразился. Когда я говорю о каких-либо разработках, то речь об организации которую представляю - ООО "Метасистемы", http://metasystems.ru.

Не нашёл упоминаний о драконе на вышеозначенном сайте...

Какая-нибудь информация в открытом доступе о текущих достижениях и/или планах вокруг дракона имеется (может быть хотя бы пара скриншотов)?

Я почему спрашиваю-то. Упоминание о "мат.моделях", как о чём-то неимоверно сложном (в контексте редактора для дракона), выглядит для меня очень странным.
Единственное место для математики находится в области реализации автоматического лейаута и валидации дракон-схем. Есть над чем подумать, но ничего сверхъестественного. Отсюда возникает мысль, что либо "у вас" есть желание навесить на дракон редактор некую дополнительную функциональность, требующую нехилой математики, либо "вы" делаете простые вещи сложными из любви к науке, либо я очень недооцениваю сложности с валидацией и лейутом (тут, в любом случае, потребуется потратить время на прототипирование).

На мой взгляд, львиную доля труда, который придётся потратить на дракон ide, съест разработка эргономичного UI и связанной с ним инфраструктуры. Поднять это дело с "нуля" - я бы не взялся (особенно учитывая, что времени свободного очень-очень мало). Однако, беглый осмотр возможностей существующих RCP вселяет оптимизм.

Развенчаете что-нибудь из моих заблуждений?


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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 19 Июнь, 2009 09:33 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
NotGonnaGetUs писал(а):
Вопрос номер один - формат хранения схем.
..
а) программы на "псевдо" языке, где есть только управляющие конструкции.
Запись маршрутов на уровне примитива и ветки силуэта нужно сделать структурной. Без меток.
Правила Дракона гарантируют, что маршруты переходов будут либо обособленными, либо вложенными.
Добавим правило для "псевдоязыка": маршруты от структурной конструкции(макроиконы), ведущие к точкам объединения с другими маршрутами, маркировать явной передачей управления.

Маркировка может производится с помощью следующего набора:
Вариант 1
    join - соединение(начало)
    inner join - внутренее соединение(продолжить - простое соединение с существующим маршрутом)
    return join - обратное соединение(петля цикла, оканчивающаяся стрелкой)
    end join - конец соединения

Вариант 2
    path - маршрут(начало)
    inner path - внутренний маршрут(продолжить)
    return path - обратный маршрут
    end path - конец маршрута
Вложение:
bus.png
bus.png [ 7.24 КБ | Просмотров: 14557 ]

Код:
(СИЛУЭТ
    (ЗАГОЛОВОК "Поездка на автобусе")
    (ВЕТКА "Поиск автобуса"
        (КОММЕНТАРИЙ "Найди остановку автобуса и займи очередь")
        (АДРЕС "Ожидание посадки"))
    (ВЕТКА "Ожидание посадки"
        (RETURN JOIN)
        (ВОПРОС "Автобус подошёл?"
            (ЕСЛИ_НЕТ (INNER JOIN))
            (ЕСЛИ_ДА (RETURN JOIN)
                     (ВОПРОС "Твоя очередь подошла?"
                         (ЕСЛИ_НЕТ (JOIN))
                         (ЕСЛИ_ДА (ВОПРОС "Есть место?"
                                      (ЕСЛИ_НЕТ (JOIN))
                                      (ЕСЛИ_ДА (АДРЕС "Посадка в автобус"))))))
    (ВЕТКА "Посадка в автобус"
        (КОНЕЦ)))

Возможны структурные конструкции(по ходу алгоритма) :
    JOIN
    ...
    INNER JOIN
    ...
    END JOIN

и

    RETURN JOIN
    ...
    INNER JOIN
    ...
    JOIN

Тогда для Дракон-схемы можно будет строить полноценное AST. В принципе, выражение RETURN JOIN - лишнее и добавлено в набор только для явного обозначения места соединения маршрута с петлёй цикла. Исключительно для облегчения понимания человеком. Если мы откажемся от чтения линейной текстовой записи Дракон-схем, то достаточно использовать END JOIN вместо RETURN JOIN.

p.s.:Не нравится в этих вариантах наличие "end" - чем бы заменить, чтобы не совпадало с иконой "Конец". Может быть JOINED?
p.s.2:Куча скобок не впечатляет, хотя разбирать-то их преимущественно компу :)
p.s.3:Английский - чтобы сразу в глаза бросалось, где переходы.


Последний раз редактировалось Рэйлвэй Каген Пятница, 19 Июнь, 2009 16:43, всего редактировалось 6 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 19 Июнь, 2009 15:14 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Добавлена дракон-схема, внесены изменения, чтобы показать запись вложенных маршрутов. Код можно ещё и так отформатировать:
Код:
(СИЛУЭТ
  (ЗАГОЛОВОК "Поездка на автобусе")
  (ВЕТКА "Поиск автобуса"
    (КОММЕНТАРИЙ "Найди остановку автобуса и займи очередь")
    (АДРЕС "Ожидание посадки"))
  (ВЕТКА "Ожидание посадки"                          (СОЕДИНЕНО)
    (ПЕРЕКЛЮЧАТЕЛЬ "Автобус подошёл?"
      (ВАРИАНТ "Нет"                                 (ПРИСОЕДИНЕНИЕ))
      (ВАРИАНТ "Да"                                      (СОЕДИНЕНО)
        (ПЕРЕКЛЮЧАТЕЛЬ "Твоя очередь подошла?"
          (ВАРИАНТ "Нет"                                 (СОЕДИНЕНИЕ))
          (ВАРИАНТ "Да"                             
            (ПЕРЕКЛЮЧАТЕЛЬ "Есть место?"
              (ВАРИАНТ "Нет"                         (СОЕДИНЕНИЕ))
              (ВАРИАНТ "Да" (АДРЕС "Посадка в автобус"))))))
  (ВЕТКА "Посадка в автобус"
    (КОНЕЦ)))


Последний раз редактировалось Рэйлвэй Каген Воскресенье, 21 Июнь, 2009 14:22, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 20 Июнь, 2009 15:05 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Немножко подрихтовал код в предыдущем сообщении. В основном, из сображений, что "Развилка" может быть однозначно представлена "Переключателем" с вариантами "Да" и "Нет"
Код:
"Развилка"
==
  (ПЕРЕКЛЮЧАТЕЛЬ "?"
      (ВАРИАНТ "Нет" (...))
      (ВАРИАНТ "Да"  (...)))
Циклы (обычный, переключающий, для, ждать) однозначно представимы на основе словарей, приведённых ниже. Т.е., рисуем привычными for, if и case, а храним и отдаём транслятору - только с переключателями.
Базовый словарь для линейной текстовой записи может выглядеть так:
Код:
ДЕЙСТВИЕ                    ACTION
ВСТАВКА                     INSERT
ПОЛКА                       SHELF
КОММЕНТАРИЙ                 COMMENT
КОММЕНТАРИЙ_ЛЕВЫЙ           COMMENT_LEFT
КОММЕНТАРИЙ_ПРАВЫЙ          COMMENT_RIGHT
СИЛУЭТ                      SILHOUETTE
ВЕТКА                       BRANCH
АДРЕС                       ADDRESS
ЗАГОЛОВОК                   HEADER
ПАРАМЕТР                    PARAMETER
ПЕРЕКЛЮЧАТЕЛЬ               SWITCH
ВАРИАНТ                     CASE
КОНЕЦ                       END
СОЕДИНЕНИЕ                  JOIN
ПРИСОЕДИНЕНИЕ               INNER JOIN
СОЕДИНЕНО                   JOINED


Остаются вопросы с расширенным набором икон, заточенных под предметную область:
а. таймер
б. параллельный процесс
в. период
г. ввод
д. вывод
...
Как вариант - могут создаваться в любом количестве в виде предметных словарей на базе "Вставки" и "Действия". В основном - для того, чтобы не очень криво идентифицировать графический образ иконы и иметь возможность "расширения" транслятора.
Код:
(ВСТАВКА [Таймер] "...")
(ВСТАВКА [Параллельный процесс] "...")
(ВСТАВКА [Период] "...")
(ДЕЙСТВИЕ [Ввод] "...")
(ДЕЙСТВИЕ [Вывод] "...")

Обсудим?


Последний раз редактировалось Рэйлвэй Каген Суббота, 04 Июль, 2009 08:41, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 23 Июнь, 2009 07:54 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
Поддерживаю использования лисповских S-выражений (sexp).
Я вот тоже тут подумываю в одном проекте хранить древовидные структуры данных в таком формате...


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

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


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

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


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

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