Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компиляторы.doc
Скачиваний:
99
Добавлен:
04.11.2018
Размер:
5.13 Mб
Скачать

Университет наяновой

Самарский муниципальный комплекс непрерывного образования

М. А. Шамашов основные структуры данных и алгоритмы компиляции

Учебное пособие

Самара

1999

УДК 681.3

Основные структуры данных и алгоритмы компиляции. Учебное пособие./ М.А. Шамашов. Самара: Научно–внед­рен­чес­кая фирма “Сенсоры, модули, системы”, 1999, 115 с.

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

Пособие ориентировано на студентов, изучающих компьютерные науки, и специалистов в области проектирования системного и прикладного программного обеспечения в самых разных областях. Рекомендуется в качестве учебника для использования в учебном процессе специальности 01.02 “Прикладная математика”, специализация 01.02.01 – математическое и программное обеспечение систем (информационные технологии в производстве), а также специальностей “Автоматизированные системы обработки информации и управления” и “Программное обеспечение вычислительных и автоматизированных систем”. Выполнено на кафедре “Информатика”и в лаборатории Открытые системы Университета Наяновой.

Ил. 68. Табл. 6. Библ. 18 наимен.

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

 М. А. Шамашов, 1999.

 Университет Наяновой, 1999.

Предисловие

Перед вами учебное пособие, которое задумывалось как вторая часть учебника для одно– или двухсеместрового курса по теории формальных языков и основам построения компиляторов. Напомним, что в первом пособии этой серии – “Теория формальных языков. Грамматики и автоматы”[16] освещается та часть математической теории формальных языков и автоматов, на которой базируется синтаксически управляемый перевод. Данное пособие, напротив, более конструктивно. В нем рассмотрены структуры данных, алгоритмы и реализационные аспекты трансляторов, компиляторов, интерпретаторов и ассемблеров. И в этой связи пособие должно представлять несомненный самостоятельный интерес.

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

Кроме того, развитие вычислительной техники невозможно без изобретения новых языков общения с ней. Человеку вообще свойственно создавать новые языки. Современные информационные технологии предполагают привлечение конечного пользователя, ученого или инженера, специалиста в конкретной предметной области, а не вычислительной техники и технологии программирования к решению своих задач на ЭВМ. Для качественного решения этой проблемы между пользователем и ЭВМ должен существовать интеллектуальный интерфейс, – пользователь должен ставить задачу и получать результаты в терминах известной ему предметной области. То есть, нужен предметно ориентированный язык. Думаю, что многим из Вас придется столкнуться с разработкой таких языков. Да и при разработке любой простейшей автоматизированной системы, пакета программ необходимо помнить о входном языке этой системы, знать как его анализировать, контролировать, транслировать и воплощать в действие. И для того, чтобы не “изобретать велосипед”, надо, конечно же, знать методы, алгоритмы, способы организации данных и средства автоматизации, лежащие в основе построения подобных систем.

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

В первой главе пособия кратко рассмотрена вся совокупность задач, решаемых компилятором в их взаимосвязи. Последующие главы посвящены детальному рассмотрению наиболее интересных и важных фаз компиляции. Во второй главе рассмотрены алгоритмы и структуры данных лексического анализатора (сканера). В третьей главе обсуждаются возможные способы организации таблиц компиляторов. Четвертая и пятая, наиболее объемные главы посвящены описанию различных методов синтаксического анализа. Рассматриваются недетерминированные алгоритмы (алгоритмы с возвратами) нисходящего и восходящего синтаксического анализа, наименее эффективные, но подходящие для произвольных контекстно–свободных языков. Обсуждаются детерминированные LL(k) анализаторы, а также анализаторы языков простого и операторного предшествования. В шестой главе дано введение в семантику, обеспечивающую перевод программ во внутреннюю форму (ПОЛИЗ, тетрады) с ее последующей интерпретацией или генерацией кода. В седьмой главе обсуждаются методы машинно–независимой оптимизации программ. В восьмой главе дан обзор машинно-зависимых фаз компиляции. Там же приводятся некоторые сведения о трансляции с языка ассемблера.