- •Разработка лексического анализатора
- •Содержание
- •Введение
- •1 Тема и цель курсовой работы
- •2 Основы теории разработки компиляторов
- •2.1 Описание синтаксиса языка программирования
- •Формальные грамматики
- •Формы Бэкуса-Наура (бнф)
- •Расширенные формы Бэкуса-Наура (рбнф)
- •Диаграммы Вирта
- •Идентификатор
- •Выражение
- •2.2 Общая структура компилятора
- •2.3 Лексический анализатор программы
- •Алгоритм 2.1. Разбор цепочек символов по дс с действиями
- •Переменные:
- •Процедуры и функции:
- •2.4 Синтаксический анализатор программы
- •Теорема 2.1. Достаточные условия применимости метода рекурсивного спуска
- •2.5 Семантический анализатор программы
- •Обработка описаний
- •Анализ выражений
- •Проверка правильности операторов
- •2.6 Генерация внутреннего представления программы
- •Перевод в полиз выражений
- •Перевод в полиз операторов
- •Составной оператор begin s1; s2;...; Sn end в полиЗе записывается как s1 s2... Sn.
- •Синтаксически управляемый перевод
- •2.7 Интерпретатор программы
- •3 Постановка задачи к курсовой работе
- •4 Требования к содержанию курсовой работы
- •5 Индивидуальные варианты задания Операции языка (первая цифра варианта) представлены в таблицах 5.1 – 5.4.
- •Правила, определяющие идентификатор, букву и цифру:
- •Правила, определяющие типы данных (четвертая цифра варианта), представлены в таблице 5.7.
- •Правило, определяющее оператор программы (пятая цифра варианта).
- •6 Контрольные вопросы для самопроверки
- •Список использованных источников
- •Приложение а
Расширенные формы Бэкуса-Наура (рбнф)
Для повышения удобства и компактности описаний, в РБНФ вводятся следующие дополнительные конструкции (метасимволы):
квадратные скобки «[» и «]» означают, что заключенная в них синтаксическая конструкция может отсутствовать;
фигурные скобки «{» и «}» означают повторение заключенной в них синтаксической конструкции ноль или более раз;
сочетание фигурных скобок и косой черты «{/» и «/}» используется для обозначения повторения один и более раз;
круглые скобки «(» и «)» используются для ограничения альтернативных конструкций.
Пример 2.3. В соответствии с данными правилами синтаксис модельного языка М будет выглядеть следующим образом:
<буква> ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w |
x | y | z
<цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<идентификатор> ::= <буква> { <буква> | <цифра> }
<число> ::= {/< цифра> /}
<ключевое_слово> ::= program | var | begin | end | int | bool | read | write | if |
then | else | while | do | true | false
<разделитель> ::= ( | ) | , | ; | : | := | . | { | } |+ | - | * | / | | | | = | < | >
<программа> ::= program <описание> ; <тело>.
<описание> ::= var <идентификатор> {, <идентификатор>}: (int | bool)
<тело> ::= begin {<оператор>; } end
<оператор> ::= <присваивания> | <условный> | <цикла> | <составной> |
<ввода> | <вывода>
<присваивания> ::= <идентификатор> := <выражение>
<условный> ::= if <выражение>then <оператор>else<оператор>
<цикла> ::= while <выражение> do <оператор>
<составной>:: = begin {<оператор> ;} end
<ввода>:: = read(<идентификатор>)
<вывода>:: = write(<выражение>)
<выражение>:: = <сумма> | <сумма> ( = | < | >) <сумма>
<сумма> ::= <произведение> { (+ | - | ) <произведение>}
<произведение>:: = <множитель> { (* | / | ) <множитель>}
<множитель>:: = <идентификатор> | <число> | <логическая_константа> |
<множитель> | (<выражение>)
<логическая_константа>:: = true | false
Диаграммы Вирта
В метаязыке диаграмм Вирта используются графические примитивы, представленные на рисунке 2.1.
При построении диаграмм учитывают следующие правила:
каждый графический элемент, соответствующий терминалу или нетерминалу, имеет по одному входу и выходу, которые обычно изображаются на противоположных сторонах;
каждому правилу соответствует своя графическая диаграмма, на которой терминалы и нетерминалы соединяются посредством дуг;
альтернативы в правилах задаются ветвлением дуг, а итерации - их слиянием;
должна быть одна входная дуга (располагается обычно слева или сверху), задающая начало правила и помеченная именем определяемого нетерминала, и одна выходная, задающая его конец (обычно располагается справа и снизу);
стрелки на дугах диаграмм обычно не ставятся, а направления связей отслеживаются движением от начальной дуги в соответствии с плавными изгибами промежуточных дуг и ветвлений.
1)
2)
3)
1)
– терминальный символ, принадлежащий
алфавиту языка; 2) – постоянная группа
терминальных символов, определяющая
название лексемы,
ключевое слово и т.д.; 3)
– нетерминальный символ, определяющий
название правила; 4)
– входная дуга с именем правила,
определяющая его название; 5)
– соединительные линии, обеспечивающие
связь между терминальными и нетерминальными
символами в правилах.
Рисунок 2.1 –
Графические примитивы диаграмм Вирта
блок
4) 5) блок
Пример 1.4. Описание синтаксиса модельного языка М с помощью диа
Описание синтаксиса модельного языка М с помощью диаграмм Вирта представлено на рисунке 2.2.
цифра
Рисунок 2.2 – Синтаксические правила модельного языка М
буква
идентификатор
число
ключевое_слово
Рисунок 2.2 – Синтаксические правила модельного языка М, лист 2
разделитель
программа
описание
тело
Рисунок 2.2 – Синтаксические правила модельного языка М, лист 3
оператор