Генератор SQL-запросов в системах управления базами данных (СУБД) представляет собой транслятор, который осуществляет перевод заданий с языка (вида), удобного для пользователя, в последовательность запросов на языке SQL (Structured Query Language — Язык структурированных запросов), который является стандартным языком наиболее распространённых реляционных СУБД.
Генератор XML-документов используется в системах обмена сообщениями, построенных на стандартах, соответствующих концепции сетевых служб. Указанные стандарты требуют использования языка XML (Extensible Markup Language — Расширенный язык разметки) в качестве базового языка всех сообщений, распространяемых между абонентами вычислительной сети.
Процесс макрогенерации текстов состоит из ввода макроопределений и обработки макровызовов. Макрогенератору задаётся исходный текст, в котором есть подлежащие замене последовательности символов (макровызовы), и с помощью макроопределений указывается, чем они должны быть заменены. В результате работы макропроцессора получается текст, в котором выполнены необходимые замены, т. е. сделаны макро-подстановки. Иногда макрогенератор встраивается в компилятор (например, языки PL/1, С, С++).
48 Генераторы и итераторы. Выражения -генераторы в Python
Генератор тестов или тестовых последовательностей анализирует формальное описание объекта (языка программирования, программы, системы управления) и формирует необходимое число тестовых примеров, обладающих заданными характеристиками по уровню покрытия описания (например, по числу заложенных функций, по числу ветвей потока управления). Сформированные тесты используются в дальнейшем для проверки соответствия исследуемого объекта его формальному описанию. Результаты тестов являются одним из критериев оценки качества изготовленного программного обеспечения (смотри Верификация в информатике).
Генератор отчётов позволяет подготовить необходимые пользователю отчётные формы произвольной структуры, включающие таблицы, графики, текстовую информацию, иллюстрации.
Генератор программ лексического и синтаксического разбора представляет собой программу, позволяющую по заданному формальному описанию (в виде наборов регулярных выражений или грамматических правил) некоторого языка программирования автоматически строить программы, производящие соответствующий разбор предложений этого языка. Генерируемая программа разбора состоит из набора процедур, работающих с информацией, размещённой в строящихся генератором таблицах. Сформированные процедуры обычно являются заготовками программ, которые после ручного редактирования могут использоваться при создании компиляторов с языков программирования.
Использование случайных чисел связано с потребностью случайного выбора в математической статистике и теории игр. Получение действительно случайных чисел — очень непростая задача, поэтому большая часть расчётов на ЭВМ производится с использованием так называемых псевдослучайных чисел. Генератор псевдослучайных чисел — программа, генерирующая последовательность чисел, элементы которой почти независимы друг от друга и подчиняются заданному распределению. Данные программы применяются при решении задач математического моделирования, кодирования, криптографии (например, генератор ключей или паролей в программных системах обеспечения безопасности обработки и передачи данных) и др.
random. Генерация псевдослучайных чисел на компьютере
Лит.: Brown Р.J. Macro processors and techniques for portable software. L., 1974; Браун П. Макропроцессоры и мобильность программного обеспечения. М., 1977; Paxson V. Flex Fast lexical analyzer generator. Berk., 1995; Кнут Д. Э. Искусство программирования. М., 2000.
Т. 2: Получисленные методы; Donnelly С., Stallman R. Bison. The Yacc-compatible parser generator. Version 2.1. S. 1., 2005.
Источник: knowledge.su
Большая Энциклопедия Нефти и Газа
Генерация программ обеспечивается макрокомандами генерации, настроечными макрокомандами и программами генерации. В различных пакетах для генерации программ используются различные средства. Так, генерация программ пакета СИОД1 обеспечивается программой генерации, генерация программ пакетов Планирование мощностей и Управление цехом — макрокомандами генерации, генерация программ пакетов Планирование потребностей и Управление запасами — настроечными макрокомандами. Следовательно, средства генерации программ пакетов являются их неотъемлемой частью и должны всегда присутствовать в составе пакета. [2]
Генерация программ осуществляется стандартным макрогенератором Ассемблера ДОС ЕС, исходными данными для которого являются параметры генерации. [3]
Генерация программ пакета осуществляется по подготовленным пользователем параметрам, которые являются входными данными для программы генерации. PO генерируется по параметрам, которые являются входными данными для макрогенератора Ассемблера. [4]
Генерация программ решения задач обеспечивает снижение трудоемкости разработки программного обеспечения по сравнению с индивидуальной разработкой по предварительным расчетам в 9 — 12 раз. [5]
Для генерации программы с помощью мастера AppWizard создается новый проект необходимого типа. Затем в последовательности диалоговых окон, отображаемых мастером, задаются требуемые характеристики программы. Создание проектов описано в гл. [6]
При генерации программы TextDemo с помощью мастера AppWizard необходимо указать, что класс представления порождается от класса cScrollview, чтобы окно представления поддерживало средства прокрутки. Прокрутка нужна, если строки текста не могут полностью поместиться внутри окна представления. Особенно часто это случается при выборе крупного шрифта. В этом параграфе добавлен фрагмент программы, сообщающий MFC текущий размер документа. [8]
При генерации программы контейнера мастер AppWizard создает новый класс для управления внедрением и связыванием компонентов, а также вносит изменения в стандартные классы программы. [9]
Для генерации программы подготовки указателей служит макрокоманда DI DRA, с помощью которой можно составить, например, указатель дескрипторов и авторский указатель на основании файла ссылок к библиографии или к каталогу. Входными файлами служат файлы, созданные программами подготовки библиографии или каталога. [10]
Система генерации программ отчетов ( СГПО) позволяет создавать программы выборки данных из баз, поддерживаемых СУБД Ока, формирование и вывод отчетов. [11]
Система генерации программ отчетов ( СГПО) представляет собой совокупность языковых и программных средств, обеспечивающих генерацию программ поиска и выборки данных из БД, а также программ формирования отчетов. [12]
Система генерации программ загрузки и актуализации баз данных КОМПАКТ поддерживает непроцедурный язык описания задания на загрузку и обновление БД. [13]
Интересный пример генерации программы в процессе трансляции представляет моделирование подлинного индексного метода адресации системы VAX-11 на ЭВМ PDP-11. В любом из них, кроме регистрового, адреса операндов могут получать приращение при суммировании с константой, равной содержимому второго регистра, умноженному на размер операнда. Размер операнда соответственно равен 1, 2, 4 или 8 для байт, слов, двойных слов или значений с плавающей точкой одинарной точности и для учетверенных слов или значений с плавающей точкой двойной точности. Размер операнда определяется типом команды, аналогично тому, как в PDP-11 есть команды MOV и MOVB. Для указания индексирования к обычному описанию адреса добавляется в квадратных скобках индексный регистр. [14]
В процессе генерации программ создания и обслуживания массивов пакета СИОД1 потребовалось обеспечить инициализацию и обслуживание некоторых реквизитов, которые не входят в состав загрузочных массивов баз данных. Формирование информации в этих реквизитах обеспечивается самими пакетами, а возможность их обслуживания позволяет заносить информацию для режима нулевого пуска АСУ и создавать эквивалент информации для обеспечения режима автономной отладки программ пакетов. Например, введение информации о размерах партий запуска и общих потребностях в базу данных средствами обслуживания СИОД1 делает возможным автономную отладку пакетов Планирование мощностей и Управление цехом независимо от состояния отладки программ пакета Планирование потребностей, который должен рассчитывать эту информацию. [15]
Источник: www.ngpedia.ru
Подходы к кодогенерации
Кодогенерация — это процесс генерации кода на основе определенных данных.
Я бы хотел выделить некоторые направления:
Генерация кода на основе более высокоуровневого
Этот подход нам позволяет получить на основе простого интуитивно понятного кода — код более низкого уровня. Такой подход помогает сохранить абстракцию. Язык, на котором написан исходный код, может не совпадать с языком кода, который будет сгенерирован.
Например, мы пишем сайт на каком-то своем языке. А на сервере у нас стоит PHP. Давайте посмотрим какая теоретически возможна генерация.
user = Users.find(5);
user.lastActivity = DateTime.Now;
user.save();
Мы сконфигурировали сайт на использование MySQL и можем получить на выходе подобный код:
$user_query = mysql_query( ‘SELECT * FROM `users` WHERE `id`=5’ , $mysql_connection);
$user = mysql_fetch_assoc($user_query);
mysql_query( ‘UPDATE `users` SET `lastActivity`=’ .time(). ‘ WHERE `id`=’ .$page[ ‘id’ ], $mysql_connection);
А если кодогенератор умный, то он может сгенерировать нечто такое:
mysql_query( ‘UPDATE `users` SET `lastActivity`=’ .time(). ‘ WHERE `id`=5’ , $mysql_connection);
Вдруг мы решили не использовать MySQL, а использовать, например, прямую запись в файлы, то код может быть таким:
$user_list = unserialize(file_get_contents( ‘users.txt’ ));
foreach ($user_list as $current_user)
if ($current_user->id == 5 )
$user = $current_user;
break ;
>
>
$user->lastActivity = time();
file_put_contents( ‘users.txt’ , serialize($user_list));
Еще один пример. Мы пишем на своем языке:
deletedRowsCount = query: delete from myTable where id>5;
В случае использования MySQL, мы могли бы получить такой код:
$query = mysql_query( ‘DELETE FROM `myTable` WHERE `id`>5’ , $mysql_connection);
$deletedRowsCount = mysql_affected_rows($mysql_connection);
В случае использования файлов, мы могли бы получить такой код:
$deletedRowsCount = 0 ;
$myTable_list = unserialize(file_get_contents( ‘myTable.txt’ ));
foreach ($myTable_list as $key_myTable=>$current_myTable)
if ($current_myTable->id > 5 )
unset ($myTable_list[$key_myTable]);
$deletedRowsCount++;
>
>
file_put_contents( ‘myTable.txt’ , serialize($myTable_list));
Примеры кода не идеальны, но с задачей демонстрации кодогенерации они справляются.
Хочу так же привести пример работы реального кодогенератора, работающего по такому принципу. Это кодогенератор LINQ.
byte [] source = new byte [] < 1 , 5 , 7 , 4 , 3 , 9 , 8 , 2 , 6 >;
var dest = from n in source where n > 5 select n;
IEnumerable < byte > dest = Enumerable .Where< byte >( new byte [] < 1 , 5 , 7 , 4 , 3 , 9 , 8 , 2 , 6 >, new CS$<>9__CachedAnonymousMethodDelegate1 (Main_b__0));
Генерируется так же делегат:
[ CompilerGenerated ]
private static Func< byte , bool > CS$<>9__CachedAnonymousMethodDelegate1 ;
[ CompilerGenerated ]
private static bool Main_b__0( byte n)
return (n > 5 );
>
Генерация на основе метаданных
Этот подход позволяет нам создавать код работы с данными на основе описания структуры данных (метаданных). Например, у нас есть БД MySQL. Я хочу сгенерировать сущности для работы с БД. Наиболее простые данные о структуре БД получить легко:
Из этого можно сгенерировать примитивный класс хранения информации о пользователе.
class User
public $id;
public $name;
>
Если подумать, то можно еще реализовать методы select, update, insert, delete. В будущем мы столкнемся с подобными кодогенераторами и даже рассмотрим разработку подобного.
Кодогенерация на основе шаблонов
Это один из простых и повседневных подходов к кодогенерации. Пример такой системы — Smarty. Эта система используется в основном для генерации HTML кода на основе шаблонов. В ходе экспериментов я генерировал PHP и C# код.
Например, у нас в неком источнике $source хранится список полей и нам надо на их основе сделать класс со свойствами.
Шаблон можно взять такой:
class MyClass
>
public $ > ;
>
>
И при $source = array ( ‘width’ , ‘height’ , ‘name’ ) мы получим:
class MyClass
public $width;
public $height;
public $name;
>
В следующей статье мы рассмотрим то как можно управлять сложностью с помощью кодогенерации.
Источник: habr.com