OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 24 Июнь, 2025 00:59

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Генератор исходных текстов.
СообщениеДобавлено: Вторник, 09 Март, 2010 09:51 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Есть у меня пара абстрактных классов, являющих сборник рутинных действий для CRUD-интерфейса (справочник + форма). Использование этих классов тоже рутина, поэтому генератор исходника сильно бы помог.

Вопрос как раз про генератор. Нужно как-то управлять процессом генерации.

Например, задаём генератору имя процедуры, принимающий параметр (если это метод), формальные параметры. Потом описываем внутреннюю логику процедуры, в которой участвуют принимающий и формальные параметры. И запускаем генератор, создающий готовый к компиляции исходный текст процедуры.

Чувствую, без подобия скриптового (макро-) языка не обойтись :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генератор исходных текстов.
СообщениеДобавлено: Вторник, 09 Март, 2010 10:28 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Мне кажется, нужно возродить старую добрую идею макрогенерации. Ведь на ЕС и СМ ось не устанавливалась, а генерировалась под конфигурацию компьютера. Пакет представлял собой последовательность макровызовов с соответствующими параметрами настройки.
Может быть, в данном случае аналогично сделать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генератор исходных текстов.
СообщениеДобавлено: Вторник, 09 Март, 2010 14:09 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Да, чтобы в итоге получить готовый к компиляции исходник, надо как-то управлять процессом генерации. Без макроязыка не обойтись.

P.S. А Рефал тут не поможет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генератор исходных текстов.
СообщениеДобавлено: Вторник, 09 Март, 2010 15:33 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Помочь - то поможет, но для "посвященного"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генератор исходных текстов.
СообщениеДобавлено: Вторник, 09 Март, 2010 15:42 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Тогда надо думать что-то проще...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генератор исходных текстов.
СообщениеДобавлено: Вторник, 09 Март, 2010 16:14 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Какими-нибудь табличками описывать подстановки...

Ещё Горбунова-Посадова посмотрите по генерациям, полезно, на мысли наводит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генератор исходных текстов.
СообщениеДобавлено: Вторник, 09 Март, 2010 18:19 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Я в прошлом году делал генератор исходника текста. Код, отвечающий за генерацию, выглядит примерно так:

Код:
      (* Browse. Создание и заполнение таблицы *)
      proc.Sign(f, 'Browse', '', export);
      proc.Begin;
         proc.WriteOp('NEW('+interactor+')');
         proc.WriteOp(interactor+'.NewTitle(1)');
         proc.WriteOp('UpdateView');
         proc.WriteComment('Форма открывается строго после создания таблицы!');
         proc.WriteOp('StdCmds.OpenAuxDialog("Gen\Rsrc\TableService", "TableService")');
      proc.End;


Плюс в том, что не требуется дополнительный язык. Минус - много букв :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генератор исходных текстов.
СообщениеДобавлено: Понедельник, 12 Апрель, 2010 22:17 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Для генерации кода можно использовать развитый подход на кафедре технологии программирования в ЛИТМО.

1. Преобразование графов переходов, представленных в формате MS Visio, в исходные коды программ для различных языков программирования (инструментальное средство MetaAuto) // [электронный ресурс] - http://is.ifmo.ru/projects/metaauto/
2. Исходные тексты инструментального средства MetaAuto // [электронный ресурс] - http://is.ifmo.ru/projects/metaauto/


Цитата:
Настоящая работа посвящена разработке инструментального средства, названного MetaAuto, позволяющего по графам переходов, построенным с помощью редактора MS Visio, автоматически генерировать изоморфные им исходные коды программ на разных языках программирования, для каждого из которых предварительно должен быть создан шаблон.

Изложим последовательность действий для построения программы по графам переходов, например, на языке C#:
1. Выбрать из готовых или создать, как это указано в работе, шаблон для используемого языка программирования. Для языка C# этот шаблон находится в папке CSharpProject.
2. С помощью редактора MS Visio cтроятся графы переходов автоматов.
3. Запускается программа Visio2Xml.exe (находится в папке Utils), которой в качестве параметров пользователем должны быть переданы путь к файлу, содержащему графы переходов, полученные на шаге 2, и путь к генерируемому этой программой XML-файлу.
4. Запускается программа XSLTransform.exe (находится в той же папке), которой в качестве параметров пользователем указываются путь к полученному на третьем этапе XML-файлу, путь к XSLT-шаблону и путь к генерируемому файлу с исходным кодом.


Комментарий.
Я использовал раннюю версию приложения, которая транслировала из MS Visio диаграммы автоматов переходов на язык Си. Автор любезно прислал мне исходные коды приложения. Кстати, действительно получался и код. и комментарии И. главноеЮ проект собирался в готовое приложение!

Новый проект пошёл ещё дальше. Используется промежуточное представление графа переходов состоний автомата в XML виде. Это позволило транслировать на три языка. тестировал - работает.

Куда можно развивать?

(а) - Добавить трансляцию на язык Оберон.
(б) - Добавить трансляцию на язык Компонентный Паскаль.
(в) - Использовать какой-нибудь открытый инструмент создания графов, например ДРАКОН, или же OpenOffice.

А самая передовая идея - построить транслятор исходных кодов с языка Компонентного Паскаля (Оберона) в XML- виде! Это даст новые возможности работать с исходными проектами и транслировать на другие языки.

"В ручную" транслировал пример кода в виде XML-вид:

3. Пример трансляции исходного кода фрагмента программы с языка С в вид XML // [электронный ресурс] - 1.1. Исходный код на С - http://robot-ivan.narod.ru/samples/HelloRobot.c 1.2. Вид программы в виде XML http://robot-ivan.narod.ru/samples/CPlusPlusToMLP.xml


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генератор исходных текстов.
СообщениеДобавлено: Пятница, 30 Апрель, 2010 08:25 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Обратил внимание на интереснейший инструмент для быстрого создания компилятором COCO/R.

Цитата:
Cистема "COCO/R" разработана в университете г.Линца (Австрия). Один из соавторов Х.Мессенбек - создатель языков программирования Object Oberon и Oberon-2 (совместно с Н.Виртом). См. его статьи в разделе "Языки программирования....". Система проста в использовании и позволяет генерировать компиляторы для языков C#, Delphi, Pascal, C++, Java, Modula-2, Ada и др.


В замыслах был подход использовать Компилятор Компиляторов немецкого программного-писателя Meunier приложение "Babel". Однако очень хотелось что-то универсальное. BABEl написан на языке Компонентного Паскаля. Скачал и несколько примером конвертации в код программы для компонентного паскаля с Oberon. Утилиты интересные для саморазвития. Хотелось же что-то более профессиональное.

Современные компиляторы, на мой взгляд, необходимо создавать так, чтобы кроме исходного кода программы на конкретном языке имелся файл описания синтаксиса в форме расширенной грамматики языка EBNF. COCO/R вырос в коллективе программистов, которые занимались языком Oberon. Сейчас COCO/R - это универсальное средство для построения компиляторов для различных языков.

Нашёл ресурс по теме "Формальные языки и методы трансляции" для обучения использования COCO/R с целью создания собственных компиляторов. Для компонентного паскаля также имеется инструмент Coco/R - http://www.chernyshov.com/SPPO_5/PROGRAM/coco_KP_setup.htm


Ссылки:
1. http://www.chernyshov.com/SPPO_5/_sppo_5.htm
2. http://www.chernyshov.com/SPPO_5/PROGRAM/CocoLaba2.htm
3. file://localhost/C:/wget-app/wget-1.11.4b/www.chernyshov.com/SPPO_5/PROGRAM/CocoCPP.htm


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

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


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

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


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

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