Будучи универсальными, способными к исполнению любого алгоритма переработки информации, вычислительные машины вместе с тем требуют для описания алгоритма на машинном языке скрупулезной его детализации, разложения на весьма элементарные операции и привязки всех данных, всех информационных объектов, существующих на каком-либо этапе исполнения алгоритма, да и привязки самого описания алгоритма к конкретным нумеруемым устройствам машины и участкам ее памяти. История развития программирования показала, что эти весьма трудоемкие, но автоматизируемые аспекты описания алгоритма на машинном языке в значительной мере удается изъять из языков общения с вычислительными машинами.
Современная технология программирования строится на том, что программа решения некоторой задачи описывается не на машинном языке, а на языке, достаточно близком к естественной формулировке задачи и алгоритма ее решения. Такой способ общения с вычислительной машиной с необходимостью включает как этап общения трансляцию, задачей которой является автоматическое превращение текста программы на некотором языке программирования в семантически эквивалентный ему текст на машинном языке. Трансляторы, т.е. программы, осуществляющие трансляцию, составляют неотъемлемую часть общесистемного программного обеспечения и проблемно-ориентированных систем.
Исследования по методам трансляции и разработка трансляторов являются одной из самых важных (и, заметим, самых старых) областей системного программирования, и свободное владение понятиями и аппаратом методов трансляции необходимо каждому квалифицированному системному программисту или студенту, специализирующемуся по математическому обеспечению ЭВМ.
Вопросам трансляции посвящена обширная литература на русском языке, главным образом переводная и ориентированная на обстоятельное изложение отдельных аспектов трансляции. Цель предлагаемой книги состоит в систематическом и сжатом изложении всех основных понятий и идей, определяющих современное понимание проблемы трансляции в системном программировании.
Такая установка требовала от авторов включения в книгу ряда принципиально важных вопросов, слабо или совсем не отраженных в монографиях по трансляции. Прежде всего это относится к генерации кода, оптимизации программ, организации трансляторов, методам автоматизации построения трансляторов.
Предлагаемая книга содержит пятнадцать глав, объединенных в три части. В первой, состоящей из трех глав, рассказывается, что такое трансляция и какие бывают трансляторы. Вторая, объединяющая восемь глав, посвящена методам, используемым для создания алгоритмов трансляции, и структуре трансляторов. Третья, образованная четырьмя главами, излагает подходы к автоматизации разработки трансляторов.
Цель книги определила и характер изложения материала. Упор делается на содержательное описание основных понятий и подходов, связанных с построением трансляторов, и почти отсутствуют формальные определения и доказательства, а также полная детализация всех алгоритмов и методов. Поэтому книга может послужить введением в область трансляции и ее нельзя использовать в качестве справочника. Для того чтобы включить ответы на все основные вопросы, возникающие в трансляции, следует значительно увеличить объем -- например, известная монография А.Ахо и Дж.Ульмана, решающая эту задачу только для части теории трансляции, превышает по объему данную книгу более чем в два раза. Читатель, желающий углубить или специализировать свои знания по трансляции, может обратиться к источникам, упоминаемым в кратких обзорах и комментариях к каждой части. В этих обзорах авторы предпочитали ссылаться на основные и хорошо доступные монографии, ссылки на менее доступные препринты и зарубежные публикации делались только тогда, когда сведения, в них излагаемые, отсутствуют в монографиях.
Авторы надеются, что предлагаемая книга поможет специалистам, занимающимся теорией трансляции, получить более точное представление о практике трансляции, прийти к практически полезным постановкам новых теоретических задач, а системным программистам найти основу для большинства практических методов реализации трансляторов. Она доступна всем, кто знаком с основами программирования в объеме обычного вузовского курса.
Материал, вошедший в монографию, в значительной мере основан на работах Вычислительного центра СО АН СССР и на том спецкурсе по методам трансляции, который уже более десяти лет читается авторами в Новосибирском университете. При чтении спецкурса авторы старались, чтобы его программа соответствовала утвержденной МВССО СССР программе курса по трансляции программ, поэтому они надеются, что монография послужит пособием по такому курсу. В нее вошел переработанный и исправленный материал по этому курсу.
Общий взгляд авторов на трансляцию, отраженный в книге, складывался под влиянием коллег из ВЦ СО АН СССР и Новосибирского филиала ИТМиВТ АН СССР, занимающихся вопросами трансляции. Авторы глубоко благодарны им и особенно А.П. Ершову, Г.И. Кожухину, С.Б. Покровскому, В.К. Сабельфельду и Г.Г. Степанову.
Влияние работ ВЦ СО АН СССР выразилось, в частности, в том, что в приводимых примерах языков и трансляторов преобладает алголовская линия языков программирования: Алгол 60, Альфа, Симула 67, Паскаль, Алгол 68. Следование алголовской линии выразилось в том, что в качестве основного примера для иллюстраций в книге взят Минал -- подмножество Алгола 60, ранее применявшийся авторами в курсе по программированию для студентов НГУ. Вместе с тем авторы предполагают, что все это не повлияло на общность излагаемых подходов и методов, хотя сторонникам алголовской линии читать книгу будет легче.
Многие коллеги прочли первоначальные или окончательный варианты книги или ее частей и сделали ряд полезных замечаний, которые авторы постарались учесть. Авторы выражают всем им благодарность и, в первую очередь, С.М. Абрамовичу, В.Н. Агафонову, М.М. Бежановой, В.Ш. Кауфману, С.Э. Козловскому, Д.Н. Кузнецову, М.Б. Меристе, Л.Т. Петровой, А.Ф. Рару, В.А. Серебрякову, А.Н. Терехову, Г.С. Цейтину.