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

Транслятор преобразует описания с одного языка на другой за один или несколько проходов в зависимости от класса и структуры входного языка и генерирует так называемый объектный модуль представления вход­ного описания на выходном языке. Этот модуль при необходимости можно многократно выполнять или использовать без повторной обработки на языковом процессоре.

Интерпретатор анализирует представление каждого предложения на исходном языке и сразу осуществляет действия, предписанные этим пред­ложением. Это приводит к необходимости выполнять преобразования с по­мощью языкового процессора при каждом повторном использовании опи­сания. В большинстве случаев применение трансляторов приводит к мень­шим затратам времени и большим затратам оперативной памяти ЭВМ по сравнению с затратами при интерпретации.

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

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

НЕ нашли? Не то? Что вы ищете?

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

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

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

Средства поддержки лингвистического обеспечения. В зависимости от типа исходных языков и методов их обработки различают следующие три основные группы средств поддержки лингвистического обеспечения: проб­лемно-ориентированные системы или генераторы пакетов прикладных программ; макрогенераторы и другие расширяющие системы программиро­вания, построенные по схеме предтрансляторов; метасистемы или системы построения трансляторов по схеме параметрических систем программиро­вания.

Проблемно-ориентированные системы предназначены для построения на их основе специализированных программ. В качестве параметров настрой­ки в системе этого класса может использоваться описание модели исследуемой проблемы (объекта) или предметной области. Система обеспечива­ет автоматизированный под­бор программных модулей и конструирует на их основе программы для исследования научных проблем (объектов) заданного класса. Она может обеспечить также автоматический обмен данны­ми между внутренней и внеш­ней памятями ЭВМ или совмещение модулей, напи­санных на различных языках программирования.

Системы этого класса ориентированы на создание определенного сервиса для разработки программного обеспечения, и задачи авто­матизации разработки и под­держки различных языков АСНИ при этом практически не решаются.

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

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

Рис. 21.9. Схема обработки входных язы­ков методом предтрансляции

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

Если грамматика проектируемого языка Lk относится к классу языков, распознаваемых ядром системы, то создание языкового процессора Jk сво­дится к описанию грамматики языка Lk на специальном метаязыке системы и генерации таблиц описания грамматики Gk, которые обеспечивают на­стройку синтаксического анализатора на язык Lk.

Метатрансляторы типа МТ-системы позволяют создавать языко­вые процессоры для входных языков с различными грамматиками. В ка­честве параметров в таких системах задается информация о синтаксической структуре языка и его семантике. Для описания синтаксиса часто исполь­зуется нормальная форма Бэкуса — Наура, а семантика задается на спе­циальном метасемантическом языке. Структура метатрансляторов типа МТ-систем приведена на рис. 21.10.

Рис. 21.10. Структура системы метатранслятора

В результате работы системы программа на входном языке преобразуется в выходной, которым в МТ-системе может быть любой язык программирования. Таким образом, метатрансляторы типа

МТ-системы позволяют автоматизировать создание языковых процессоров для различных входных языков, обеспечивая его перевод на любой выбран­ный язык программирования.

Для построения лексических и синтаксических анализаторов входных языков в составе операционных систем имеются соответст­вующие генераторы.

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

Диалоговая программа состоит из описания диаграмм состояний на специализированном языке и семантического описания реакции системы на языке программирования. Тексты этих частей могут быть совмещены, если, например, включить строки описания диаграмм в программу семанти­ческого описания в качестве отмеченных комментариев используемого язы­ка программирования. На рис. 21.11 приведен пример такой программы для диаграммы на рис. 21.8. Текст диалоговой программы подвергается трансляции двумя трансляторами: с языка описания диаграмм состояний и с язы­ка программирования. В результате первой трансляции создается файл описания алфавита и синтаксиса ДГ-языка.

С Пример описания ДГ-языка и ДГ-программы для построения изо-

С бражения, состоящего из ломаных линий.

С Операторы с коментарием CD-операторы диалогового языка,

С включенные в текст исполняющей программы.

С

SUBROUTINE PLINE

NAME = Ø !Имя сегмента

С Определение диалогового языка

CD SUBLANG = „DRPLIN", STATE = 3, DIAGN = Ø;

С

!Ø Ø CALL INTERP

CALL INTPAR (IRET, NPR)

С Если IRET = Ø, то выходим из языка

IF(IRET. EQ. l) GOTO 999

С NPR — номер прикладной программы, подлежащей выполнению

GOTO (1 Ø, 2 Ø, 3 Ø, 4Ø) NPR

С

С____________________ Описание состояния N 1_________________

CD S1: MS =«3адайте первую точку ломаной линии»;

CD MS = «Точка задается локатором координат»;

CD MS = «Локатор координат — следящее перекрестье»;

С

CD LOC Р = 1 Ø, S = 2;

1Ø NAME = NAME+ 1

CALL GCTLC (NPT, X,Y) !Получить координаты точки

CALL GCRSG (NAME) !Открыть сегмент

CALL MOVA2 (X, Y) !Перейти в начало ломаной

GOTO 1 Ø Ø

С

С__________________ Описание состояния N 2 __________________

CD S2: MS = «Задайте очередную точку ломаной линии»;

CD MS = «Точка задается локатором координат»;

С

CD LOC, Р = Ø; S = 2;

CALL GGTLC (NRT. X.Y) !Получить координаты точки

CALL LINA2 (X, Y) !Вычертить отрезок ломаной

GOTO 1ØØ

С

CD, CHC = "НОВ—ЛОМ", Р = 3Ø, S = 1;

CALL GCLSG!3акрыть сегмент

GOTO 1ØØ

С

CD CHC, = "УДАЛ — ЛОМ" S = 3;

CD CHG = "КОН — РАБ", Р = 5Ø, S = R;

5Ø CALL GCLSG! Закрыть сегмент

GOTO 1ØØ

С

С_________________ Описание состояния N 3_________________ CD S3: MS = "Укажите удаляемую линию";

С

С PIC, Р = 4Ø, S = 3;

CALL GGTPC (NAMSEG, IPIC) !Получить имя сегмента

CALL GDSG (NAMSEG) !Удалить сегмент

GOTO 1ØØ

CD CHC = «НОВ — ЛОМ», S = 1;

CD END;

С

999 RETURN

END

Рис. 21.11. Текст диалоговой программы для диаграмм состояний рис. 21.7.

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87