- •Автоматы магазинного типа
- •Алфавит
- •Атрибутивные грамматики
- •Блок сканирования
- •Бэкуса–Наура форма (бнф)
- •Восходящий синтаксический анализ
- •Генератор кода машинных команд
- •Грамматика
- •Двухпроходной компилятор
- •Детерминированный конечный автомат
- •Детерминированный метод разбора
- •Диагностика об ошибках при трансляции
- •Интерпретатор
- •Граф распознавания.
- •Компилятор с однопроходной структурой
- •Конвертор
- •Конечный автомат
- •Регулярные выражения
- •Семантика языка
- •Синтаксис языка
- •Синтаксическая диаграмма
- •Синтаксический анализатор
- •Синтаксический граф
- •Состав компилятора
- •Терминалы
- •Транслятор
- •Трехпроходный транслятор
- •Фаза оптимизации
- •Четверка
Граф распознавания.
Такой граф
отражает управление ходом работы при грамматическом анализе
предложения.
Двухпроходной компилятор
В этом случае синтаксический анализатор, вызывая блок
сканирования, получает лексему за лексемой и строит файл постфиксной
записи программы. Генератор кода считывает этот файл и создает объектный
код программы. Подобной структуре свойственно относительно небольшое время выполнения, так как программа считывается лишь дважды (исходный текст и постфиксная запись).
Детерминированный конечный автомат
Конечный автомат – это устройство для распознавания строк какого-
либо языка. У него есть конечное множество состояний, отдельные из
которых называются последними. По мере считывания каждой литеры
строки контроль передается от состояния к состоянию в соответствии с
заданным множеством переходов. Если после считывания последней литеры
строки автомат будет находиться в одном из последних состояний, о строке
говорят, что она принадлежит языку, принимаемому автоматом. В ином
случае строка не принадлежит языку, принимаемому автоматом.
Автомат называют детерминированным, потому что в каждом
элементе таблицы переходов содержится одно состояние. В
недетерминированном конечном автомате это положение не выдерживается.
Детерминированный метод разбора
Метод разбора является
детерминированным (для конкретной грамматики), если при разборе данной
грамматики не требуется делать возврат. Некоторые языки можно разбирать
детерминировано с помощью только одного из методов грамматического
разбора. В частности, ряд языков можно разбирать детерминировано снизу
вверх, но не сверху вниз.
Диагностика об ошибках при трансляции
В процессе анализа текста программы, транслятор должен выдавать
соответствующую диагностику об ошибках и продолжать процесс
грамматического разбора, возможно находя дальнейшие ошибки.
Для продолжения работы, можно:
1. сделать какие-то предположения о том, что на самом деле имел в виду
автор неправильной программы;
2. пропустить некоторую часть входной последовательности;
3. попытаться восстановить текст и при неудаче пропустить часть
последовательности.
Интерпретатор
Интерпретаторы реализуют принцип, альтернативный
компилированию. Компиляторы и интерпретаторы имеют много общего.
Интерпретатор, тоже вначале просматривает исходную программу и
выделяет в ней лексемы. Для этого используются блоки сканирования и
анализаторы, аналогичные тем, которые входят в состав компилирующих
программ. Однако интерпретатор вместо построения объектного кода, способного выполнять те или иные операции, сам производит
соответствующие действия.
Инфиксная запись
Обычные арифметические выражения, используемые в повседневной
практике и содержащие скобки, называют инфиксными выражениями,
поскольку знак операции располагается между операндами.
Исходная программа
Исходная программа (написанная на каком-либо языке
программирования) представляет собой последовательность символов,
которая вводится в компьютер и преобразуется в форму, пригодную для
непосредственного выполнения.
Класс лексемы
1 – идентификатор;
2 – константа;
3 – символ присваивания;
4 – символы операций умножения и деления;
5 – символы операций сложения и вычитания.
Компилятор
Компилятор является программой, которая способна воспринимать
строку символов определенного вида (т.е. текст программы на исходном
языке) и выдавать другую строку символов (программу на машинном языке).
Компиляторам присущ ряд общих черт, что упрощает процесс создания
компилирующих программ. В состав любого компилятора входят три
основных компонента:
- лексический анализатор (блок сканирования);
- синтаксический анализатор;
- генератор кода машинных команд.
