
- •Московский автомобильно-дорожный государственный технический университет (мади)
- •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.4. Способы задания языка
Кроме алфавита язык предусматривает правила построения допустимых цепочек, т.к. не все цепочки над заданным алфавитом принадлежат языку. Символы могут объединяться в слова (лексемы) это элементарные конструкции языка, на их основе строятся предложения (более сложные конструкции). И те и другие в общем случае являются цепочками символов, но предусматривают некоторые правила построения(задающий язык). В общем случае язык можно задать тремя способами:
1) перечисление всех допустимых цепочек языка
2)указание способа порождения цепочек языка, т.е. задание грамматики языка
3)определение метода распознавания цепочек языка
1ый метод формальный и на практике не применяется (бесконечное число цепочек)
2ой способ предусматривает некоторые описания правил с помощью которых строятся цепочки языка. Когда такая цепочка, построенная с помощью этих правил из символов алфавита языка будет принадлежать заданному языку.
Например: с правилами построения цепочек символов русского языка, знакомого в средней школе.
3ий способ предусматривает построение устройства (распознавателя),т.е. автомата, который на входе получает цепочку символов, а на выходе выдает ответ, принадлежит ли или нет эта цепочка заданному языку.
I.5. Синтаксис и семантика языка
В любом языке можно выделить синтаксис и семантику. Кроме того, трансляторы умеют делать с лексическими конструкциями (лексемами),которые задаются лексикой языка. Синтаксис языка – это любой набор правил, определяющий допустимые конструкции языка. Он определяет «форму» языка, т.е. задает набор цепочек символов, которые принадлежат языку. Чаще всего он задается в виде строго набора правил, но полностью это утверждение справедливо для чисто формальных языков.
Для большинства языков программирования набор заданной синтаксической конструкции нуждается в дополнительных пояснениях. Например строка 3+2 является арифметическим выражением ,а тройка 32+ не является.
Семантика языка – это раздел языка, определяющий значения предложений языка. Она определяет содержание языка, т.е. задает смысл для всех допустимых цепочек языка. Для большинства языков она определяет неформальными методами отношение между знаками и тем, что они обозначают изучается семантикой. Чисто формальные языки лишены какого-либо смысла. Для записанного примера, используя семантику алгебры можно сказать, что строка 3+2 есть сумма чисел 3 и 2, а так же то, что 3+2=5 –это истинное выражение. Изложить синтаксис алгебры проще, чем ее семантику(хотя в случае алгебры семантику можно определить формально).
Лексика – совокупность слов, словарный запас языка. Слово или лексическая единица(лексема языка) это конструкция, которая состоит из элементов алфавита языка и не содержит в себе других конструкций. Она может содержать только элементарные символы и не может содержать в себе других лексических единиц. Лексическими единицами (лексемами) для русского языка являются слова русского языка, а знаки препинания и пробелы – это разделители необразованных лексем. Лексическими единицами алгебры являются числа, знаки математических операций, обозначение функций неизвестных величин. В языках программные лексические единицы – это ключевые слова, идентификаторы, константы, метки, знаки препинания, разделители (скобки, точка запятой и др.)