- •Часть 1
- •Строка символов: определение, основные операции обработки
- •Язык: определение, основные элементы, способы задания
- •Грамматика языка: определение, способы задания
- •Графический язык
- •Классификация языков и грамматик
- •Понятие вывода в языке, виды вывода, дерево вывода
- •Распознаватели: определение, основные операции, классификация
- •Конечные автоматы
- •Основные фазы компиляции программы. Фазы компиляции
- •Лексический анализ: основные операции, виды лексем, способы реализации таблиц лексем
- •Синтаксический анализ: назначение, основные операции
- •Нисходящий распознаватель с подбором альтернатив
Распознаватели: определение, основные операции, классификация
Распознаватель (разборщик) – часть транслятора, определяющая, правильно ли синтаксически построена программа пользователя. Распознаватель представляет собой специальный алгоритм, отвечающий на вопрос, принадлежит ли данная цепочка символов некоторому языку.
В общем виде распознаватель можно отобразить в виде условной схемы:
Устройство управления – автомат с конечным набором состояний и внутренней памятью для хранения текущего состояния и промежуточных данных. Распознаватель образует не только входную цепочку, но и некоторые дополнительные символы, используемые распознавателем в процессе распознавания.
Типовые операции:
Чтение очередного символа из входной цепочки
Сдвиг входной цепочки на заданное количество символов влево или вправо
Чтение/запись информации в рабочую память или из нее
Преобразование информации в памяти
Изменение состояния УУ
У распознавателя есть исходное состояние: считывающая головка в начале цепочки, рабочая память или пустая, или заполненная строго определенной информацией.
Существует несколько рабочих состояний.
Классификация распознавателей:
По виду считывающей головки:
Односторонние – СГ движется только в одну сторону
Двухсторонние – СГ может двигаться реверсивно
По виду УУ
Детерминированные. Каждое новое состояние строго определено предыдущим состоянием
Недетерминированные.
Для языков типа 0 (с фразовой структурой) необходим распознаватель, равномощный машине Тьюринга, т.е. недетерминированный двухсторонний автомат с неограниченной памятью.
Распознаватели языков типа 1 – двухсторонние недетерминированные автоматы с линейно ограниченной внешней памятью. Время распознавания экспоненциально зависит от длины цепочки.
Для языков типа 2 – односторонний недетерминированный автомат с магазинной (стековой) памятью (МП-автомат). Время распознавания экспоненциально зависит от длины цепочки.
Для языков типа 3 – односторонний недетерминированный автомат без внешней памяти.
Конечные автоматы
В общем виде конечный автомат (КА) представляет пятерку:
M = (K, T, t, k1, F)
K – конечное множество состояний автомата
T – конечный входной алфавит
t – переходная функция, преобразующая совокупность текущего состояния автомата и входного алфавита в состояние автомата на следующем шаге.
t: K*T→K
k1 – начальное состояние автомата (k∈K)
F – множество конечных состояний автомата (F⊆K, F≠∅)
Очевидно, что КА удобно отображать в виде помеченного орграфа, узлы которого соответствуют состояниям КА. При этом выделяется начальный узел (вершина) со стрелкой и конечные в виде квадратов.
В семействе КА выделяют подсемейство детерминированных КА (ДКА), в которых нет вершин с одинаково помеченными дугами, уходящими в другие вершины. Именно таким является и данный КА. Его описание может быть представлено в виде n-ки:
M = ({A, B, C, D, E}, {a, b}, t, A, {D, E})
K T k1 F
Функция переходов:
Текущее состояние |
Вход |
Следующее состояние |
A |
a |
B |
A |
b |
C |
B |
a |
D |
B |
b |
B |
C |
a |
D |
C |
b |
C |
D |
b |
E |
E |
a |
E |
Множество строк, принимаемых конечным автоматом М – это множество строк из входных символов, которыми помечены дуги, соединяющие входную вершину с некоторой конечной вершиной.
Строка не принимается автоматом, если в результате прохождения по соответствующим дугам конечное состояние автомата не достигается.