OberonCore
https://forum.oberoncore.ru/

Генератор исходных текстов.
https://forum.oberoncore.ru/viewtopic.php?f=47&t=2425
Страница 1 из 1

Автор:  Иван Кузьмицкий [ Вторник, 09 Март, 2010 09:51 ]
Заголовок сообщения:  Генератор исходных текстов.

Есть у меня пара абстрактных классов, являющих сборник рутинных действий для CRUD-интерфейса (справочник + форма). Использование этих классов тоже рутина, поэтому генератор исходника сильно бы помог.

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

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

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

Автор:  Валерий Лаптев [ Вторник, 09 Март, 2010 10:28 ]
Заголовок сообщения:  Re: Генератор исходных текстов.

Мне кажется, нужно возродить старую добрую идею макрогенерации. Ведь на ЕС и СМ ось не устанавливалась, а генерировалась под конфигурацию компьютера. Пакет представлял собой последовательность макровызовов с соответствующими параметрами настройки.
Может быть, в данном случае аналогично сделать?

Автор:  Иван Кузьмицкий [ Вторник, 09 Март, 2010 14:09 ]
Заголовок сообщения:  Re: Генератор исходных текстов.

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

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

Автор:  Axcel [ Вторник, 09 Март, 2010 15:33 ]
Заголовок сообщения:  Re: Генератор исходных текстов.

Помочь - то поможет, но для "посвященного"

Автор:  Евгений Темиргалеев [ Вторник, 09 Март, 2010 15:42 ]
Заголовок сообщения:  Re: Генератор исходных текстов.

Тогда надо думать что-то проще...

Автор:  Илья Ермаков [ Вторник, 09 Март, 2010 16:14 ]
Заголовок сообщения:  Re: Генератор исходных текстов.

Какими-нибудь табличками описывать подстановки...

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

Автор:  Иван Кузьмицкий [ Вторник, 09 Март, 2010 18:19 ]
Заголовок сообщения:  Re: Генератор исходных текстов.

Я в прошлом году делал генератор исходника текста. Код, отвечающий за генерацию, выглядит примерно так:

Код:
      (* 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;


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

Автор:  vladfind [ Понедельник, 12 Апрель, 2010 22:17 ]
Заголовок сообщения:  Re: Генератор исходных текстов.

Для генерации кода можно использовать развитый подход на кафедре технологии программирования в ЛИТМО.

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

Автор:  vladfind [ Пятница, 30 Апрель, 2010 08:25 ]
Заголовок сообщения:  Re: Генератор исходных текстов.

Обратил внимание на интереснейший инструмент для быстрого создания компилятором 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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/