Национальный цифровой ресурс Руконт - межотраслевая электронная библиотека (ЭБС) на базе технологии Контекстум (всего произведений: 634558)
Контекстум
.

Разработка Паскаль-компилятора (218,00 руб.)

0   0
Первый авторЗалогова Л. А.
ИздательствоМ.: Лаборатория знаний
Страниц186
ID443375
АннотацияВ книге излагается структура компилятора, основные принципы построения всех его основных блоков — лексического, синтаксического и семантического анализаторов, а также генератора кода. Методы компиляции программ на Паскале описаны на языке С.
Кому рекомендованоДля студентов и специалистов, занимающихся созданием программного обеспечения, а также для всех, желающих создать компилятор со своего собственного языка программирования.
ISBN978-5-00101-110-1
УДК004.4’42
ББК32.973.26-018.2
Залогова, Л.А. Разработка Паскаль-компилятора / Л.А. Залогова .— 5-е изд., электрон. — Москва : Лаборатория знаний, 2021 .— 186 с. — Дериватив. изд. на основе печ. аналога (М.: БИНОМ. Лаборатория знаний, 2007); Электрон. текстовые дан. (1 файл pdf : 186 с.); Систем. требования: Adobe Reader XI; экран 10" .— ISBN 978-5-00101-110-1 .— URL: https://rucont.ru/efd/443375 (дата обращения: 19.04.2024)

Предпросмотр (выдержки из произведения)

Учитывая особенности описания синтаксиса языков программирования, разделим анализатор на два модуля: Синтаксический анализатор проверяет, удовлетворяет ли программа формальным правилам. <...> Структура компилятора 9 Второй модуль (синтаксический анализатор) выполняет синтаксический анализ последовательности символов. <...> Поэтому модуль ввода-вывода должен формировать номер строки и номер позиции в строке для каждой литеры: struct textposition positionnow; Определим структуру textposition: struct textposition { unsigned linenumber; /*номер строки */ unsigned charnumber; /*номер позиции в строке */ }; Модуль ввода-вывода 11 Анализатор выявляет максимально возможное количество ошибок за один просмотр исходной программы. <...> Анализатор запоминает информацию об ошибках в таблице ошибок в результате обращения к функции: error ( unsigned errorcode , /* код ошибки */ textposition position /* местоположение ошибки */ ) Модуль ввода-вывода использует содержимое этой таблицы для печати сообщений об ошибках при формировании листинга. <...> Программирование модуля ввода-вывода Структура модуля ввода-вывода (функция nextch) может быть представлена следующим образом: nextch( ) { if ( текущая литера является последней литерой строки ) { напечатать текущую строку; if ( в текущей строке обнаружены ошибки ) напечатать соответствующие сообщения; прочитать следующую строку; } установить в качестве текущей следующую литеру и запомнить ее координаты; } Будем считать, что максимальная длина строки исходной программы определяется константой MAXLINE. <...> Так как исходная программа считывается построчно, буфер ввода-вывода опишем как массив: char line [MAXLINE] Длина строки, считываемой с внешнего запоминающего устройства, может быть меньше размера буфера, поэтому введем переменную: short LastInLine; значение которой—это количество литер в текущей строке. <...> Теперь мы можем уточнить описание функции nextch: nextch ( ) { if ( positionnow.charnumber == LastInLine ) { ListThisLine ( ); if ( в текущей строке обнаружены ошибки) ListErrors( ); ReadNextLine( ); positionnow.linenumber ++; positionnow.charnumber = 1; } else <...>
Разработка_Паскаль-компилятора_.pdf
Л. ЗАЛОГОВА ЗАЛОГОВА РАЗРАБОТКА ПАСКАЛЬК О МПИЛЯТ ОР А 5-е издание, электронное-е издание, электронное ЛЛаборатория знанийаборатория знаний 2 2021021 Москваосква
Стр.2
УДК 004.4.42 ББК 32.973.26-018.2 З-24 Залогова Л. А. З-24 Разработка Паскаль-компилятора / Л. А. Залогова.—5-е изд., электрон.—М. : Лаборатория знаний, 2021.—186 с.—Систем. требования: Adobe Reader XI ; экран 10".—Загл. с титул. экрана.— Текст : электронный. ISBN 978-5-00101-110-1 В книге излагается структура компилятора, основные принципы построения всех его основных блоков—лексического, синтаксического и семантического анализаторов, а также генератора кода. Методы компиляции программ на Паскале описаны на языке С. Для студентов и специалистов, занимающихся созданием программного обеспечения, а также для всех желающих создать компилятор с своего собственного языка программирования. УДК 004.4.42 ББК 32.973.26-018.2 Деривативное издание на основе печатного аналога: Разработка Паскаль-компилятора / Л. А. Залогова.—М. : БИНОМ. Лаборатория знаний, 2007.—183 с. : ил. ISBN 978-5-94774-563-4. В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации ISBN 978-5-00101-110-1 © Лаборатория знаний, 2015
Стр.3
Оглавление Введение ............................................. 5 Глава 1. Структура компилятора ......................... 6 Глава 2. Модуль ввода-вывода .......................... 10 2.1. Взаимодействие между модулем ввода-вывода и анализатором ............................ 10 2.2. Программирование модуля ввода-вывода ........ 11 2.2.1. Формирование таблицы ошибок ............ 12 2.2.2. Печать сообщений об ошибках ............. 13 Глава 3. Лексический анализатор ....................... 15 3.1. Взаимодействие лексического анализатора с другими частями компилятора ............... 15 3.2. Программирование лексического анализатора..... 18 3.2.1. Лексические ошибки..................... 24 Глава 4. Синтаксический анализатор .................... 26 Глава 5. Нейтрализация синтаксических ошибок ......... 36 Глава 6. Семантический анализатор ..................... 45 6.1. Контекстные условия........................ 45 6.2. Организация таблиц семантического анализатора . . 46 6.2.1. Таблица идентификаторов ................ 46 6.2.2. Таблица типов.......................... 60 6.2.3. Таблица меток.......................... 71 6.3. Программирование семантического анализатора . . . 75 6.3.1. Создание фиктивной области действия ....... 75 6.3.2. Анализ описания переменных.............. 78 6.3.3. Анализ описания типов................... 81 6.3.4. Анализ операторов ...................... 84 6.3.5. Анализ выражения ...................... 92 Глава 7. Введение в генерацию кода ..................... 99 Глава 8. Архитектура модульного конвейерного процессора ...................... 101 8.1. Регистры ................................ 101 8.2. Способы представления данных............... 102 8.3. Способы адресации операндов ................ 105 8.4. Команды ................................ 108 8.4.1. Команды для С- и Р-регистров............. 110 8.4.2. Команды пересылки данных между локальной памятью и регистрами .......... 112 8.4.3. Команды для И-регистров................ 112 8.4.4. Команды передачи управления ............ 113
Стр.4
4 Оглавление 8.4.5. Управление регистровым контекстом ....... 115 8.4.6. Команды для Д-регистров ................ 122 8.4.7. Векторные команды .................... 124 Глава 9. Организация оперативной памяти во время выполнения программы............... 126 9.1. Области данных процедур................... 126 9.2. Адресация переменных..................... 127 9.2.1. Адресация простых переменных .......... 128 9.2.2. Адресация переменных с индексами ....... 133 9.2.3. Адресация поля записи ................. 135 9.3. Память для данных скалярных типов.......... 135 9.4. Память для данных структурных типов ........ 135 Глава 10. Генерация кода ............................. 139 10.1. Формирование команд ..................... 139 10.2. Промежуточное представление и генерация кода для выражений ...................... 142 10.3. Промежуточное представление и генерация кода для операторов....................... 150 Литература ......................................... 167 Приложение 1. Синтаксис стандарта языка Паскаль ...... 168 Приложение 2. Сообщения об ошибках Паскаль-компилятора................... 179 Приложение 3. Коды команд для С-и Р-регистров ........ 182
Стр.5