автореферат диссертации по информатике, вычислительной технике и управлению, 05.13.11, диссертация на тему:Унифицированная реализация системы типов языка программирования баз данных

кандидата технических наук
Коситов, Валерий Александрович
город
Новосибирск
год
1990
специальность ВАК РФ
05.13.11
Автореферат по информатике, вычислительной технике и управлению на тему «Унифицированная реализация системы типов языка программирования баз данных»

Автореферат диссертации по теме "Унифицированная реализация системы типов языка программирования баз данных"

АКАДЕМИЯ НАУК СССР ОРДЕНА ЛЕНИНА СИБИРСКОЕ ОТДЕЛЕНИЕ Вычислительной центр

На правах рукописи Коситов Валерий Александрович

УДК 681.3

Унифицированная реализация системы типов языка программирования баз данных

05.13.11 - Математическое и программное обеспечение вычислительных машин, комплексов, систем и сетей

АВТОРЕФЕРАТ диссертации на соискание ученой степени кандидата технических наук

Новосибирск - 1990

Работа выполнена в Вычислительном центре Сибирского отделения АН СССР

Научный руководитель - кандидат физико-математических

наук А. Е Замулин

Официальные оппоненты - доктор технических наук

Г. Д. Чинин

кандидат физико-математических наук Г. Г. Степанов

Ведущее предприятие - НИИ Математики и Механики

Ленинградского Государственного Университета

Защита диссертации состоится " 10 " сьпру.лА 1990г. в час. на заседании Специализированного совета

К. 002.10.02 Вычислительного центра Сибирского отделения АН СССР по адресу

630090, Новосибирск-90, пр. акад. Лаврентьева, 6.

С диссертацией можно ознакомиться в читальном зале отделения ГПНТБ СО АН СССР (пр. академика Лаврентьева. 6).

Автореферат разослан " б1 " ссихргуьО.1990г.

Ученый секретарь совета, л г)

к.ф.-м. н. (/{Ъ^ —-А. В. Замулин

. - • -- j ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ

тдг^. ..Актуальность работы. Все более широкое проникновение ин-~ --"формационных технологий во все сферы человеческой деятельности неразрывно связано с массовым использованием вычислительной техники пользователями-непрограммистами. Как следствие этого, особое значение приобретают задачи создания высокоинтеллектуальных программных систем. Исследования, проведенные в диссертационной работе, обусловлены кеобходи мостью решения проблем, с которыми столкнулись разработчики таких программных продуктов.

Основная проблема производства современного программного обеспечения вытекает из того, что сложность его разработки и сопровождения остается слишком высокой, а качество созданных систем - слишком низким. Одна из попыток решить задачу увеличения производительности и повышения качества труда программиста связана с использованием принципа абстракции и, з частности, концепции абстрактных типов данных (АТД). Введение понятий АТД в языки программирования позволяет создавать надежные, легко понимаемые и модифицируемые программы. Первые языки программирования с АТД появились в середине 70-х годов. Наиболее известным среди них является язык Clu. Многие идеи АТД впитали в себя такие известные языки программирования как Kfodula-2 и Ada. Однако до сих пор языки программирования, поддерживающие весь набор средств работы с АТД, не получили широкого распространения в связи с отсутствием эффективных методов их реализации.

Особенно остро проблема разработки качественных программных систем стоит для задач обработки данных. Это обусловлено долговременным использованием подобных программных продуктов и повышенными требованиями к их надежности.

В связи с выше изложенным является актуальной задача создания системы программирования баз данных, которая может быть использована для разработки информационных систем, основанных на различных моделях, с применением технологии абстрактных типов данных.

Цель работы. Основной целью исследований является разработка транслятора для языка программирования баз данных, содержащего полный набор средств работы с АТД. Для ее достижения необходимо решить следующие задачи:

- 3 -

- анализ системы типов языка про? раммирования баз данных Атлант;

- разработка структура транслятора;

- разработка унифицированного представления объектов базы данных и объектов программы;

- разработка унифицированного представления произвольных и стандартных типов данных;

- разработка ыэтодов трансляции произвольных типов данных;

- разработка методов трансляции таких ванных элементов АТД как параметризованные тшш данных и сканирующий оператор;

- разработка методов трансляции описания схема базы данных;

- разработка иэтодов трансляции присладной программы в контексте разделов базы данных.

Диссертационная работа выполнена в ра^чах плана НИР Щ СО АН СССР "Разрзбо-йсз. принципов создания высокопроизводительных асинхронных развиваемых систем и средств программировав ыш для них" (М ГР 81032353).

Еяучная попкзно. работы. В работе предлопаны методы транс-лящш кзссов програпшрованш баз данных с абстраотш&ш ти-пслз; данных и языков програхашрования баз данных. Предложению цотоды 61ае: использованы при реализации систеыы П1»гра1:.::роЕан1Ы баз данных Атлакт-СЫ, предназначенной для создания на ЗШ Си-4 баз данных различных моделей с использованием технологии абсгректни: типов данных.

и^^оКТИчвиКаЯ ПйННООхЬ;

- предлогэннкыэ методы трансляции могут быть использованы при создании трансляторов для языков программирования с АТД и языков программирования баз данных;

- реализованная систем программирования баз данных Ат-лант-СМ моюэт использоваться для создания широкого круга информационных систем, основывающихся на любых моделях данных.

Разработанная система ыогэт быть рекомендованы к использованию во всех организациях страны, зашааицихся разработкой, внедрением и практической эксплуатацией баз данных в различных областях народного хозяйства.

Публикации и апробация работа По теме диссертации было опубликовано 5 работ. Основные положения диссертации обсуждались на семинарах и всесоюзных конференциях, в том числе

- 4 -

Всесоюзной конференции "Методы трансляции и конструирования программ" (Новосибирск, 1988), Всесоюзной конференции "Системы управления базам! данных и базами знаний" (Калинин, 1989).

Структура и объем работы. Диссертация состоит из веяния, трех глав, заключения и списка литературы (121 наименование). Основной текст диссертации излокэн на 105 страницах, вклвчащих 17 рисунков.

КРАТКОЙ СОДЕРЕАШЕ РАБОТУ

Во введении проведен [фатгой шгалкз состояния исследований в области п:;ы::оз программирования с АТД и языков программирована баз данных, обоснована актуальность теш иосле-довая, странна структура и содержание диссертационной работы.

В первой глава определяется базовый наСор средств работы с АТД, которые долген предоставлять соврзг-эгтай язи: программирования. Он включает

- конкретные ЛТД;

- пара>:зтркзоватгнь'.з (родовые) ЛТД;

- итераторы (аттракция управления, которая позволяем осуществлять псэле^энтпь'Л перебор абстрактных сЗтеетоъ);

- генераторы абстраетных объектов;

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

- библиотеки абстрксций.

В той или гаюй степени перечисленные средства ткется в таких языках, как Clu (Клу), Ada (/да), Alphard, Euolld, Rassel, itodula-2 и другие. Существуют несколько подходов к языковой реализации АТД, которые мотяо классифицировать слэ-дукцнм образом:

- использование нзкросредств;

- моделирование элементов АТД с псющьа сущэетвущах языковых средств;

- создание новых языков программирован!® с АТД.

Хотя первыо дна подхода являются кг::болое прости-! з реализации, их пирокоэ использование весы/л затрудпзно из-за бодьенх ограничений, накладываемая имя. на работу о ЛТД. Поэте:.:*/ большое значение приобретает разработка к ргзглгзмул -

- 5 -

новых языков программирования с АТД, одним из которых является язык Атлант.

В качестве языков, на примере которых проводится анализ методов реализации АТД, выбраны языки программирования Клу и Ада Это обусловлено тем, что в настоящее время они являются наиболее распространенными языками программирования, имеющими возможность работы с АТД и предназначеными для создания реальных программ. В главе описываются способы построения АТД в этих языках и методы их реализации на примерах различных компиляторов.

В главе проведен анализ следующих проблем реализации языков программирования с АТД:

- обеспечение инкапсуляции;

- реализация параметризованных модулей;

- реализация итераторов;

- реализация исключительных ситуаций;

- реализация контроля типов:

- организация библиотеки абстракций.

Рассмотрим их более подробно.

1. Обеспечение инкапсуляции. Инкапсуляция т это скрытие от пользователя внутреннего представления типа данных. Для реализации этого механизма необходимо решить две задачи:

- обеспечение инкапсуляции при трансляции программы;

- обеспечение инкапсуляции при исполнении программы.

Для их решения могут быть использованы два подхода. Шр-вый состоит в программном разделении представления типа на спецификацию и реализацию и санкционировании доступа к операциям типа только через его спецификации. Второй подход основывается на использовании стандартных системных средств (модули системы Эльбрус), фи решении второй задачи необходимо определить какие типы данных и в какой Форш переносить в объектную программу. В реализации Клу ка ЭВМ Эльбрус в „ объектную программу переносилась информация о всех типах данных, определенных в исходной программе. Это связано с наличием в языке типа АИУ, который позволяет динамически изменять тип переменной. Такой подход имеет ряд недостатков, снижающих эффективность объектной программы.

2. Реализация параметризованных модулей. Здесь необходимо выделить две проблемы:

- как осуществлять конкретизацию родовых модулей;

- как распределять память под переменные родовых модулей, тип которых является параметром.

При решении первой задачи существуют два крайних подхода: либо всем конкретизациям параметризованного модуля соответствует единственное тело, либо каждой конкретизации параметризованного модуля соответствует свое тело. Первый подход был использован в трансляторе Клу-Эльбрус. Его преимущества заключаются в упрощении процесса трансляции за счет снижения эффективности рабочей программы. Использование второго подхода позволяет получить более эффективный код, что особенно важно при многократном использовании программы, поэтому он является более предпочтительным при организации транслятора с языка программирования баз данных. Если конкретизированное тело настраиваемого модуля может разделяться несколькими конкретизациями, то необходимо либо использовать некоторый механизм динамического распределения памяти, либо вводить ссылочную семантику переменных, что значительно усложняет организацию объектной программы.

3. Реализация итераторов. Как и при реализации параметризованных модулей здесь возможны два подхода:

- итератор оформляется в виде специальной подпрограммы, сохраняющей контекст предыдущего вызова;

- итератор реализуется с помощью некоторой формы макроподстановки.

Преимущества первого подхода аналогичны преимуществам того подхода к организации параметризованных модулей, когда всем конкретизациям соответствует единственное тело. Преимущество второго подхода состоит в возможности проведения более тонкой оптимизации кода.

4. Реализация исключительных ситуаций. В языках Клу и Ада принято решение, при котором возбуждение исключения связывается с некоторой функцией, а его обработка может проводиться в другом месте программы. Это потребовало введения в языки программирования описаний исключений, операторов возбуждения исключений и операторов их обработки. Следствием этого явилось появление следующих проблем реализации:

- обеспечение уникальности каждого исключения;

- организация эффективного поиска реакции на возбужденное

- 7 -

кскллчонкз.

Очевидно, что эффективная организация такого механизма возмогла лишь при наличии определенных системных средств ди-нам!1чзской поддержки.

5. Реализация контроля типов. Характерной чертой языков с АТД является возможность совмещения к.сн операций. При этом возникает проблема поиска описания данной операции. В языке Ада, например, для идентификации тела функции используются довольно сложные алгоритмы, основанные на анализе типов всех параштров и типа результата. В языке Глу используется более простой, но достаточно мощный по выразительности алгоритм, по которому принадлежность операщш определенному типу определяется либо по тшу перзого аргумента (в случае инфиксных операций), либо по префиксирувдэыу типу.

С. Организация библиотеки модулей. Необходимость организации некоторой библиотеки абстракций вызвана созиаг^-япз.м конц-зпцз! статкчоского контроля типов с принципом раз* дельной ¡»¡.аилящи. Тг:ше библиотеки используются в системах програ\ошро2ашш, основанных на языках Ада, Клу, 1Ьдула-2. При зто:.з необходим» решать следующие задачи: '

- разработка структуры библиотега;

- разработка представления 1шфор:.;ащш в библиотеке. ЗЬ-вздгюму наиболее оптимальным вариантом является использование стандартных системных средств, как это было сделано в системах Г-су-Эльбрус и Лда-Эяьбрус. Это позволяет организовать зф^екткгиуг с^ср.-гу программ. ияпиптшых на разных явках программирования, и воспользоваться всем сервисом, которой предоставляется системными утилитами.

Как видно из проведенного анализа е кастояцзе время не сущэствует иделыюго подхода к реализации элементов АТД. Есе рассмотренный способы рогения имеют свои недостатка Поэтому является актуальной задача разработки новых методов трансляции, позволяющих аффективно реализовать весь набор средств работы с АТД.

Во второй главе дается анализ основных свойств языка Атлант. Отличительной его чертой является наличие механизма определения произвольных (абстрактных) типов данных, механизма аварийных ситуаций, механизма типовой параметризации и возможности работы с долговременными данными.

- 8 -

Тип данных создается посредством конструктива типа, который состоит из двух частей: спецификации и реализации. Спецификация содержит Езю инфоркгрдгя об операциях ирл, необходимую для правильного их коксльзсвагш. Реализация, как правило, скрыта от лица, ис-гользуг^го данный тип, и со;;ер-яит значения атркбутоз кгтп и алгоркткл осэраций а.

Типы данных языка Атлант дй^тгся ка две категор'ш: стандарта» и прокззольнь'о. Споц»4$:а(аш!Я стгндарттак типов г.гн-ныз осуществляется разряеотчгяеьн язьсл, а их рс-алкзацкл -разработчиками систе1»| лрогра$гыйрсегяиз. И спецк&жацкл, и реализация произвольного тпза даклых осуществляются пользо-ватех-эм сгсгеьа прогртсгрэггяга.

С другой сторон« все каты даачых югео рг-здэд-ть пз дг-а к-гэссг: ¡tc?.g>0Trr.¿ г оодс:;^ как. sn»?

тернзует спределэЕгсо кгазстео значсшЛ Гс-г.этоП (игре;-ризованпкЗ) тип iiicr.TíCíEO »яа:-эогп • J я

требует 1Юнкрет;$гйЩЕ1 прспэдстгоу садсшя спглт;ппп его плрз,-ыэтрая

Яйык продостаггге? несколько íof-'> пшогк: ипл-лглгЛ ст-рагасстк прпвэтуа «госс1."!:1:еэдш ?кпов:

тст npocTOrtjnn: I сто?ктурпыа_2гл ! I

т:п1_рроц-здур;-] I конструкит.тжга ^гажI ограш!геншгЗ_тип_5Ег:поа I копотрукигцкчшч простой_тип ::» дгопиеский_ткп ! i

в6'-;зст!зэнеей_т;я1 ! лзторкыП_гг'л í

ТШ_ПЭР0Ч25СЛ0Н:!П S тип_0тре310.

структурный Tira :: - Т!гп_посяедователькостэй I

С1рОКОВЬЙ_ТИП I !

Т1;л_записи I тип_файлз. Значение типа ra лзбого icxcca »«огэт быть обознп^по г-о-которьм иденткфжатором в кезетрущая под пазваякэм еярэдэ-лэние Tima:

определили jrraia :: - ¡¡доптнфгпетгор -- тш; Произвольны.! тип определяется слэдуксза! образок ''ОДУЛЬ "С" спадав.операщйЦиша "3" НАЧАЛО ПР5ЛСТ тип; пакет;

КОНЕЦ;

Спецификация операций типа состоит из описания ик:эн операций

- 9 -

и их типов. После служебного слова ПРЕДСТ указывается тип, которым представляется при реализации конструируемый тип. Пакет содержит реализации специфицированных операций и некоторых других элементов, называемых скрытыми функциями и собственными подпрограммами.

Такие свойства языка Атлант как:

- возможность построения произвольных типов данных;

- потенциально неограниченное количество типов данных в программе или базе данных;

- возможность определения совмещенных имен операций;

- полный статический контроль типов,

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

Для того, чтобы создать приемлемый по размерам и по эффективности компилятор, необходимо применить принцип унификации, т. е. попытаться свести процесс трансляции к нескольким обобщенным алгоритмам. Последовательная поддержка этого принципа приводит к необходимости решения проблем, перечисленных ниже.

1. Унифицированное представление локальных и глобальных данных. Это позволяет снизить затраты на их преобразования как при трансляции, так и во время исполнения программы.

2. Унифицированное представление типов. Все типы данных языка Атлант создаются посредством конструктива типа данных и с этой точки зрения являются равноценными. Поэтому их представление в трансляторе в виде унифицированных модулей позволяет единообразно обрабатывать и стандартные и произвольные типы, что является особенно важным в связи с наличием в Атланте возможности создавать потенциально неограниченное количество типов данных.

3. Унифицированное представление типовой информации в ба-

- 10 -

ас данных и трансляторе. Поскольку в языке Атлант поддерживается принцип строгого статического контроля типов, то информация о типе некоторого объекта должна быть всегда доступна транслятору. Таким образом, база данных языка Атлант должна брать на себя функции библиотеки модулей, используемой в системах программирования, основанных на языках Клу или Ада.

4. Унифицированное представление таблицы имен и схемы базы данных. Это позволяет ускорить процесс загрузки описания схемы базы данных при трансляции программы.

5. Организация контроля типов. В отличие от языков Бояз и Ада в Атланте используется принцип структурной эквивалентности. Как следствие этого появляется неоходимость разработки алгоритма сравнения структур, представляющих типы данных. Поскольку язык Атлант позволяет создание неграниченного числа типов с совмещенными именами операций, то большое значение имеет разработка эффективного алгоритма идентификации операций.

6. Реализация механизма генераторов. Генераторы языка Атлант являются разновидностью синтаксических макросов. Они используются для реализации параметризованных произвольных типов данных и итераторов, выраженных в языке в форме сканирующего оператора. Поэтому особенно актуальна задача их эффективной реализации.

7. Реализация механизма исключительных ситуаций. В языке Атлант предлагается оригинальный способ обработки ошибок, основанный на таком свойстве языка, как возможность определения переменных типа функции или процедуры. Его особенностью является то, что вся обработка исключительных ситуаций сосредоточена в операциях типа. В главе проводится сравнение этого механизма с механизмом исключительных ситуаций языка Ада и делается вывод, что механизм аварийных функций языка Атлант по своей выразительной силе не уступает механизму аварийных ситуаций языка Ада, но при этом значительно проще в реализации.

8. Реализация произвольных типов данных. Поскольку ОС ДЕМОС не имеет системных средств обеспечения инкапсуляции, необходимо разработать программную поддержку этого механизма. Это может быть сделано на основе унифицированного представ- 1.1 -

ления веек типов данных в виде спецификации и реализации.

9. Представление глобальных процедур. Для того, чтобы не дублировать возможности СО естественно для сборки программы воспользоваться стандартным редактором связей. Как следствие этого, необходимо хранить тела глобальных процедур в файлах операционной системы. При этом возникают задачи обеспечения уникальности имен глобальных функций и обеспечения взаимнооднозначного отобрагапкя между значением функции, хранящимся в базе данных и файлом ОС, содержащим объектный код данной функции.

10. Тргшсглция прикладной программы в контексте базы данных. При этом необходимо рзшть две задачи:

- распределение паши: под объекты базы данных;

- организации сборки программы из глобальных процедур. Р&югаие в языке аппарата разделов, позволавцих указывать в ¡;ш:ом виде необходимые объекты из базы данных, к использование стандартного рэдакгора связей цое-всяяет эффективно организовать работу транслятора.

ТаклМ образом, 1Г=; видим, что система типов яги:га Атлант ст&зкт перед разработчиками транслятора ряд новых проблем.

Третья глава посвящзна описанию унифицированной реализации састеьзи типов в трансляторе с языка Атлант. Эго описание увятцваетсп с общей структурой транслятора и организацией его взаимодействия с базой данных. Особое внимание уделяется реализации такшс вагиых элементов язьпеа. кат. генераторы, спанирующий оператор, оператор над базой и произвольные типы данных.

Транслятор составляет одну из двух основных частой сиете-мы и служит для трансляции:

- прикладных программ пользователя;

- описания схеш базы данных.

В связи с необходимостью размещения компилятора в сравнительно небольшом объеме оперативной памяти (64 Еб) принята трехпроходкая схема трансляции. Задачей первого прохода является проворна синтаксический правильности исходного текста программы, редукция его к более простому виду. На втором проходе выполняется семантический анализ и формирование промежуточной программы, необходимой для генерации ассемблерного гада. На третьем проходе формируется ассемблерный код го- 12 -

ловной программы или глобальных процедур.

При реализации все типы языка Атлант разбивается на четыре группы:

- конкретные стандартные типы;

- родовые стандартные типы;

- конкретизированные родовые стандартные типы;

- конкретные произвольные типы.

Списание родовых произвольных типов осуществляется посредством механизма генераторов, поэтому для них не существует специального внутреннего представления. Типы первых двух групп образует пакет стандартных типов, инициализируются статически я хранятся з трансляторе в течение всей его работы, посколысу с их помощью строятся все остальные типы. Типы двух последних групп присутствуют в памяти транслятора в специальной таблице типов только в течение трансляции того блота програк>«и, где они описаны, а после окончания трансляции данного блока они уничтоглэтся. Организация такой стеганой схема позволяет ап?лчтелыю сократить пають, нэобходи-мую для хранения шфоркэцш сб описанных в программе типах данных.

Спецификация типа содержит паспорт и дескрипторы операций. Рдделениэ паспорта из спецификации п помещение в него лп^срмацип, необходимой для трансляции описаний и организации поиска операций, позволяет организовать унифицированную работу с тикая всех чэткрех групп. Дескриптор операции содержат всю информацию, небходимую для обращения к ней.

Реализация сперащт стандартного типа - это семантическая прогр-гу^а. которая фор'нрует соответствующие гады про:,:эгу-то'пой прографи. Реализация операции произвольного типа -зто процедура или функция на языке Атлант. При трансляции обращения к операнда! стандартного типа происходит вызов соответствующей семантической программы, а обращение к опера-цш произвольного типа преобразуется з вызов соответствующей подпрограммы.

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

- 13 -

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

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

Поскольку язык Атлант относится к классу языков типа Алгол, то при трансляции используются такие стандартные структуры данных, как таблица имен и магазин уровней: таблица имен служит для хранения описаний, а магазин уровней для управления стековой организацией трансляции. Однако наличие возможности определения в программе неограниченного числа типов требует введения для их хранения новых структур данных. Для этого в трансляторе организованы таблица типов и таблица адресов типов: первая хранит информацию о типах, описанных в программе, а вторая служит для организации ссылок на них.

Внутреннее представление описания идентификатора в трансляторе называется дескриптором. Особенностью языка Атлант является то, что используемые в программе идентификаторы ми-гут быть описаны на двух уровнях:

- идентификаторы, описанные в прикладной программы (локальные идентификаторы);

- идентификаторы, описанные в базе данных (глобальные идентификаторы).

Поскольку глобальные идентификаторы могут использоваться как при описании схемы базы данных, так и в операторе над базой, то таблица имен содержит дескрипторы трех видов:

- дескрипторы локальных данных;

- дескрипторы глобальных данных;

- дескрипторы оператора над базой.

- 14 -

Особенностью механизма исключительных ситуаций является то, что вся обработка исключительных ситуаций сосредоточена в операциях типа. Каждый тип имеет некоторый набор аварийных функций, используемых для обработки соответствующих исключительных ситуаций. Для стандартных типов этот набор определяется разработчиком языка, а для произвольных - пользователем системы программирования. В реализациях операций, при необходимости формируются обращения к соответствующим аварийным функциям. Если во время работы программы происходит вызов аварийной функции, то после этого в случае исправления ошибки управление возвращается на следующий оператор, иначе исполнение программы завершается с выдачей соответствующего аварийного сообщения.

Задачи контроля типов в данном трансляторе состоят в следующем:

- идентификация операций;

- проверка согласованности типов формальных и фактических параметров процедур и типов правой и левой частей оператора присваивания;

- проверка ограничений на типовые параметры генераторов.

В языке Атлант при разборе выражения применяется следующая стратегия поиска определяющего вхождения идентификатора:

- если идентификатор префиксирован некоторым типом, то он ищется в спецификации указанного типа данных;

- если префиксация отсутствует, то идентификатор ищется в таблице имен;

- »оли идентификатор не найден в таблице имен, но при этом он является именем функции (процедуры), тогда он ищется в спецификации типа первого операнда

В языке Атлант для проверки согласованности для стандартных типов используется принцип структурной эквивалентности. Все произвольные типы, созданные различными конструктивами типов данных, считаются различными.

Генераторы языка Атлант являются некоторой разновидностью синтаксических мшсроеов. При трансляции заголовка генератора формируется его тип, который содержит имена и типы формальных параметров и тип результата. При трансляции тела генератора проводится только контроль синтаксической правильности его тела. После этого тело генератора в исходном виде поме- 15 -

щзется з специальный рабочий файл, а его местоположение в этом файле заносится в качестве значения разобранного генератора. Хранение тел генераторов в виде исходного текста позволяет использовать одни и те же алгоритмы и для трансляции программы и для обработки макровызовов. При вызове генератора на основе его типа проводится контроль типов параметров и формируются дескрипторы таблицы имен, составленные из имен и типов формальных параметров и значений фактических параметров. Затем тело генератора транслируется б контексте только что сформированных дескрипторов.

«зханизм итераторов в языке Атлант представлен в виде сканирующего оператора. Конкретный алгоритм реализации такого оператора определяется типом сканируемого данного. С этой целью в структурном типе, к объектам которого мозкет быть применен сканирующий оператор, должен быть определен генератор с именем iterator, выполняющий соответствующие действия по просмотру значений типа.

Огметим необходимость эффективной реализации механизма генераторов в трансляторе языка Атлант. Это связано с тем, что с его помопд>ю реализуются такие важные средства работы с АТД, как родовые (параметризованные) типы, функции и процедуры, а такае сканирующий оператор. Использование генераторов в этих целях позволило создавать более эффективны© программ, учитывающие тонкости каддой конкретизации параметризованной компоненты. Отказ от макроподстановки при реализации языка Клу потребовал переноса обработки конкретизация родовых модулей на период исполнения програ^слы и привел К дНачт-ёшНОй 1хёв1Йа№гйЬниитИ ЭДм иииилдвйин, с-внаалнуй с необходимостью динамического поиско операций типов.

Кроме выаэ изложенного в главе приводятся мзтоды взаимодействия транслятора с базой данных, а также представление схеш базы данных и организация сборки прогрг.\аи из глобальных процедур.

ОСНОВНЫЕ РЕЗУЛЬТАТЫ РАБОТЫ

В диссертации получены слэдлзщда основные результаты:

1. Сформулированы проблем реализация ЛТД.

2. Цроведон анализ методов реализаций языков Клу и Ада.

3. Разрсйотапа структура транслятора.

- 16 -

4. Разработано унифицированное представление типов.

5. Разработан алгоритм контроля типов данных.

6. Разработано унифицированное представление локальных и глобальных данных.

7. Разработаны методы трансляции произвольных типов данных.

8. Разработаны методы реалкзацст аварийных функций.

9. Разработаны методы реализации механизма генераторов;

10. Разработаны методы трансляции прикладной программы в контексте раздела базы данных.

11. Реализованы этапы синтаксического и семантического анализов транслятора с язкка Атлант системы Атлант-СМ. Объем разработанного прсгра!.е.зюго обеспечения составляет 150СС строк на языке программирования Си.

Автор вь-рагзет признательность коллегам по Щ СО АН СССР, лр:зпэ.:аЕГЛм участке з создании СПБД Атлант-СИ Автор глубоко благодарен каучкоуу руководителю к,ф. -м. н. Л. К Замулину, под руководством которого вс-лась разработка системы.

Основные результаты работы опубликованы в следующих работах:

1. Залулин А. В., Коситов а А., Кучеров Г. А. Реализация пзьпса программирования Атлант. // ".йтоды трансляции и конс-тр'гтрсгалия програкм Тезисы докладов Всес. конф., ч. 1. - НЬ-2со::б:фск, 1988, с. 83-88.

2. Коситов а А. Проблемы унифицированной реализации стандартных и произвольных типов данных. // Методы транслящш и ;сопстру1грог,а-:::л программ. Тезисы докладов Всес. конф. ч. 2. -Новосибирск, 1988, с. 12-14.

3. Замулин А. а , Коситов К Л. , Кучеров Г. А. и др. Организация системы программирования баз данных Атлант-СП. - Новосибирск, 1989, 40 с. (Препринт Н 836 ВЦ СО АН СССР).

Замулия А. а , Коситов а А., Кучеров Г. А. и др. функция и структура системы программирования баз данных Атлант-СП. // Системы управления базами данных и знаний. Тезисы докладов 4 Всес. конф. ^ секция 2.- Калинин, 1989, с. 5-6.

5. Система программирования Атлант (Технический проект). Отчет / ВЦ СО АН СССР; руководитель А. а Замулин. - N ГР 68076886.- Нэвосибирск, 1987.- 689 с.