DRAKON.SU https://forum.drakon.su/ |
|
В очередной раз о связи ДРАКОНа с ЯВУ https://forum.drakon.su/viewtopic.php?f=62&t=5480 |
Страница 1 из 1 |
Автор: | Ильченко Эдуард [ Понедельник, 31 Август, 2015 16:10 ] |
Заголовок сообщения: | В очередной раз о связи ДРАКОНа с ЯВУ |
Связь мне видится таким образом: 1. Текст на ЯВУ процедуры/функции копируем в редактор ДРАКОНа и преобразуем в графическую схему. Схема, скорее всего, получается мало привлекательная. 2. Приводим схему к красивому структурному ДРАКОНовскому виду, не нарушая логические связи заданные в тексте на ЯВУ. 3. Схему транслируем на ЯВУ, включая ОСОБЫЕ ДАННЫЕ и отдаём транслятору. Текст кардинально отличается от начального, но логика программы не нарушена. 4. При необходимости коррекции процедуры/функции копируем текст с ОСОБЫМИ ДАННЫМИ в редактор и преобразуем в графическую абсолютно идентичную пункту 2 схему. Т.е. многократные преобразования схема <-> текст не изменяют ни схемы, ни текста. 5. Корректируем схему и гоуту на пункт 3. Очевидно : ), что ОСОБЫЕ ДАННЫЕ безболезненно можно спрятать только в комментариях. Откуда вывод: необходим язык разметки комментариев для хранения структуры схемы. Такой язык мог бы стать, в том числе, языком межредакторного обмена. Хорошо бы над ним подумать сообща. А может что-то подобное уже есть? P.S. Ежели кто высказывался раньше на подобные темы, то первородство за ним : ) P.P.S. А, да. После пункта 2 в текст на ЯВУ не лезем и структуры в нём не ищем : ) |
Автор: | Рэйлвэй Каген [ Понедельник, 31 Август, 2015 20:35 ] |
Заголовок сообщения: | Re: В очередной раз о связи ДРАКОНа с ЯВУ |
Поскольку языков высокого уровня много, то народ думал в направлении абстрактного императивного языка и соответствующих backend'ов: http://wiki.botik.ru/Refaldevel/AbstractImperativeLanguage http://wiki.botik.ru/Refaldevel/WebHome |
Автор: | Ильченко Эдуард [ Понедельник, 31 Август, 2015 21:26 ] |
Заголовок сообщения: | Re: В очередной раз о связи ДРАКОНа с ЯВУ |
Рэйлвэй Каген писал(а): народ думал в направлении абстрактного императивного языка и соответствующих backend'ов Это не то.Нужно в существующий язык втиснуть структуру дракон-схемы, так чтобы из текста программы можно было восстановить эту схему, а из схемы текст программы. |
Автор: | Рэйлвэй Каген [ Понедельник, 31 Август, 2015 22:16 ] |
Заголовок сообщения: | Re: В очередной раз о связи ДРАКОНа с ЯВУ |
можно попробовать привести программу и схему к одинаковому формату, напр. к s-выражению. (ничего не знаю про внутренний формат Фабулы, поэтому буду чирикать со своей колокольни ![]() пусть "особыми данными" будут:
если мы преобразуем текст императивной программы в функциональный аналог и запишем его в виде s-выражения, то на полученную запись можно будет наложить структуру дракон-схемы в ПРОТОН-формате(viewtopic.php?p=31929#p31929 viewtopic.php?p=73578#p73578). Т.е. вопрос генерации схемы из текста решается не очень сложно. Сохранить исходник программы на ЯВУ с комментариями в виде тегов s-выражения - ещё проще. p.s.: как делать функциональный аналог из схем было здесь и здесь Вероятно, коллеги подскажут, как быстро получить функциональный эквивалент из исходника императивной программы. |
Автор: | Ильченко Эдуард [ Вторник, 08 Сентябрь, 2015 23:58 ] |
Заголовок сообщения: | Re: В очередной раз о связи ДРАКОНа с ЯВУ |
Допустим есть схема: Вложение: c++.png [ 20.08 КБ | Просмотров: 12459 ] Эта схема генерирует текст на С++: Код: QString ClassA::function1(QString _s) { QString s = "abcd" + _s; return s; } Само описание схемы в формате fbpro: Код: <?xml version="1.0" encoding="UTF-8"?> <fbstruct version_format="0.1" struct="schema" kind="sbs" start="obj{405f8b34-ec17-4d5a-90df-696219e34477}" start_pos="-157.248 -47.9311" sqty_objv="3"> <item name="vline"> <un v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/> <vl_first v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/> </item> <item name="begin"> <un v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/> <kind_object v="vertical"/> <bound v="-50 0 100 56"/> <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">function1</p></body></html>]]></text_icon> <text_icon_up><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ClassA</p></body></html>]]></text_icon_up> <vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/> <below v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/> <left v="obj{94d9212a-174e-434f-baff-14d80e191fe7}"/> <right v="obj{5f3201e7-688a-4d91-93cb-667fabff7f5c}"/> <text_tl><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">C++</p></body></html>]]></text_tl> </item> <item name="impact"> <un v="obj{94d9212a-174e-434f-baff-14d80e191fe7}"/> <kind_object v="left"/> <bound v="0 0 60 28"/> <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString</p></body></html>]]></text_icon> <right_obj v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/> </item> <item name="param"> <un v="obj{5f3201e7-688a-4d91-93cb-667fabff7f5c}"/> <kind_object v="right"/> <bound v="0 0 80 28"/> <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString _s</p></body></html>]]></text_icon> <left_obj v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/> </item> <item name="action"> <un v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/> <kind_object v="vertical"/> <bound v="-78.3182 0 156.636 28"/> <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString s = "abcd" + _s;</p></body></html>]]></text_icon> <vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/> <above v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/> <below v="obj{166280cd-de4a-49b3-967d-3f88b2787b4e}"/> </item> <item name="end"> <un v="obj{166280cd-de4a-49b3-967d-3f88b2787b4e}"/> <kind_object v="vertical"/> <bound v="-40 0 80 28"/> <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">return s</p></body></html>]]></text_icon> <vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/> <above v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/> <hidden v="no"/> </item> </fbstruct> Если утеряется дракон-схема, то восстановить её автоматически будет затруднительно, а её оформление - невозможно. Решить эту проблему можно следующим образом: в конце текста на ЯП вставить закоментированное (в стиле используемого ЯП) описание самой схемы. Тогда, для её восстановления, достаточно передать описание схемы в дракон-редактор и можно редактировать её содержание. Код: //.fabula QString ClassA::function1(QString _s) { QString s = "abcd" + _s; return s; } //.fabula //<?xml version="1.0" encoding="UTF-8"?> //<fbstruct version_format="0.1" struct="schema" kind="sbs" start="obj{405f8b34-ec17-4d5a-90df-696219e34477}" start_pos="-157.248 -47.9311" sqty_objv="3"> // <item name="vline"> // <un v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/> // <vl_first v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/> // </item> // <item name="begin"> // <un v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/> // <kind_object v="vertical"/> // <bound v="-50 0 100 56"/> // <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> //<html><head><meta name="qrichtext" content="1" /><style type="text/css"> //p, li { white-space: pre-wrap; } //</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> //<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">function1</p></body></html>]]></text_icon> // <text_icon_up><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> //<html><head><meta name="qrichtext" content="1" /><style type="text/css"> //p, li { white-space: pre-wrap; } //</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> //<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ClassA</p></body></html>]]></text_icon_up> // <vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/> // <below v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/> // <left v="obj{94d9212a-174e-434f-baff-14d80e191fe7}"/> // <right v="obj{5f3201e7-688a-4d91-93cb-667fabff7f5c}"/> // <text_tl><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> //<html><head><meta name="qrichtext" content="1" /><style type="text/css"> //p, li { white-space: pre-wrap; } //</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> //<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">C++</p></body></html>]]></text_tl> // </item> // <item name="impact"> // <un v="obj{94d9212a-174e-434f-baff-14d80e191fe7}"/> // <kind_object v="left"/> // <bound v="0 0 60 28"/> // <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> //<html><head><meta name="qrichtext" content="1" /><style type="text/css"> //p, li { white-space: pre-wrap; } //</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> //<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString</p></body></html>]]></text_icon> // <right_obj v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/> // </item> // <item name="param"> // <un v="obj{5f3201e7-688a-4d91-93cb-667fabff7f5c}"/> // <kind_object v="right"/> // <bound v="0 0 80 28"/> // <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> //<html><head><meta name="qrichtext" content="1" /><style type="text/css"> //p, li { white-space: pre-wrap; } //</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> //<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString _s</p></body></html>]]></text_icon> // <left_obj v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/> // </item> // <item name="action"> // <un v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/> // <kind_object v="vertical"/> // <bound v="-78.3182 0 156.636 28"/> // <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> //<html><head><meta name="qrichtext" content="1" /><style type="text/css"> //p, li { white-space: pre-wrap; } //</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> //<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString s = "abcd" + _s;</p></body></html>]]></text_icon> // <vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/> // <above v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/> // <below v="obj{166280cd-de4a-49b3-967d-3f88b2787b4e}"/> // </item> // <item name="end"> // <un v="obj{166280cd-de4a-49b3-967d-3f88b2787b4e}"/> // <kind_object v="vertical"/> // <bound v="-40 0 80 28"/> // <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> //<html><head><meta name="qrichtext" content="1" /><style type="text/css"> //p, li { white-space: pre-wrap; } //</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> //<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">return s</p></body></html>]]></text_icon> // <vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/> // <above v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/> // <hidden v="no"/> // </item> //</fbstruct> Из плюсов: - простота реализации практически для любого ЯП и текстовых форматов описания дракон-схем. Например, для ИС Дракон подобная реализация элементарна; - использование для декодирования описания схемы уже существующих функций; Из минусов: - сильно увеличивается объём текста на ЯП; - нельзя редактировать текст программы в родном редакторе ЯП; Что плохого и что хорошего ещё может быть в такой реализации? P.S. Ежели кто подобное предлагал раньше, на первенство не претендую : ) |
Автор: | adva [ Среда, 09 Сентябрь, 2015 07:43 ] |
Заголовок сообщения: | Re: В очередной раз о связи ДРАКОНа с ЯВУ |
Ильченко Эдуард писал(а): - нельзя редактировать текст программы в родном редакторе ЯП; Что плохого и что хорошего ещё может быть в такой реализации? Лично для меня, такой минус был бы очень существенным. Лучше в комментах кода разметку делать дополнительно (скажем вносить "в скобки" текст икон), а данные скобки распознавать с учетом схемы в конце. По сути текст из схемы заменяем на ссылки на текст. Хотя между разными скобками в данном случае опять нельзя будет редактировать, но это уже не так критично будет. К тому же в конце работы, для "облагораживания" текста можно будет заменить ссылки в тексте на позиции начала и конца текста икон. |
Автор: | adva [ Среда, 09 Сентябрь, 2015 07:53 ] |
Заголовок сообщения: | Re: В очередной раз о связи ДРАКОНа с ЯВУ |
И еще, желательно все же убрать лишнюю инфу из описания схемы в конце по максимуму. Может задавать только маршрут, а строить схему автоматом (без позиций, и наверное даже без атрибутов текста, хотя про атрибуты пожалуй уже спорно, или опционально сделать). |
Автор: | Ильченко Эдуард [ Среда, 09 Сентябрь, 2015 18:37 ] |
Заголовок сообщения: | Re: В очередной раз о связи ДРАКОНа с ЯВУ |
adva писал(а): Может задавать только маршрут, а строить схему автоматом (без позиций, и наверное даже без атрибутов текста, хотя про атрибуты пожалуй уже спорно, или опционально сделать). Хотелось бы схему восстанавливать в первозданном виде ... |
Автор: | Владимир Паронджанов [ Пятница, 22 Апрель, 2016 18:58 ] |
Заголовок сообщения: | Re: В очередной раз о связи ДРАКОНа с ЯВУ |
Эдуард, создается впечатление, что начатая Вами тема не завершена. Жаль, потому что тема важная и интересная. Если можно, сделайте результирующие выводы. |
Автор: | Владимир Паронджанов [ Среда, 08 Июнь, 2016 18:12 ] |
Заголовок сообщения: | Re: В очередной раз о связи ДРАКОНа с ЯВУ |
Ильченко Эдуард писал(а): Если утеряется дракон-схема, то восстановить её автоматически будет затруднительно, а её оформление - невозможно. Артем Бразовский изобрел другой способ.Решить эту проблему можно следующим образом: в конце текста на ЯП вставить закоментированное (в стиле используемого ЯП) описание самой схемы. Тогда, для её восстановления, достаточно передать описание схемы в дракон-редактор и можно редактировать её содержание. P.S. Ежели кто подобное предлагал раньше, на первенство не претендую : ) viewtopic.php?p=97193#p97193 |
Автор: | Ильченко Эдуард [ Среда, 08 Июнь, 2016 21:29 ] |
Заголовок сообщения: | Re: В очередной раз о связи ДРАКОНа с ЯВУ |
Владимир Паронджанов писал(а): Артем Бразовский изобрел другой способ. viewtopic.php?p=97193#p97193 Описание способа, по указанной ссылке, я найти не смог : ( |
Автор: | Владимир Паронджанов [ Четверг, 09 Июнь, 2016 08:38 ] |
Заголовок сообщения: | Re: В очередной раз о связи ДРАКОНа с ЯВУ |
Ответить должен сам Артем. Но идея примерно такая. 1. Каждая икона дракон-схемы описывается пятимерным вектором (a b c d е). 2. Производится нумерация всех шампуров веток. Это а. 3. Для каждого шампура ветки нумеруются все подчиненные ему шампуры. Это b. 4. Для каждого шампура нумеруются все горизонтальные уровни (на которых находятся иконы). Это с. 5. Для каждого горизонтального уровня (для данного шампура) нумеруются все иконы слева направо. Это d. 6. В пятой позиции вектора е указывается код — уникальная форма (название) иконы. 7. При нумерации используются не только положительные, но и отрицательные числа. ==================== Что-то я малость перепутал, потому что у Артема, кажется, вектор четырехмерный. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |