
- •Московский автомобильно-дорожный государственный технический университет (мади)
- •I.Формальные языки и грамматики
- •I.1. Цепочки символов
- •I.2. Операции над цепочками символов
- •I.3. Понятие языка
- •I.4. Способы задания языка
- •I.5. Синтаксис и семантика языка
- •I.6. Определение грамматики
- •I.7. Пример грамматики
- •I.8. Принцип рекурсии в правилах грамматики
- •I.9. Способы задания грамматик
- •I.9.1. Использование метасимволов
- •I.9.2. Запись правил грамматики в графическом виде
- •I.10. Распознаватель
- •I.10.1. Схема распознавателя
- •I.10.2. Задача разбора
- •I.11. Классификация грамматик
- •I.12. Классификация языков
- •I.13. Примеры классификаций языков и грамматик
- •I.14. Цепочки вывода
- •I.14.1. Понятие о выводе
- •I.14.2. Сентенциальная форма грамматики
- •I.14.3. Левосторонние и правосторонние выводы
- •I.14.4. Дерево вывода и методы его построения
- •I.15. Однозначности и эквивалентности грамматик
- •I.15.1. Однозначные и неоднозначные грамматики
- •I.15.2. Проверка однозначной и эквивалентной грамматик
- •I.15.3. Правила, задающие неоднозначность в грамматиках
- •II. Принципы построения трансляторов
- •II.1. Определения транслятора
- •II.2. Определение компилятора
- •II.3. Определения интерпретатора
- •II.4. Этапы трансляции
- •II.5. Фазы компиляции
- •II.6. Ти ( таблицы идентификаторов)
- •II.6.1. Назначение и особенности построения
- •II.6.2. Простейшие методы
- •II.6.3. Построение ти по методу бинарного дерева
- •II.6.5. Выбор Хэш-функции при построении ти
- •II.6.7. Построение ти по методу цепочек
- •II.7. Лексические анализаторы
- •II.7.1. Назначение ла
- •II.7.2. Определение границ лексем
- •II.7.3. Выполнение действий, связанных с лексемами
- •II.7.4. Применение конечных автоматов (ка) для построения ла
- •II.7.5. Алгоритм построения ка
- •II.7.6. Пример применения ка для построения ла
- •II.8. Принципы построения синтаксических анализаторов (са)
- •II.8.1. Значение са
- •II.8.2. Автоматы с магазинной памятью
- •II.9. Принципы построения семантического анализатора (с-а)
- •II.9.1. Назначение с-а
- •II.9.2. Проверка соблюдения во входной программе семантических соглашений
- •II.9.3. Дополнение внутреннего представления программы
- •II.9.4. Проверка смысловых норм языка программирования
- •II.10. Принципы генерации кода
- •II.11. Оптимизация кода
I.9.2. Запись правил грамматики в графическом виде
Вся грамматика представляется в форме набора специальным образом построенных диаграмм. Она доступна не для всех типов грамматик, а только для тех, где в левой части правил присутствует не более одного символа. Но этого достаточно, чтобы можно было ее использовать. В этой форме записи каждому нетерминальному символу грамматики соответствует диаграмма, построенная в виде направленного графа, который имеет следующие типы вершин :
1)точка входа в диаграмме никак не обозначается, из нее начинается входная дуга;
2) нетерминальный символ обозначается прямоугольником, в котором вписано обозначение символа;
3)цепочка нетерминальных символов на диаграмме обозначается овалом, кругом, внутрь которого вписана цепочка;
4) узловая точка в диаграмме обозначается или закрашена кружком;
5)точка выхода никак на диаграмме не обозначается, в нее входит дуга графа.
Каждая дуга имеет одну точку входа и одну точку выхода, но сколько угодно вершин 3ех типов.
Пример графического представления цепочки целых десятичных цифр со знаком
Двигаясь по диаграмме определенным образом, исключаем из цепочки символов все нетерминальные символы и в итоге в цепочке останутся только терминальные символы.
I.10. Распознаватель
I.10.1. Схема распознавателя
Разборщик – это специальный автомат, который позволяет определить принадлежность цепочки символов некоторому языку. Задача его в том, чтобы на основании исходной цепочки символов определить принадлежит ли она заданному языку или нет.
Распознаватель – это один из способов определения языка.
В общем виде его можно изобразить в виде условной модели, которая отражает работу алгоритма распознавателя.
Лента (1) содержит входную цепочку символов. К ней примыкает считывающая головка для считывания символов этой цепочки. УУ – координирует работу распознавателя, оно имеет набор состояний и память для хранения своего состояния. Внешняя память хранит информацию в процессе работы распознавателя и, в отличии от УУ, имеет значительно огромный объем. Распознаватель работает символами своего алфавита, который конечен. Он содержит все допустимые символы входных цепочек, а так же дополнительный алфавит символов, которые могут обрабатываться УУ и храниться во внешней памяти. Распознаватель выполняет следующие операции:
чтение очередного символа из входной цепочки;
сдвиг входной цепочки на заданное количество символов;
доступ к внешней памяти для чтения или записи информации;
преобразование информации в памяти.
Он работает по шагам или тактам. В начале такта считывается очередной символ из входной цепочки, и в зависимости от этого символа УУ определяет, какие действия надо выполнять. В начале каждого такта состояние распознавателя определяется его конфигурацией, которая в процессе работы меняется. Конфигурация определяется следующими параметрами:
содержанием входной цепочки символов и в положении считывающей головки в ней;
состоянием УУ;
содержанием внешней памяти.
В начале конфигурации считывающая головка обозревает 1ый символ входной цепочки. УУ находится в начальном заданном состоянии, а внешняя память либо пуста, либо содержит информацию. Для распознавателя создается 1 или несколько конфигураций. Язык, определяемый распознавателем, - это множество всех цепочек, допускаемые распознавателем.