Алгоритм трансляции APLAN-кода

Рассмотрен алгоритм трансляции APLAN-кода в системе алгебраического программирования APS с использованием методов инсерционного моделирования.

Gespeichert in:
Bibliographische Detailangaben
Datum:2010
Hauptverfasser: Летичевский, А.А., Летичевский, А.А. (мл.), Песчаненко, В.С.
Format: Artikel
Sprache:Russian
Veröffentlicht: Міжнародний науково-навчальний центр інформаційних технологій і систем НАН та МОН України 2010
Schriftenreihe:Управляющие системы и машины
Schlagworte:
Online Zugang:http://dspace.nbuv.gov.ua/handle/123456789/82885
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
Назва журналу:Digital Library of Periodicals of National Academy of Sciences of Ukraine
Zitieren:Алгоритм трансляции APLAN-кода / А.А. Летичевский, А.А. Летичевский (мл.), В.С. Песчаненко // Управляющие системы и машины. — 2010. — № 6. — С. 40-46. — Бібліогр.: 12 назв. — рос.

Institution

Digital Library of Periodicals of National Academy of Sciences of Ukraine
id irk-123456789-82885
record_format dspace
spelling irk-123456789-828852015-06-12T03:01:54Z Алгоритм трансляции APLAN-кода Летичевский, А.А. Летичевский, А.А. (мл.) Песчаненко, В.С. Программная инженерия и программные средства Рассмотрен алгоритм трансляции APLAN-кода в системе алгебраического программирования APS с использованием методов инсерционного моделирования. An algorithm of translation of the APLAN-code in the APS algebraic programming system with thе help of the methods of insertion modelling is considered. Розглянуто алгоритм трансляції APLAN-коду в системі алгебраїчного програмування APS з використанням засобів інсерційного моделювання. 2010 Article Алгоритм трансляции APLAN-кода / А.А. Летичевский, А.А. Летичевский (мл.), В.С. Песчаненко // Управляющие системы и машины. — 2010. — № 6. — С. 40-46. — Бібліогр.: 12 назв. — рос. 0130-5395 http://dspace.nbuv.gov.ua/handle/123456789/82885 004.41, 681.142.2 ru Управляющие системы и машины Міжнародний науково-навчальний центр інформаційних технологій і систем НАН та МОН України
institution Digital Library of Periodicals of National Academy of Sciences of Ukraine
collection DSpace DC
language Russian
topic Программная инженерия и программные средства
Программная инженерия и программные средства
spellingShingle Программная инженерия и программные средства
Программная инженерия и программные средства
Летичевский, А.А.
Летичевский, А.А. (мл.)
Песчаненко, В.С.
Алгоритм трансляции APLAN-кода
Управляющие системы и машины
description Рассмотрен алгоритм трансляции APLAN-кода в системе алгебраического программирования APS с использованием методов инсерционного моделирования.
format Article
author Летичевский, А.А.
Летичевский, А.А. (мл.)
Песчаненко, В.С.
author_facet Летичевский, А.А.
Летичевский, А.А. (мл.)
Песчаненко, В.С.
author_sort Летичевский, А.А.
title Алгоритм трансляции APLAN-кода
title_short Алгоритм трансляции APLAN-кода
title_full Алгоритм трансляции APLAN-кода
title_fullStr Алгоритм трансляции APLAN-кода
title_full_unstemmed Алгоритм трансляции APLAN-кода
title_sort алгоритм трансляции aplan-кода
publisher Міжнародний науково-навчальний центр інформаційних технологій і систем НАН та МОН України
publishDate 2010
topic_facet Программная инженерия и программные средства
url http://dspace.nbuv.gov.ua/handle/123456789/82885
citation_txt Алгоритм трансляции APLAN-кода / А.А. Летичевский, А.А. Летичевский (мл.), В.С. Песчаненко // Управляющие системы и машины. — 2010. — № 6. — С. 40-46. — Бібліогр.: 12 назв. — рос.
series Управляющие системы и машины
work_keys_str_mv AT letičevskijaa algoritmtranslâciiaplankoda
AT letičevskijaaml algoritmtranslâciiaplankoda
AT pesčanenkovs algoritmtranslâciiaplankoda
first_indexed 2025-07-06T09:33:45Z
last_indexed 2025-07-06T09:33:45Z
_version_ 1836889591999627264
fulltext 40 УСиМ, 2010, № 6 Программная инженерия и программные средства УДК 004.41, 681.142.2 А.А. Летичевский, А.А. Летичевский (мл.), В.С. Песчаненко Алгоритм трансляции APLAN кода Рассмотрен алгоритм трансляции APLAN-кода в системе алгебраического программирования APS с использованием методов инсерционного моделирования. An algorithm of translation of the APLAN-code in the APS algebraic programming system with thе help of the methods of insertion modelling is considered. Розглянуто алгоритм трансляції APLAN-коду в системі алгебраїчного програмування APS з використанням засобів інсерційно- го моделювання. Введение. APS – система алгебраического про- граммирования была разработана в середине 80-х в отделах №№ 100, 105 Института кибер- нетики НАН Украины [1]. Исторически, APS – это первая система переписывания термов, от- делившая понятия стратегий от систем правил переписывания. APS – система для прототипирования алго- ритмов. Ее вторая и третья версии [2] успешно применяются в ряде коммерческих продуктов: VRS (Verification for Requirement Specification) [3], MathLog (Mathematic Logic for Universities) [4], TerM [5], что позволяет авторам APS пози- ционировать ее как коммерческую систему. Та- кое использование системы APS, конечно, не- возможно без некоторого промежуточного язы- кового уровня, связывающего язык реализации системы С++ с языком самой системы APLAN. Такой язык называется APLANC [6]. Разработка различного программного обес- печения (ПО) с использованием системы ал- гебраического программирования APS прохо- дит следующие этапы разработки: 1. Создание прототипа всех основных алго- ритмов, которые будут необходимы ПО. 2. Анализ прототипа: его доработка и опти- мизация. 3. Реализация алгоритмов на языке програм- мирования ПО (пока только С++). Основные математические и алгоритмиче- ские проблемы решаются на первом и втором этапах разработки, поэтому написание с «чис- того листа» этих алгоритмов на языке програм- мирования ПО не вызывает осложнений. Од- нако такой подход требует значительных за- трат времени и ресурсов. Таким образом, воз- никает вопрос: как можно автоматически или полуавтоматически перейти от второго этапа к третьему? Всемирно известные системы переписывания термов MAUDE [7], ELAN [8], STRATEGO [9] решают проблему автоматической генерации ис- ходного кода по его прототипу, однако все эти конверторы поддерживают лишь небольшую часть функциональных возможностей системы и результат генерации – не только некоторый исходный код, а и его компиляция в выпол- няемый файл. В настоящее время нет инфор- мации об использовании этих систем в ком- мерческих продуктах, что позволяет позицио- нировать их как системы для исследователь- ских проектов исключительно. С другой сто- роны, система алгебраического программиро- вания APS представляет собой обобщение всех этих систем, поскольку большинство их функ- циональных возможностей включены в APS. Кроме того, в третьей версии APS существенно улучшены алгоритмы переписывания и языко- вые возможности системы. Решена также зада- ча эффективного «хеширования» термов. Более детально об этих результатах, а также о срав- нительной характеристике, языковых и функ- УСиМ, 2010, № 6 41 циональных возможностях систем переписы- вания термов можно будет ознакомиться в ста- тьях, которые готовятся к печати в Вестнике Харьковского национального университета, се- рия «Математическое моделирование. Инфор- мационные технологии. Автоматизированные системы управления». Наш опыт разработки коммерческого ПО сви- детельствует о том, что подход к генерации исходного кода алгоритмов ПО с использова- нием его прототипа, при котором создается за- пускаемый файл, не применим для больших коммерческих продуктов, поскольку такие ге- нераторы ориентированы на получение запус- каемого файла. Такие генераторы поддержи- вают только небольшую часть языковых воз- можностей системы. В больших коммерческих продуктах при пе- реходе от второго к третьему этапу совсем не обязательно получать запускаемый файл, а до- таточно получить исходный код конкретного алгоритма, который потом необходимо вста- вить в большой программный продукт. Таким образом, проблема генерации исход- ного кода по его прототипу в системах перепи- сывания термов – актуальна. Данная статья посвящена проблеме генера- ции С++ кода по его прототипу в системе ал- гебраического программирования APS так, чтобы этот генератор поддерживал все функ- циональные возможности языка, и полученный исходный код можно было использовать в больших программных продуктах (С++ – язык реализации APS). APS – инструмент для создания прототипов Алгебраическое программирование – это про- граммирование, основанное на переписывании. Оно часто рассматривается как расширение функционального программирования и приме- няется при решении задач компьютерной ал- гебры (таких, как проблема слов в конечно оп- ределенных алгебрах, алгоритмы пополнения Кнута–Бендикса или Бухбергера), а также за- дач, связанных с операционной семантикой языков программирования (исполняемые алгеб- раические спецификации компонентов ПО, оп- ределение операционных семантик языков про- граммирования, разработка интерпретаторов и прототипов компонентов ПО и др.). В отличие от традиционного подхода, ори- ентированного на использование канонических систем правил переписывания с «очевидной» стратегией их применения, в APS возможно со- четание любых систем правил переписывания и разнообразных стратегий переписывания. Та- кой подход значительно расширяет возможно- сти техник переписывания, поскольку возрас- тает их гибкость и выразительность. APS ин- тегрирует четыре основные парадигмы програм- мирования таким образом, что основная часть программы может быть написана в виде сис- тем переписывания, императивное и функцио- нальное программирование используются для определения стратегий, логическая парадигма реализуется на базе переписывания, использу- ющего встроенную процедуру унификации. Инсерционное моделирование, развиваемое в настоящее время в Институте кибернетики им. В.М. Глушкова, продолжает традиции алге- браического подхода в прикладной теории ал- горитмов, программировании и разработке ки- бернетических систем, основы которого были заложены В.М. Глушковым и его школой. В ал- гебре алгоритмов Глушкова программа рассмат- ривается как алгебраически определенное пре- образование множества состояний информаци- онной среды (память, база данных, многоуров- невые распределенные структуры данных и др.). В инсерционном программировании этот взгляд обобщается на объекты, обладающие поведени- ем. Вместо пассивной среды, такой, например, как память, рассматривается активная среда, в которой преобразование информации системой взаимодействующих агентов определяет пове- дение этой среды, наблюдаемое пользователя- ми информации, производимой внутри среды. Программа в инсерционном программирова- нии рассматривается как агент, обладающий поведением. Его погружение в среду изменяет поведение этой среды. Переход от программ как преобразователей состояний к программам как преобразователям поведений можно срав- нить с переходом от точечных к функциональ- ным пространствам в математике. 42 УСиМ, 2010, № 6 Инсерционное программирование – это про- граммирование на базе модели поведения аген- тов в средах [10]. В основе модели – понятие размеченной транзиционной системы, т.е. сис- темы, определенной так же, как и автомат, мно- жеством состояний и множеством переходов (пары состояний), размеченных действиями или событиями. Формально понятие транзиционной системы совпадает с понятием недетермини- рованного частично определенного автомата, однако, в отличие от теории автоматов отно- шение эквивалентности транзиционных систем более сильное [2]. В настоящее время система алгебраического программирования рассматривается ее автора- ми как базовая система для создания системы «Инсерционного моделирования», работы по созданию которой активно ведутся в Институ- те кибернетики им. В.М. Глушкова НАН Ук- раины и Херсонском государственном универ- ситете МОН Украины. Более детальную ин- формацию об этих работах можно будет полу- чить в дальнейших публикациях авторов. Входным языком системы является APLAN, позволяющий описывать не только алгебраи- ческую среду (компоненты, операции и тожде- ства алгебры данных), но и процедуры и вызы- вать их из алгебраических программ (систем пе- реписывающих правил). Удобные средства для представления процедур позволяют пользова- телю манипулировать как стандартными, так и собственными разработанными эффективными стратегиями для применения переписывающих правил. Стратегии переписывания могут ис- пользовать различные свойства алгебры дан- ных, рассматривая алгебраические выражения (термы) с точностью до некоторых отношений конгруэнтности. Для этой цели используется ме- ханизм канонических (нормальных) форм ал- гебраических выражений. Этот механизм ра- ботает всегда, когда применяется некоторое пе- реписывающее правило. Выбор канонических форм определяется требованиями предметной области и управляется пользователем [2]. Основная часть программы на APS может быть разделена на две части:  процедурную и  часть программы с системами переписы- вающих правил. В языке APLAN процедуры определяются следующим образом: <процедура>::=proc(<список формальных парамет- ров, разделенных запятой>) [loc<список локальных параметров, разделенных запятой>] <список операторов процедуры, разделенных точ- кой с запятой > <формальный параметер>::=<идентификатор> <локальный параметер>::=<идентификатор> Операторы в APS могут быть трех типов: 1. Внутренние операторы – канонизаторы от- меток, реализованные как С++ функции, функ- ции и процедуры, которые определены в би- нарных файлах дистрибутива APS. 2. Внешние операторы – канонизаторы от- меток, реализованные как системы переписы- вающих правил, процедуры и функции, опи- санные на языке APLAN. 3. Операторы, определенные пользовате- лем – все языковые конструкции, описанные в специальной системе переписывающих пра- вил compile, которая вызывается, если дан- ный оператор не был определен как внутрен- ний или внешний. Системы переписывающих правил на языке APLAN определяются так: <система переписывающих правил>::= rs(<список переменных, разделенных запятой >) (<список правил, разделенных запятой>) <правило>::=<простое правило> | <условное правило> <простое правило>::=<алгебраическое выражение> = =<алгебраическое выражение> <условное правило>::=<условие>–>(<простое прави- ло>) <переменная>::=<идентификатор> Отметим, что в алгебраическом выраже- нии могут быть только операторы первого и второго типов, т.е. внутренние и внешние опе- раторы. При первом применении системы перепи- сывающих правил APS выполнит ее трансля- цию в REM (Rewriting Machine Language) – язык команд переписывающей машины. Синтаксис языка переписывающей машины выражается следующей параметрической грам- матикой: УСиМ, 2010, № 6 43 <замкнутая REM-программа>::= <заголовок программы><программа ранга 1> <заголовок программы>::=Rs array(<список пропус- ков>) <список пропусков>::= _ | _ , <список пропусков> <REM-программа>::=<программа ранга k> <программа ранга k>::=hash(<защищенная програм- ма ранга k>) | hash(<защищенная программа ранга k> + <про- грамма ранга k>) <защищенная программа ранга 0>::= rewrite(<term>) | If(<term>,rewrite(<term>)) <защищенная программа ранга n>::=match(<терм>) <программа ранга n–1> | test(<m-тип>)<программа ранга n+m–1> Здесь m, n – положительные целые числа, k – неотрицательное целое, <терм> – терм (алгебраическое выражение) языка APLAN, <m-тип> – терм вида ω((), . . . , ()), где ω – отметка арности m. Термы вида var(i), где i – положительное целое, не превышающее коли- чества пропусков в заголовке программы, и только var(i) рассматриваются как переменные замкнутой программы. Программы ранга k пред- ставляют собой части полностью сформиро- ванной программы, которая имеет ранг 1. Ран- ги соответствующих частей должны быть сба- лансированы подобно тому, как балансируют- ся части терма в бесскобочной записи. Далее будет показано, что каждая замкнутая REM-про- грамма однозначно определяет некоторую сис- тему переписывающих правил языка APLAN (с точностью до переименования переменных). Оператор REM-языка hash был реализован в третьей версии APS для эффективного поиска соответствующей «защищенной программы ран- га n» [11]. Поскольку поддерживается идеология час- тичной конвертации кода из языка APLAN в С++, то входными данными для нашего кон- вертора будет не программа, написанная на языке APLAN, а имя процедуры или системы переписывающих правил C++, код которой не- обходимо получить. Исходя из практического опыта работы авторов с APS, такой подход на- иболее востребован при переходе от прототипа к коммерческой версии. Рассмотрим более де- тально каждую из проблем, возникающих при трансляции С++ кода из APLAN языка. Проблемы трансляции Система алгебраического программирования APS поддерживает самомодификацию програм- мы на языке APLAN в процессе ее выполнения. Это означает, что в процессе выполнения APLAN-программ могут создаваться динами- чески новые процедуры и системы переписы- вающих правил (с.п.п.), дописываться (удалять- ся) операторы в процедуре и с.п.п., что в неко- торых случаях значительно упрощает процесс написания кода. Наиболее распространенным примером, реа- лизация которого упрощается с помощью ди- намического создания с.п.п., есть задача замены подтермов в заданном терме. Для ее решения нужно создать с.п.п. и применить её к задан- ному терму с помощью определенных в систе- ме стратегий [2]. Отметим, что среди наиболее близких систем переписывания термов такой особенностью обладает только APS. При трансляции процедур, описанных на язы- ке APLAN, необходимо учитывать следующее: 1. Все формальные параметры APLAN-проце- дур воспринимаются как один терм, при пере- даче параметров происходит процесс унифика- ции терма формальных параметров с входным термом, при этом выбирается максимальная по- следовательность формальных параметров сле- ва направо, при которых процесс унификации будет успешным, а лишним значениям формаль- ных параметров присваивается значение «Nil». Например: Процедура1:=proc(x,y,z)… … Процедура1(1,2); … Отметим, что APS поддерживает русский язык. При вызове процедуры будет происхо- дить унификация термов 1,2 и x,y (максималь- ная подпоследовательность формальных пара- метров), после чего x будет равен единице, y – двум, а z – Nil. 2. Внутренние операторы уже реализованы на С++ и их необходимо корректно вызывать. 3. Внешние операторы реализованы на язы- ке APLAN и их следует не только вызывать, но и транслировать корректно. 44 УСиМ, 2010, № 6 4. Операторы пользователя определены в с.п.п. compile, поэтому конвертировать нужно не собственно оператор, а результат примене- ния с.п.п. compile к нему. Для трансляции с.п.п. следует решить такие проблемы: 1. Как эффективно выполнить унификацию алгебраических выражений в левых частях пра- вил системы? 2. Как эффективно найти нужное правило с с.п.п. или определить, что подходящего прави- ла нет? Транслятор языка APLAN в С++ в большой степени решает все описанные проблемы. Транслятор кода Рассмотрим положение транслятора кода в модели интерпретатора (рисунок). Традиционно к транслятору кода предъяв- ляются жесткие требования. Получаемый код должен быть корректным и высококачествен- ным, что означает эффективное использование целевой машины. Кроме того, эффективно дол- жен работать и генератор кода. Математически проблема генерации опти- мального кода – неразрешима. На практике приходится довольствоваться эвристическими технологиями, дающими хороший, но не обя- зательно оптимальный код. Выбор эвристики очень важен, так как тщательно разработанный алгоритм генерации кода может давать код, работающий в несколько раз быстрее кода, по- лученного с помощью недостаточно проду- манного алгоритма [12]. Реализация транслятора Для реализации алгоритма транслятора, по мнению авторов, лучше всего использовать идеи инсерционного моделирования. В этом случае будем рассматривать код функции и с.п.п., на- писанный на APLAN ,как некий определенный агент с поведением (операторы подпрограм- мы), в качестве среды возьмем стандарты язы- ка С++ и библиотеку C++ типов APS, тогда функцией погружения будет алгоритм транс- лятора. В качестве системы для реализации возьмем систему алгебраического программирования APS, поскольку:  APS уже имеет синтаксический и лексиче- ский анализы для APLAN-программ (Парсер, Таблица символов (см. рисунок)).  APS – мощный инструмент для прототипи- рования алгоритмов.  APS – базовая система для инсерционного моделирования. Итак, рассмотрим принятые решения для проблем трансляции APLAN-кода в С++. Для ко- да, который может модифицироваться динами- чески, создан промежуточный язык APLANC, позволяющий использовать все языковые воз- можности APLAN на С++. Более детально с этим языком можно ознакомиться в [6]. Для использования внутренних операторов APS создан специальный интерфейс и библио- тека с минимальным набором таких операто- ров. Однако в данном случае транслятор толь- ко сообщает список операторов, которые не вхо- дят в этот минимальный набор, но использу- ются, и при включении полученного кода поль- зователь должен самостоятельно проверить на- личие этих операторов в своей программе. Поскольку основной языковой «сахар» в APLAN достигается с помощью с.п.п. compile, транслируются не сами эти операторы, а резуль- тат применения compile. После решения опи- санных проблем трансляция APLAN-процедур не представляет сложности. Для трансляции с.п.п. используем «опти- мизатор кода» (см. рисунок), который пере- водит с.п.п. в REM-язык. После этого основ- ная сложность состоит в реализации алгорит- ма унификации для ко- манды REM-языка match. Сейчас в трансляторе су- ществуют две возможно- сти трансляции с.п.п.: с использованием языка AP- Промежуточный код (терм) Промежуточный код (терм) Исходная программа Парсер Оптимиза- тор кода Транслятор кода Целевая программа Таблица символов Положение транслятора кода в модели APS УСиМ, 2010, № 6 45 LANC и без него (APLANC делает код более понятным, а его отсутствие может затруд- нить понимание кода даже у опытных разра- ботчиков). Пример В качестве примера рассмотрим одну из с.п.п. R (описание находится в руководстве пользователя [2, с. 25]). Итак, имеем следую- щий APLAN-код: R :=rs(x,y)( (x <=> y) = ((x –> y) & (y –> x)), (x –> y) = (~(x) |/ y), ~( ~(x) ) = x, ~(x |/ y) = (~(x) & ~(y)), ~(x & y) = (~(x) |/ ~(y)), ~(x <=> y) = (~(x –> y) |/ ~(y –> x)), ~(x –> y) = (x & ~(y)) ); Используя переписывающую машину APS в качестве оптимизатора кода, переведем эту с.п.п. в REM-язык: R=Rs ( array(_,_)) rem_hash( ()–>():match(var(0)–>var(1))rewrite(~(var(0))| /var(1),2), ~(()) : rem_hash( ()–>() : match(var(0)–>var(1))rewrite(var(0)& ~(var(1)),7), ~(()) : match(~(var(0)))rewrite(var(0),3), ()&() : match(var(0)&var(1))rewrite(~( var(0))|/ ~( var(1)),5), ()|/() : match(var(0)|/var(1))rewrite(~( var(0))& ~( var(1)),4), ()<=>() : match(var(0)<=>var(1)) rewrite(~(( var(0))–>( var(1)))|/ ~(( var(1))–> ( var(0))),6)) ) , ()<=>() : ( match(var(0)<=>var(1))rewrite((var(0) –>var(1))&(var(1)–>var(0)),1) ); Здесь Rs означает, что с.п.п. переведена в REM-язык. array(_,_) – массив из двух элемен- тов, используемый для сохранения значений параметров после успешного процесса унифика- ции, также он указывает на то, что используется два параметра, а в теле с.п.п. заменен x на var(0), а y на var(1). rem_hash – команда REM- языка, которая по отметке входящего терма вы- бирает соответствующие команды REM-языка без последовательного перебора (как это было во второй версии APS). match – команда REM- языка, выполняющая процесс унификации, re- write – подставляет вместо исходного терма, терм, который стоит в аргументах (значения var(0), var(1) есть всегда, так как по умолча- нию они равны Nil). Второй аргумент команды используется для трассировки с.п.п. в APS, а также для оптимизации некоторых внутренних стратегий системы. Результат трансляции REM-языка будет вы- глядеть так (с использованием APLANC): int eliminate(intr_ptr &fpl,node_ptr &t){ nodes_ptr tmp; node_ptr tmp_t=t; node_ptr x,y; if (t–>get_mark()==fpl–>m_Marks[MARK_IFF]){ if (fpl–>let("eliminate1 ",get_term_val(fpl,tmp_t)," (ac_h <=> ac_h)",tmp){ get_term_value(fpl,tmp_t); y=tmp[1];x=tmp[0]; /*((x <=> y) ) = (((x –> y) & (y –> x)) ) */ t=fpl–>make_formula("((() –> ()) & (() –> ()))",4 , *fpl–>new_o(x),*fpl–>new_o(y),*fpl–>new_o(y), *fpl–>new_o(x)); return 1; } … } … return 0; } Здесь intr_ptr – класс интерпретатора языка APLANC, node_ptr – класс узла дерева, nodes_ ptr – класс массива узлов дерева, функция let – реализовывает алгоритм унификации, в каче- стве переменных для этого алгоритма исполь- зуется массив tmp и ключевое имя ac_h, функ- ция get_term_value – подготавливает терм для дальнейшего использования, а get_term_val – возвращает текущий терм для процесса уни- фикации, make_formula – создает терм по шаб- лону. Более детально эти функции описаны в [6]. Заключение. Транслятор кода APLAN в С++ решает три основные проблемы, возни- кающие при переносе кода c языка APLAN в С++: 1. Время получения С++ кода существенно сокращается. 46 УСиМ, 2010, № 6 2. Минимизируются ошибки, связанные с опечатками при переносе кода (параметры при вызове процедуры поменялись местами, не те параметры передаются, где-то теряется значе- ние и пр.). Некоторые из таких ошибок очень трудно локализовать. 3. В С++ коде создаются APLAN-коммента- рии, что делает С++ код более читаемым и по- зволяет при небольших изменениях APLAN- кода вносить качественно изменения в С++ код. К недостаткам описанной трансляции мож- но отнести тот факт, что код, написанный с использованием языка APLANC, будет всегда медленней работать, чем код на С++ по понят- ным причинам. Однако трансляция без исполь- зования APLANC эллименирует этот недостаток. Таким образом, система алгебраического про- граммирования APS – мощный инструмент не только для прототипирования алгоритмов, а и для создания окончательных версий на языке С++. Предложенные решения и опыт исполь- зования APS на ряде коммерческих продуктов позволяет позиционировать ее как наиболее мощную систему переписывания термов, кото- рую можно эффективно использовать не толь- ко для исследовательских, но и для коммерче- ских продуктов. 1. [http://www.icyb.kiev.ua] 2. Algebraic programming system APS-1. Informatics'89 / A.A. Letichevsky, Ju.V. Kapitonova, S.V. Konozenko et al. // Proc. of the Soviet-Franch symp. Tallin, 1989. – P. 46–55. 3. Летичевский A.A., Капитонова Ю.В., Волков В.А. Сертификация систем с помощью базовых прото- колов // Кибернетика и системный анализ. – 2005. – № 4. – C. 256–268. 4. The Program Environment of Support of the Practical Training in the Course of Mathematical Logic. – http: //www.kspu.edu/About/Downloads/LabRVPPZ/MathL g.htm 5. Программно-методический комплекс Терм VII под- держки практической математической деятель- ности. – http://www.kspu.edu/About/Downloads/Lab RVPPZ/Term.htm 6. Letichevsky A., Letichevsky A. jr, Peschanenko V. APS C++ User Library // Проблемы программирования. – 2008. – № 2–3. – С. 299–304. 7. Maude System. – http://maude.cs.uiuc.edu 8. Elan System. – http://elan.loria.fr 9. Stratego System. – http://www.program-transformation. org/Stratego/WebHome 10. Letichevsky A.A., Gilbert D.R. A general theory of action languages // Кибернетика и системный анализ. – 1998. – № 1. – С. 16–36. 11. Letichevsky A.A., Khomenko V.V. A Rewriting Machine and Optimization of Strategies of Term Rewriting // Cybernetics and Systems Analysis. – 2002. – № 5. – P. 637–649. 12. Ахо А., Рави Сети, Ульман Дж. Компиляторы: прин- ципы, технолгии и инструменты. – М.: Вильямс, 2003. – 768 с. Поступила 11.05.2010 Тел. для справок: (044) 526-0058 (Киев) © А.А. Летичевский, А.А. Летичевский (мл.), В.С. Песчаненко, 2010  Внимание ! Оформление подписки для желающих опубликовать статьи в нашем журнале обязательно. В розничную продажу журнал не поступает. Подписной индекс 71008 << /ASCII85EncodePages false /AllowTransparency false /AutoPositionEPSFiles true /AutoRotatePages /None /Binding /Left /CalGrayProfile (Dot Gain 20%) /CalRGBProfile (sRGB IEC61966-2.1) /CalCMYKProfile (U.S. Web Coated \050SWOP\051 v2) /sRGBProfile (sRGB IEC61966-2.1) /CannotEmbedFontPolicy /Error /CompatibilityLevel 1.4 /CompressObjects /Tags /CompressPages true /ConvertImagesToIndexed true /PassThroughJPEGImages true /CreateJobTicket false /DefaultRenderingIntent /Default /DetectBlends true /DetectCurves 0.0000 /ColorConversionStrategy /CMYK /DoThumbnails false /EmbedAllFonts true /EmbedOpenType false /ParseICCProfilesInComments true /EmbedJobOptions true /DSCReportingLevel 0 /EmitDSCWarnings false /EndPage -1 /ImageMemory 1048576 /LockDistillerParams false /MaxSubsetPct 100 /Optimize true /OPM 1 /ParseDSCComments true /ParseDSCCommentsForDocInfo true /PreserveCopyPage true /PreserveDICMYKValues true /PreserveEPSInfo true /PreserveFlatness true /PreserveHalftoneInfo false /PreserveOPIComments true /PreserveOverprintSettings true /StartPage 1 /SubsetFonts true /TransferFunctionInfo /Apply /UCRandBGInfo /Preserve /UsePrologue false /ColorSettingsFile () /AlwaysEmbed [ true ] /NeverEmbed [ true ] /AntiAliasColorImages false /CropColorImages true /ColorImageMinResolution 300 /ColorImageMinResolutionPolicy /OK /DownsampleColorImages true /ColorImageDownsampleType /Bicubic /ColorImageResolution 300 /ColorImageDepth -1 /ColorImageMinDownsampleDepth 1 /ColorImageDownsampleThreshold 1.50000 /EncodeColorImages true /ColorImageFilter /DCTEncode /AutoFilterColorImages true /ColorImageAutoFilterStrategy /JPEG /ColorACSImageDict << /QFactor 0.15 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /ColorImageDict << /QFactor 0.15 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /JPEG2000ColorACSImageDict << /TileWidth 256 /TileHeight 256 /Quality 30 >> /JPEG2000ColorImageDict << /TileWidth 256 /TileHeight 256 /Quality 30 >> /AntiAliasGrayImages false /CropGrayImages true /GrayImageMinResolution 300 /GrayImageMinResolutionPolicy /OK /DownsampleGrayImages true /GrayImageDownsampleType /Bicubic /GrayImageResolution 300 /GrayImageDepth -1 /GrayImageMinDownsampleDepth 2 /GrayImageDownsampleThreshold 1.50000 /EncodeGrayImages true /GrayImageFilter /DCTEncode /AutoFilterGrayImages true /GrayImageAutoFilterStrategy /JPEG /GrayACSImageDict << /QFactor 0.15 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /GrayImageDict << /QFactor 0.15 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /JPEG2000GrayACSImageDict << /TileWidth 256 /TileHeight 256 /Quality 30 >> /JPEG2000GrayImageDict << /TileWidth 256 /TileHeight 256 /Quality 30 >> /AntiAliasMonoImages false /CropMonoImages true /MonoImageMinResolution 1200 /MonoImageMinResolutionPolicy /OK /DownsampleMonoImages true /MonoImageDownsampleType /Bicubic /MonoImageResolution 1200 /MonoImageDepth -1 /MonoImageDownsampleThreshold 1.50000 /EncodeMonoImages true /MonoImageFilter /CCITTFaxEncode /MonoImageDict << /K -1 >> /AllowPSXObjects false /CheckCompliance [ /None ] /PDFX1aCheck false /PDFX3Check false /PDFXCompliantPDFOnly false /PDFXNoTrimBoxError true /PDFXTrimBoxToMediaBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXSetBleedBoxToMediaBox true /PDFXBleedBoxToTrimBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXOutputIntentProfile () /PDFXOutputConditionIdentifier () /PDFXOutputCondition () /PDFXRegistryName () /PDFXTrapped /False /CreateJDFFile false /Description << /ARA <FEFF06270633062A062E062F0645002006470630064700200627064406250639062F0627062F0627062A002006440625064606340627062100200648062B062706260642002000410064006F00620065002000500044004600200645062A064806270641064206290020064406440637062806270639062900200641064A00200627064406450637062706280639002006300627062A0020062F0631062C0627062A002006270644062C0648062F0629002006270644063906270644064A0629061B0020064A06450643064600200641062A062D00200648062B0627062606420020005000440046002006270644064506460634062306290020062806270633062A062E062F062706450020004100630072006F0062006100740020064800410064006F006200650020005200650061006400650072002006250635062F0627063100200035002E0030002006480627064406250635062F062706310627062A0020062706440623062D062F062B002E0635062F0627063100200035002E0030002006480627064406250635062F062706310627062A0020062706440623062D062F062B002E> /BGR <FEFF04180437043f043e043b043704320430043904420435002004420435043704380020043d0430044104420440043e0439043a0438002c00200437043000200434043000200441044a0437043404300432043004420435002000410064006f00620065002000500044004600200434043e043a0443043c0435043d04420438002c0020043c0430043a04410438043c0430043b043d043e0020043f044004380433043e04340435043d04380020043704300020043204380441043e043a043e043a0430044704350441044204320435043d0020043f04350447043004420020043704300020043f044004350434043f0435044704300442043d04300020043f043e04340433043e0442043e0432043a0430002e002000200421044a04370434043004340435043d043804420435002000500044004600200434043e043a0443043c0435043d044204380020043c043e0433043004420020043404300020044104350020043e0442043204300440044f0442002004410020004100630072006f00620061007400200438002000410064006f00620065002000520065006100640065007200200035002e00300020043800200441043b0435043404320430044904380020043204350440044104380438002e> /CHS <FEFF4f7f75288fd94e9b8bbe5b9a521b5efa7684002000410064006f006200650020005000440046002065876863900275284e8e9ad88d2891cf76845370524d53705237300260a853ef4ee54f7f75280020004100630072006f0062006100740020548c002000410064006f00620065002000520065006100640065007200200035002e003000204ee553ca66f49ad87248672c676562535f00521b5efa768400200050004400460020658768633002> /CHT <FEFF4f7f752890194e9b8a2d7f6e5efa7acb7684002000410064006f006200650020005000440046002065874ef69069752865bc9ad854c18cea76845370524d5370523786557406300260a853ef4ee54f7f75280020004100630072006f0062006100740020548c002000410064006f00620065002000520065006100640065007200200035002e003000204ee553ca66f49ad87248672c4f86958b555f5df25efa7acb76840020005000440046002065874ef63002> /CZE <FEFF005400610074006f0020006e006100730074006100760065006e00ed00200070006f0075017e0069006a007400650020006b0020007600790074007600e101590065006e00ed00200064006f006b0075006d0065006e0074016f002000410064006f006200650020005000440046002c0020006b00740065007200e90020007300650020006e0065006a006c00e90070006500200068006f006400ed002000700072006f0020006b00760061006c00690074006e00ed0020007400690073006b00200061002000700072006500700072006500730073002e002000200056007900740076006f01590065006e00e900200064006f006b0075006d0065006e007400790020005000440046002000620075006400650020006d006f017e006e00e90020006f007400650076015900ed007400200076002000700072006f006700720061006d0065006300680020004100630072006f00620061007400200061002000410064006f00620065002000520065006100640065007200200035002e0030002000610020006e006f0076011b006a016100ed00630068002e> /DAN <FEFF004200720075006700200069006e0064007300740069006c006c0069006e006700650072006e0065002000740069006c0020006100740020006f007000720065007400740065002000410064006f006200650020005000440046002d0064006f006b0075006d0065006e007400650072002c0020006400650072002000620065006400730074002000650067006e006500720020007300690067002000740069006c002000700072006500700072006500730073002d007500640073006b007200690076006e0069006e00670020006100660020006800f8006a0020006b00760061006c0069007400650074002e0020004400650020006f007000720065007400740065006400650020005000440046002d0064006f006b0075006d0065006e0074006500720020006b0061006e002000e50062006e00650073002000690020004100630072006f00620061007400200065006c006c006500720020004100630072006f006200610074002000520065006100640065007200200035002e00300020006f00670020006e0079006500720065002e> /DEU <FEFF00560065007200770065006e00640065006e0020005300690065002000640069006500730065002000450069006e007300740065006c006c0075006e00670065006e0020007a0075006d002000450072007300740065006c006c0065006e00200076006f006e002000410064006f006200650020005000440046002d0044006f006b0075006d0065006e00740065006e002c00200076006f006e002000640065006e0065006e002000530069006500200068006f006300680077006500720074006900670065002000500072006500700072006500730073002d0044007200750063006b0065002000650072007a0065007500670065006e0020006d00f60063006800740065006e002e002000450072007300740065006c006c007400650020005000440046002d0044006f006b0075006d0065006e007400650020006b00f6006e006e0065006e0020006d006900740020004100630072006f00620061007400200075006e0064002000410064006f00620065002000520065006100640065007200200035002e00300020006f0064006500720020006800f600680065007200200067006500f600660066006e00650074002000770065007200640065006e002e> /ESP <FEFF005500740069006c0069006300650020006500730074006100200063006f006e0066006900670075007200610063006900f3006e0020007000610072006100200063007200650061007200200064006f00630075006d0065006e0074006f00730020005000440046002000640065002000410064006f0062006500200061006400650063007500610064006f00730020007000610072006100200069006d0070007200650073006900f3006e0020007000720065002d0065006400690074006f007200690061006c00200064006500200061006c00740061002000630061006c0069006400610064002e002000530065002000700075006500640065006e00200061006200720069007200200064006f00630075006d0065006e0074006f00730020005000440046002000630072006500610064006f007300200063006f006e0020004100630072006f006200610074002c002000410064006f00620065002000520065006100640065007200200035002e003000200079002000760065007200730069006f006e0065007300200070006f00730074006500720069006f007200650073002e> /ETI <FEFF004b00610073007500740061006700650020006e0065006900640020007300e4007400740065006900640020006b00760061006c006900740065006500740073006500200074007200fc006b006900650065006c007300650020007000720069006e00740069006d0069007300650020006a0061006f006b007300200073006f00620069006c0069006b0065002000410064006f006200650020005000440046002d0064006f006b0075006d0065006e00740069006400650020006c006f006f006d006900730065006b0073002e00200020004c006f006f0064007500640020005000440046002d0064006f006b0075006d0065006e00740065002000730061006100740065002000610076006100640061002000700072006f006700720061006d006d006900640065006700610020004100630072006f0062006100740020006e0069006e0067002000410064006f00620065002000520065006100640065007200200035002e00300020006a00610020007500750065006d006100740065002000760065007200730069006f006f006e00690064006500670061002e000d000a> /FRA <FEFF005500740069006c006900730065007a00200063006500730020006f007000740069006f006e00730020006100660069006e00200064006500200063007200e900650072002000640065007300200064006f00630075006d0065006e00740073002000410064006f00620065002000500044004600200070006f0075007200200075006e00650020007100750061006c0069007400e90020006400270069006d007000720065007300730069006f006e00200070007200e9007000720065007300730065002e0020004c0065007300200064006f00630075006d0065006e00740073002000500044004600200063007200e900e90073002000700065007500760065006e0074002000ea0074007200650020006f007500760065007200740073002000640061006e00730020004100630072006f006200610074002c002000610069006e00730069002000710075002700410064006f00620065002000520065006100640065007200200035002e0030002000650074002000760065007200730069006f006e007300200075006c007400e90072006900650075007200650073002e> /GRE <FEFF03a703c103b703c303b903bc03bf03c003bf03b903ae03c303c403b5002003b103c503c403ad03c2002003c403b903c2002003c103c503b803bc03af03c303b503b903c2002003b303b903b1002003bd03b1002003b403b703bc03b903bf03c503c103b303ae03c303b503c403b5002003ad03b303b303c103b103c603b1002000410064006f006200650020005000440046002003c003bf03c5002003b503af03bd03b103b9002003ba03b103c42019002003b503be03bf03c703ae03bd002003ba03b103c403ac03bb03bb03b703bb03b1002003b303b903b1002003c003c103bf002d03b503ba03c403c503c003c903c403b903ba03ad03c2002003b503c103b303b103c303af03b503c2002003c503c803b703bb03ae03c2002003c003bf03b903cc03c403b703c403b103c2002e0020002003a403b10020005000440046002003ad03b303b303c103b103c603b1002003c003bf03c5002003ad03c703b503c403b5002003b403b703bc03b903bf03c503c103b303ae03c303b503b9002003bc03c003bf03c103bf03cd03bd002003bd03b1002003b103bd03bf03b903c703c403bf03cd03bd002003bc03b5002003c403bf0020004100630072006f006200610074002c002003c403bf002000410064006f00620065002000520065006100640065007200200035002e0030002003ba03b103b9002003bc03b503c403b103b303b503bd03ad03c303c403b503c103b503c2002003b503ba03b403cc03c303b503b903c2002e> /HEB <FEFF05D405E905EA05DE05E905D5002005D105D405D205D305E805D505EA002005D005DC05D4002005DB05D305D9002005DC05D905E605D505E8002005DE05E105DE05DB05D9002000410064006F006200650020005000440046002005D405DE05D505EA05D005DE05D905DD002005DC05D405D305E405E105EA002005E705D305DD002D05D305E405D505E1002005D005D905DB05D505EA05D905EA002E002005DE05E105DE05DB05D90020005000440046002005E905E005D505E605E805D5002005E005D905EA05E005D905DD002005DC05E405EA05D905D705D4002005D105D005DE05E605E205D505EA0020004100630072006F006200610074002005D5002D00410064006F00620065002000520065006100640065007200200035002E0030002005D505D205E805E105D005D505EA002005DE05EA05E705D305DE05D505EA002005D905D505EA05E8002E05D005DE05D905DD002005DC002D005000440046002F0058002D0033002C002005E205D905D905E005D5002005D105DE05D305E805D905DA002005DC05DE05E905EA05DE05E9002005E905DC0020004100630072006F006200610074002E002005DE05E105DE05DB05D90020005000440046002005E905E005D505E605E805D5002005E005D905EA05E005D905DD002005DC05E405EA05D905D705D4002005D105D005DE05E605E205D505EA0020004100630072006F006200610074002005D5002D00410064006F00620065002000520065006100640065007200200035002E0030002005D505D205E805E105D005D505EA002005DE05EA05E705D305DE05D505EA002005D905D505EA05E8002E> /HRV (Za stvaranje Adobe PDF dokumenata najpogodnijih za visokokvalitetni ispis prije tiskanja koristite ove postavke. Stvoreni PDF dokumenti mogu se otvoriti Acrobat i Adobe Reader 5.0 i kasnijim verzijama.) /HUN <FEFF004b0069007600e1006c00f30020006d0069006e0151007300e9006701710020006e0079006f006d00640061006900200065006c0151006b00e90073007a00ed007401510020006e0079006f006d00740061007400e100730068006f007a0020006c006500670069006e006b00e1006200620020006d0065006700660065006c0065006c0151002000410064006f00620065002000500044004600200064006f006b0075006d0065006e00740075006d006f006b0061007400200065007a0065006b006b0065006c0020006100200062006500e1006c006c00ed007400e10073006f006b006b0061006c0020006b00e90073007a00ed0074006800650074002e0020002000410020006c00e90074007200650068006f007a006f00740074002000500044004600200064006f006b0075006d0065006e00740075006d006f006b00200061007a0020004100630072006f006200610074002000e9007300200061007a002000410064006f00620065002000520065006100640065007200200035002e0030002c0020007600610067007900200061007a002000610074007400f3006c0020006b00e9007301510062006200690020007600650072007a006900f3006b006b0061006c0020006e00790069007400680061007400f3006b0020006d00650067002e> /ITA <FEFF005500740069006c0069007a007a006100720065002000710075006500730074006500200069006d0070006f007300740061007a0069006f006e00690020007000650072002000630072006500610072006500200064006f00630075006d0065006e00740069002000410064006f00620065002000500044004600200070006900f900200061006400610074007400690020006100200075006e00610020007000720065007300740061006d0070006100200064006900200061006c007400610020007100750061006c0069007400e0002e0020004900200064006f00630075006d0065006e007400690020005000440046002000630072006500610074006900200070006f00730073006f006e006f0020006500730073006500720065002000610070006500720074006900200063006f006e0020004100630072006f00620061007400200065002000410064006f00620065002000520065006100640065007200200035002e003000200065002000760065007200730069006f006e006900200073007500630063006500730073006900760065002e> /JPN <FEFF9ad854c18cea306a30d730ea30d730ec30b951fa529b7528002000410064006f0062006500200050004400460020658766f8306e4f5c6210306b4f7f75283057307e305930023053306e8a2d5b9a30674f5c62103055308c305f0020005000440046002030d530a130a430eb306f3001004100630072006f0062006100740020304a30883073002000410064006f00620065002000520065006100640065007200200035002e003000204ee5964d3067958b304f30533068304c3067304d307e305930023053306e8a2d5b9a306b306f30d530a930f330c8306e57cb30818fbc307f304c5fc59808306730593002> /KOR <FEFFc7740020c124c815c7440020c0acc6a9d558c5ec0020ace0d488c9c80020c2dcd5d80020c778c1c4c5d00020ac00c7a50020c801d569d55c002000410064006f0062006500200050004400460020bb38c11cb97c0020c791c131d569b2c8b2e4002e0020c774b807ac8c0020c791c131b41c00200050004400460020bb38c11cb2940020004100630072006f0062006100740020bc0f002000410064006f00620065002000520065006100640065007200200035002e00300020c774c0c1c5d0c11c0020c5f40020c2180020c788c2b5b2c8b2e4002e> /LTH <FEFF004e006100750064006f006b0069007400650020016100690075006f007300200070006100720061006d006500740072007500730020006e006f0072011700640061006d00690020006b0075007200740069002000410064006f00620065002000500044004600200064006f006b0075006d0065006e007400750073002c0020006b00750072006900650020006c0061006200690061007500730069006100690020007000720069007400610069006b007900740069002000610075006b01610074006f00730020006b006f006b007900620117007300200070006100720065006e006700740069006e00690061006d00200073007000610075007300640069006e0069006d00750069002e0020002000530075006b0075007200740069002000500044004600200064006f006b0075006d0065006e007400610069002000670061006c006900200062016b007400690020006100740069006400610072006f006d00690020004100630072006f006200610074002000690072002000410064006f00620065002000520065006100640065007200200035002e0030002000610072002000760117006c00650073006e0117006d00690073002000760065007200730069006a006f006d00690073002e> /LVI <FEFF0049007a006d0061006e0074006f006a00690065007400200161006f00730020006900650073007400610074012b006a0075006d00750073002c0020006c0061006900200076006500690064006f00740075002000410064006f00620065002000500044004600200064006f006b0075006d0065006e007400750073002c0020006b006100730020006900720020012b00700061016100690020007000690065006d01130072006f00740069002000610075006700730074006100730020006b00760061006c0069007401010074006500730020007000690072006d007300690065007300700069006501610061006e006100730020006400720075006b00610069002e00200049007a0076006500690064006f006a006900650074002000500044004600200064006f006b0075006d0065006e007400750073002c0020006b006f002000760061007200200061007400760113007200740020006100720020004100630072006f00620061007400200075006e002000410064006f00620065002000520065006100640065007200200035002e0030002c0020006b0101002000610072012b00200074006f0020006a00610075006e0101006b0101006d002000760065007200730069006a0101006d002e> /NLD (Gebruik deze instellingen om Adobe PDF-documenten te maken die zijn geoptimaliseerd voor prepress-afdrukken van hoge kwaliteit. De gemaakte PDF-documenten kunnen worden geopend met Acrobat en Adobe Reader 5.0 en hoger.) /NOR <FEFF004200720075006b00200064006900730073006500200069006e006e007300740069006c006c0069006e00670065006e0065002000740069006c002000e50020006f0070007000720065007400740065002000410064006f006200650020005000440046002d0064006f006b0075006d0065006e00740065007200200073006f006d00200065007200200062006500730074002000650067006e0065007400200066006f00720020006600f80072007400720079006b006b0073007500740073006b00720069006600740020006100760020006800f800790020006b00760061006c0069007400650074002e0020005000440046002d0064006f006b0075006d0065006e00740065006e00650020006b0061006e002000e50070006e00650073002000690020004100630072006f00620061007400200065006c006c00650072002000410064006f00620065002000520065006100640065007200200035002e003000200065006c006c00650072002000730065006e006500720065002e> /POL <FEFF0055007300740061007700690065006e0069006100200064006f002000740077006f0072007a0065006e0069006100200064006f006b0075006d0065006e007400f300770020005000440046002000700072007a0065007a006e00610063007a006f006e00790063006800200064006f002000770079006400720075006b00f30077002000770020007700790073006f006b00690065006a0020006a0061006b006f015b00630069002e002000200044006f006b0075006d0065006e0074007900200050004400460020006d006f017c006e00610020006f007400770069006500720061010700200077002000700072006f006700720061006d006900650020004100630072006f00620061007400200069002000410064006f00620065002000520065006100640065007200200035002e0030002000690020006e006f00770073007a0079006d002e> /PTB <FEFF005500740069006c0069007a006500200065007300730061007300200063006f006e00660069006700750072006100e700f50065007300200064006500200066006f0072006d00610020006100200063007200690061007200200064006f00630075006d0065006e0074006f0073002000410064006f0062006500200050004400460020006d00610069007300200061006400650071007500610064006f00730020007000610072006100200070007200e9002d0069006d0070007200650073007300f50065007300200064006500200061006c007400610020007100750061006c00690064006100640065002e0020004f007300200064006f00630075006d0065006e0074006f00730020005000440046002000630072006900610064006f007300200070006f00640065006d0020007300650072002000610062006500720074006f007300200063006f006d0020006f0020004100630072006f006200610074002000650020006f002000410064006f00620065002000520065006100640065007200200035002e0030002000650020007600650072007300f50065007300200070006f00730074006500720069006f007200650073002e> /RUM <FEFF005500740069006c0069007a00610163006900200061006300650073007400650020007300650074010300720069002000700065006e007400720075002000610020006300720065006100200064006f00630075006d0065006e00740065002000410064006f006200650020005000440046002000610064006500630076006100740065002000700065006e0074007200750020007400690070010300720069007200650061002000700072006500700072006500730073002000640065002000630061006c006900740061007400650020007300750070006500720069006f006100720103002e002000200044006f00630075006d0065006e00740065006c00650020005000440046002000630072006500610074006500200070006f00740020006600690020006400650073006300680069007300650020006300750020004100630072006f006200610074002c002000410064006f00620065002000520065006100640065007200200035002e00300020015f00690020007600650072007300690075006e0069006c006500200075006c0074006500720069006f006100720065002e> /RUS <FEFF04180441043f043e043b044c04370443043904420435002004340430043d043d044b04350020043d0430044104420440043e0439043a043800200434043b044f00200441043e043704340430043d0438044f00200434043e043a0443043c0435043d0442043e0432002000410064006f006200650020005000440046002c0020043c0430043a04410438043c0430043b044c043d043e0020043f043e04340445043e0434044f04490438044500200434043b044f00200432044b0441043e043a043e043a0430044704350441044204320435043d043d043e0433043e00200434043e043f0435044704300442043d043e0433043e00200432044b0432043e04340430002e002000200421043e043704340430043d043d044b04350020005000440046002d0434043e043a0443043c0435043d0442044b0020043c043e0436043d043e0020043e0442043a0440044b043204300442044c002004410020043f043e043c043e0449044c044e0020004100630072006f00620061007400200438002000410064006f00620065002000520065006100640065007200200035002e00300020043800200431043e043b043504350020043f043e04370434043d043804450020043204350440044104380439002e> /SKY <FEFF0054006900650074006f0020006e006100730074006100760065006e0069006100200070006f0075017e0069007400650020006e00610020007600790074007600e100720061006e0069006500200064006f006b0075006d0065006e0074006f0076002000410064006f006200650020005000440046002c0020006b0074006f007200e90020007300610020006e0061006a006c0065007001610069006500200068006f0064006900610020006e00610020006b00760061006c00690074006e00fa00200074006c0061010d00200061002000700072006500700072006500730073002e00200056007900740076006f00720065006e00e900200064006f006b0075006d0065006e007400790020005000440046002000620075006400650020006d006f017e006e00e90020006f00740076006f00720069016500200076002000700072006f006700720061006d006f006300680020004100630072006f00620061007400200061002000410064006f00620065002000520065006100640065007200200035002e0030002000610020006e006f0076016100ed00630068002e> /SLV <FEFF005400650020006e006100730074006100760069007400760065002000750070006f0072006100620069007400650020007a00610020007500730074007600610072006a0061006e006a006500200064006f006b0075006d0065006e0074006f0076002000410064006f006200650020005000440046002c0020006b006900200073006f0020006e0061006a007000720069006d00650072006e0065006a016100690020007a00610020006b0061006b006f0076006f00730074006e006f0020007400690073006b0061006e006a00650020007300200070007200690070007200610076006f0020006e00610020007400690073006b002e00200020005500730074007600610072006a0065006e006500200064006f006b0075006d0065006e0074006500200050004400460020006a00650020006d006f0067006f010d00650020006f0064007000720065007400690020007a0020004100630072006f00620061007400200069006e002000410064006f00620065002000520065006100640065007200200035002e003000200069006e0020006e006f00760065006a01610069006d002e> /SUO <FEFF004b00e40079007400e40020006e00e40069007400e4002000610073006500740075006b007300690061002c0020006b0075006e0020006c0075006f00740020006c00e400680069006e006e00e4002000760061006100740069007600610061006e0020007000610069006e006100740075006b00730065006e002000760061006c006d0069007300740065006c00750074007900f6006800f6006e00200073006f00700069007600690061002000410064006f0062006500200050004400460020002d0064006f006b0075006d0065006e007400740065006a0061002e0020004c0075006f0064007500740020005000440046002d0064006f006b0075006d0065006e00740069007400200076006f0069006400610061006e0020006100760061007400610020004100630072006f0062006100740069006c006c00610020006a0061002000410064006f00620065002000520065006100640065007200200035002e0030003a006c006c00610020006a006100200075007500640065006d006d0069006c006c0061002e> /SVE <FEFF0041006e007600e4006e00640020006400650020006800e4007200200069006e0073007400e4006c006c006e0069006e006700610072006e00610020006f006d002000640075002000760069006c006c00200073006b006100700061002000410064006f006200650020005000440046002d0064006f006b0075006d0065006e007400200073006f006d002000e400720020006c00e4006d0070006c0069006700610020006600f60072002000700072006500700072006500730073002d007500740073006b00720069006600740020006d006500640020006800f600670020006b00760061006c0069007400650074002e002000200053006b006100700061006400650020005000440046002d0064006f006b0075006d0065006e00740020006b0061006e002000f600700070006e00610073002000690020004100630072006f0062006100740020006f00630068002000410064006f00620065002000520065006100640065007200200035002e00300020006f00630068002000730065006e006100720065002e> /TUR <FEFF005900fc006b00730065006b0020006b0061006c006900740065006c0069002000f6006e002000790061007a006401310072006d00610020006200610073006b013100730131006e006100200065006e0020006900790069002000750079006100620069006c006500630065006b002000410064006f006200650020005000440046002000620065006c00670065006c0065007200690020006f006c0075015f007400750072006d0061006b0020006900e70069006e00200062007500200061007900610072006c0061007201310020006b0075006c006c0061006e0131006e002e00200020004f006c0075015f0074007500720075006c0061006e0020005000440046002000620065006c00670065006c0065007200690020004100630072006f006200610074002000760065002000410064006f00620065002000520065006100640065007200200035002e003000200076006500200073006f006e0072006100730131006e00640061006b00690020007300fc007200fc006d006c00650072006c00650020006100e70131006c006100620069006c00690072002e> /UKR <FEFF04120438043a043e0440043804410442043e043204430439044204350020044604560020043f043004400430043c043504420440043800200434043b044f0020044104420432043e04400435043d043d044f00200434043e043a0443043c0435043d044204560432002000410064006f006200650020005000440046002c0020044f043a04560020043d04300439043a04400430044904350020043f045604340445043e0434044f0442044c00200434043b044f0020043204380441043e043a043e044f043a04560441043d043e0433043e0020043f0435044004350434043404400443043a043e0432043e0433043e0020043404400443043a0443002e00200020042104420432043e04400435043d045600200434043e043a0443043c0435043d0442043800200050004400460020043c043e0436043d04300020043204560434043a0440043804420438002004430020004100630072006f006200610074002004420430002000410064006f00620065002000520065006100640065007200200035002e0030002004300431043e0020043f04560437043d04560448043e04570020043204350440044104560457002e> /ENU (Use these settings to create Adobe PDF documents best suited for high-quality prepress printing. Created PDF documents can be opened with Acrobat and Adobe Reader 5.0 and later.) >> /Namespace [ (Adobe) (Common) (1.0) ] /OtherNamespaces [ << /AsReaderSpreads false /CropImagesToFrames true /ErrorControl /WarnAndContinue /FlattenerIgnoreSpreadOverrides false /IncludeGuidesGrids false /IncludeNonPrinting false /IncludeSlug false /Namespace [ (Adobe) (InDesign) (4.0) ] /OmitPlacedBitmaps false /OmitPlacedEPS false /OmitPlacedPDF false /SimulateOverprint /Legacy >> << /AddBleedMarks false /AddColorBars false /AddCropMarks false /AddPageInfo false /AddRegMarks false /ConvertColors /ConvertToCMYK /DestinationProfileName () /DestinationProfileSelector /DocumentCMYK /Downsample16BitImages true /FlattenerPreset << /PresetSelector /MediumResolution >> /FormElements false /GenerateStructure false /IncludeBookmarks false /IncludeHyperlinks false /IncludeInteractive false /IncludeLayers false /IncludeProfiles false /MultimediaHandling /UseObjectSettings /Namespace [ (Adobe) (CreativeSuite) (2.0) ] /PDFXOutputIntentProfileSelector /DocumentCMYK /PreserveEditing true /UntaggedCMYKHandling /LeaveUntagged /UntaggedRGBHandling /UseDocumentProfile /UseDocumentBleed false >> ] >> setdistillerparams << /HWResolution [2400 2400] /PageSize [612.000 792.000] >> setpagedevice