Скачиваний:
406
Добавлен:
22.01.2014
Размер:
3.77 Mб
Скачать

33.4. Трансляторы с языка высокого уровня.

Прежде всего, ценность использования ЯВУ определяется наличием для него специальной транслирующей программы (транслятора), переводящейисходный модуль вобъектный, пригодный для последующегоредактирования и выполнения на ЭВМ.Трансляторы делятся на две основные группы:компиляторы и интерпретаторы. Внутренняя организацияинтерпретатора иликомпилятора весьма обширная тема,

Рис. 33.1.

требующая специальной подготовки; однако, в общих чертах рассмотрение ее представляется целесообразным. В общем случае, работа компилятора состоит изчетырех основныхфаз (рис. 33.1а): (1)лексического анализа, в процессе которого на основеисходного модуля идентифицируются различные символы и классифицируются по четырем категориям: ключевые слова, числовые значения, идентификаторы переменных и т.д.; (2)синтаксического анализа, в процессе которого определяются синтаксические соотношения ключевых слов истроится структурный каркас программы; (3)генерации объектного модуля, соответствующегоструктуре разобраннойкомпилятором программы, и (4)оптимизации объектного модуля с целью Повышения его эффективности(по объему ибыстродействию).

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

33.5. Двухуровневая организация схемы компилятора.

Так как конечным результатом работы компилятора является объектный модуль, то длявременного выигрыша, как представляется на первый взгляд, было бы целесообразным в качествевыхода компилятора иметьобъектный модуль непосредственно в кодах конкретной ЭВМ. Однако такой подход имеет весьма существенный изъян —объектный модуль становитсямашинно-зависимым и для каждого типа ЭВМ требуется свой компилятор. Другим,современным подходом являетсядвухуровневая организация схемы компилятора (рис. 33.1в): напервом этапеисходный модуль обрабатывается компилятором, транслирующимисходный текст на ЯВУ вобъектный модуль в кодах некоторойвиртуальной ЯВУ-машины,архитектура которой проектируется таким образом, чтобы не только учитывать особенного самого ЯВУ, но и быть близкой кархитектуре конкретных классов процессоров. Навтором этапе выход ЯВУ-компилятора для ЯВУ-машины обрабатываетсякомпилятором, переводящимобъектный модуль в командах ЯВУ-машины вобъектный модуль для конкретной ЭВМ. Команды ЯВУ-машины машинно-независимы(мобильны) и могут быть использованы на ЭВМ различных типов. Почти всю необходимую работу по компиляцииисходного модуля, включаяоптимизацию, можно проводить напервом этапе; навтором этапе производится остальная часть работы посредством достаточно простого компилятора на языкеассемблера конкретной ЭВМ.

Эволюция развития ЯВУ как основы ИПО и связанные с этим вопросы программной технологии привели кмодульному и структурному программированию, когда программа проектируется в видеотносительно независимых модулей (каждый из которых объединенединой логической организацией), а ееуправляющие структуры обходятся без использования (или с минимальным использованием)меток иоператоров условного ибезусловного переходов. К средствам созданияструктурированных программ ЯВУ делятся наструктурные (Algol, Pascal, С, ADA и др.) инеструктурные (Fortran, Basic, RPG и др.), хотя языкипервой группы и допускают организацию в программах управляющих структур посредством механизмаметок ипереходов обоих указанных типов, авторой создание взначительной степениструктурированных программ. Более того, в ряде случаев определенный отход отструктурированности позволяет сделать программы более обозримыми и легче понимаемыми. Данные вопросы будут рассматриваться ниже. Подавляющее большинство ЯВУ 3-го поколения носятявно выраженныйпроцедурный характер, суть которого определяется тем, что написанные на них программы не только определяют,что нужно сделать, но икак это сделать. Однако уже в недрах 3-го Поколения начали зарождаться ЯВУ с менее выраженнойпроцедурностью. Ввиду обилия ЯВУ 3-го поколения и их разнообразия сколь-нибудь общепринятая их классификация отсутствует; поэтому можно. Встретить классификации ЯВУ пофункциональному назначению (для задач научных, коммерческих, моделирования, реального времени, информационно-поисковых, графических и др.),режиму выполнения (диалоговые, пакетные),управляющим структурам (структурные, неструктурные) и т.д. Между тем, ЯВУ 3-го поколения составляютоснову современного ИПО для большинства типов и классов ЭВМ.

Языки 4-го поколения носят ярко выраженный непроцедурный характер, определяемый тем, что программы на таких языках описывают толькочто, но не как надо сделать. В программах скорее формируютсясоотношения, а непоследовательности шагов выполнения запрограммированных алгоритмов. Типичными примераминепроцедурных языков являются языки, используемые для задачискусственного интеллекта (ИИ), напримерProlog,Langin и др. Так, в языкеProlog не пишется формул, а вместо этого определяются соотношения между объектами и величинами; язык не имеетинструкций и состоит только изописаний. Так какнепроцедурные языки имеютминимальное числосинтаксических правил, они значительно более пригодны для использования недостаточно квалифицированным в программировании пользователем; это экономит время разработкипроблемного ПО и освобождает для более сложных задач профессиональных программистов,доля которых относительно массы всех пользователей неуклонно уменьшается.

Второй тенденцией развития ЯВУ 4-го поколения являютсяобъектно-ориентированные языки, базирующиеся на понятиипрограммного объекта, впервые использованного в языкеSimula-67 и составившего впоследствииоснову известного языкаSmallTalk. ЯВУSmallTalk состоит исключительно изобъектно-ориентированных конструкций, делающих описание языка весьмакомпактным и универсальным, тогда как исключительное использованиеобъектов делает невозможным эффективную реализацию в его среде ряда важных механизмовструктурирования данных.Программный объект состоит изструктур данных иалгоритмов; каждый такой объектзнает, как выполнять операции со своими собственнь1ми данными, но для остальной части программы его можно рассматривать в качествечерного ящика. Действительно, различныеобъекты могут пользоваться совершенно разнымиалгоритмами при выполнении работ, определенных одним и тем жеключевым словом. Например,объект с целыми, комплексными числами и массивами в качестве данных будет использовать различные алгоритмы для выполнения операции умножения.Объектно-ориентированные Pascal, C++, SmallTalk, Simula, Objective-C, Eiffel, Actor и ряд других языков программирования позволяют объектам вподклассе наследовать свойстваклассов, к которым они принадлежат, так что каждыйподкласс не нужно определять заново. Описать нужно лишь особенности, отличающие данныйподкласс от другихподклассов данногокласса. Наследование является еще одним механизмом абстракции, позволяющим многим подклассам использовать свойства класса, которому они принадлежат. Особеннополезным механизмнаследования оказывается при разработкеграфического ПО. Награфических объектах можно строить целые языки программирования; примером такоговизуального ЯВУ можно назвать языкМапdala, разработанный в фирмеVPL Research (США).

Третьим направлением развития 4-го поколения ИПО можно считатьязыки запросов, позволяющие пользователю получать нужную информацию избаз данных (БД) на основезапросов, близких кестественным языкам и построенных насинтаксически простых правилах. Примерами таких языков являютсяSQL, QBE фирмыIBM, Intellect фирмыArtificial Intelligence, Ingress/Star фирмыRelational Technology, Oracle одноименной фирмы и др.Языки запросов имеют специфические грамматику, словарь и синтаксис, которые должны соблюдаться подобно случаю традиционных ЯВУ -3-го поколения, но сложность которых позволяет легко использовать их как программисту, так и непрофессиональному пользователю. Средиязыков запросов фактическим стандартом сталSQL-язык, на основе которого созданы и создаются ряд СУБД (dBase IV, R:Base и др.). Некоторыеязыки запросов обеспечивают доступ к БД подобно тому, как это делают СУБД; для большинства пользователей бывает трудно уловить разницу междуязыком запросов и собственно СУБД. В отличие отязыков запросов генераторы отчетов по требованию пользователя выводятотчеты на основе находящихся в БД данных. При этом пользовательспецифицирует включаемые в отчет данные, его формат, наличие группировок и групповых сумм. Как правило, все спецификации выбираются на основе системы меню на экране монитора, делающейгенераторы отчетов весьма легкими для приложений непрофессионального пользователя. Используяязыки запросов игенераторы отчетов, пользователь получает доступ к БД; однако эти средства не могут заменить СУБД. В качестве популярныхгенераторов отчетов можно отметить такие, какEasytrieve Plus фирмыPansophic, GIS фирмыIBM, Mark TV фирмыInformatics, R&R Relational Report Writer фирмыConcentric Data Systems и др.Языки запросов и генераторы отчетов позволяют, особенно в связи с бурным развитием ПК, приобщить к компьютерной инфотехнологии широкие круги непрофессиональных пользователей из различных прикладных областей (бизнес, офисная служба, банковское дело и др.).Генераторы приложений в отличие отязыков запросов игенераторов отчетов (которые позволяют, главным образом, решать задачи, связанные с обработкой выходной информации) дают возможность непрофессиональному пользователю существенно сокращать временные затраты на создание программных Приложений, включающих весь комплекс вопросов обработки данных (ввод, контроль входных данных, обработка согласно заданным алгоритмам и вывод результатов в виде отчетов нужного формата и организации). В этом случае пользователь должен в пригодной форме специфицировать,что программа должна делать; созданный на основе данной информации файлспецификаций является входом вгенератор приложений, который генерирует предложения искомой прикладной программы. Как и в случае, ранее рассмотренных средств ИПО 4-го поколениягенераторы приложений требуют от пользователя только определениячто нужно сделать, а некак это сделать. В качестве наиболее известных и распространенныхгенераторов приложений можно отметить такие, какADS фирмыCullinet, MAPPER фирмыSperry, MANTIS фирмыCincom, RAMIS фирмыMathematica и др. В определенной мере к рассмотренным средствам ряд специалистов относят иинтегрированные ППП(Framework, Lotus 1-2-3, Symphony, Ms Works и др.), позволяющие создаватьнепрофессиональному пользователю прикладное ПО, однако, мы данные средства относим к ППО, содержащему ППП различной организации и назначения, включая интегрированные. До сих пор рассмотренные средства ИПО 4-го поколения достаточно хорошо приспособлены для создания непрофессиональным пользователем небольших, простых прикладных программ. К их основному недостатку (как и вообще всехнепроцедурных ЯВУ) можно отнести весьмаограниченные возможности по созданию программистом в своейпрограмме собственных управляющих структур (подобно случаю процедурных ЯВУ 3-го поколения). Однако их основной целью является служить массовому непрофессиональному пользователю, который вряд ли обладает достаточными знаниями и навыками для создания собственныхуправляющих структур в сложных программных системах.

Наконец, весьма важным направлением развития ИПО 4-го поколения являются языки параллельного программирования (ЯПП), которые в отличие от всех ранее рассмотренных средств ориентированы, прежде всего, на создание СПО и ППО для ВС нетрадиционнойпараллельной архитектуры (многомашинные, мультипроцессорные, матричные, систолические, однородные среды и др.). ЯВУ 3-го поколения в массе своей ориентированы на традиционнуюоднопроцессорную архитектуру ЭВМ, но уже в языкахPL/I иAlgol-68 были предусмотрены средства дляраспараллеливания выполнения программ. Так, в языкеPL/I можно распараллеливать на уровнесовмещения выполнения как обработки операций ввода/вывода, так и основной программы и ее процедур. Дальнейшее развитие ЯПП связано с созданием языкаConcurrent Pascal, допускающегораспараллеливание более высокого уровня, а также снабжение ряда ЯВУсредствами организации параллельной обработки. Так, нами для обеспечения обработки информации в режимераспараллеливания по данным дляоднородных ВС на базе моделей ЕСЭВМ ЯВУPascal был расширен пятью операциями, позволяющими программисту организовыватьпрограммное распараллеливание процесса обработки.

В настоящее время для организации параллельной обработки на ВС параллельной архитектуры широко используются модификации ЯВУFortran, позволяющие осуществлять параллельное программирование. В некоторых ЯПП предусмотрены явные средствараспараллеливания (например, языкOccam, в других ЯПП предполагается, что сам компилятор будетанализировать ивыявлять параллелизм в компилируемой программе (например компиляторAlliant FX/Fortran, языкиSISAL, FP, KRC и др.). Впервом случае программист сам определяет и описывает параллельную структуру программ, тогда как вовтором параллелизм определяет и реализует сам компилятор с ЯПП. Оба подхода имеют свои плюсы и минусы: еслипервый дает возможность во многих случаях получать весьмавысокий уровень распараллеливания с учетом специфики задачи и архитектуры ВС (требуя, порой, существенной переделки традиционного алгоритма и больших затрат на разработку управляющей структуры программы), товторой на многих задачах может давать менее существенный эффект от распараллеливания (взамен беря функции распараллеливания на себя и не требуя от программиста разбиения задачи на подзадачи, распределения их по вычислительным ресурсам и синхронизации вычислительного процесса). Современная проблематикапараллельной обработки информации и программирования находится в стадии интенсивного развития.

К 5-му поколению ИПО, интенсивно развиваемому в настоящее время, можно отнести и ЯВУ искусственного интеллекта, экспертных систем и баз знаний, а также естественные языки. Наряду с такими популярными языками задач ИИ, как Lisp иProlog, ведутся разработки языков ИИ, наследующих лучшие черты первых(InterLisp, SAIL, ExpertLisp, IQLisp и др.). Существенную роль в качественном повышении интеллектуальности разрабатываемого ПО (по сравнению страдиционным программированием) играетаппликативная технология программирования, базирующаяся нафункциональных ЯП (ФЯП), в качестветипичного представителя которых можно назватьNore-язык. При таком подходе спецификация предметной области существенно упрощает разработку ПО. В последние годы большое внимание уделяется разработке ФЯП, базирующихся на.-исчислении А. Черча. Наиболее интенсивно такие языки используются вэкспертных системах (ЭС),системах представления знаний иуправления базами знаний (СУБЗ). Большинство современных ЭС реализовано на различных версиях языковLisp иProlog, а также на ЯВУ даже 3-го поколения(Pascal, С, Forth).