- •Московский автомобильно-дорожный государственный технический университет (мади)
- •I.Формальные языки и грамматики
- •I.1. Цепочки символов
- •I.2. Операции над цепочками символов
- •I.3. Понятие языка
- •I.4. Способы задания языка
- •I.5. Синтаксис и семантика языка
- •I.6. Определение грамматики
- •I.8. Принцип рекурсии в правилах грамматики
- •I.7. Пример грамматики
- •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.Формальные языки и грамматики
I.1. Цепочки символов
Понятие символа или буквы является базовым в теории формальных языков. Цепочкой символов или строкой называют произвольную упорядочную конечную последовательность символов, записанных один за одним.
a d
b c
Обозначение цепочек α,β,γ.
Для цепочки символов имеет значение три фактора:
1.состав символов
2. их количество
3. порядок символов
<<a>> и <<aa>>,<<аб>> и <<ва>> - различные цепочки символов.
Цепочки α,β – равны, совпадают (α=β), если они имеют один и тот же состав символов, одно и тоже количество и одинаковый порядок следования символов в цепочке. Количество символов в цепочке называется длиной цепочки.
│α│ - длина цепочки символов отображающая таким образом │α│
Если α=β,то │α│=│ β │
I.2. Операции над цепочками символов
1)Конкатенация (сложение, объединение 2ух цепочек)
Дописывание 2ой цепочки в конце 1ой
Конкатенация цепочек α и β записывается αβ
Выполняется следующем образом:
если α=аб,β=вг,то αβ=абвг
Цепочку символов можно разбить на несколько подцепочек разными способами произвольным образом
Например: можно представить в виде комбинации цепочек
γ=абвг α=аб β=вг (γ= αβ)
или
υ=а и ω=ввг (γ= υа)
2)Если некоторую цепочку разбить на составляющие ее подцепочки,а затем заменить одну из подцепочек на произвольную, то в результате получится новая цепочка символов. Такое действие называется заменой или подстановкой.
Пример: разобьем цепочку γ=абвг на α=а, ω=б, β=вг (γ= α ω β) и выполним подстановку
υ =аба вместо подцепочки ω и получаем γ = аабавг(γ’= α υ β)
3)Обращение цепочки α αR
Обращение цепочки α обозначается αR
Если α= <<абвг>>, то αR = <<гвба>>
α , β : (α β)R = βR
αR
4)Итерация (повторение цепочки n-раз, где n ∈ N и n > αn)
Это действие (n ∈ N) конкатенация цепочки самой собой n раз.
Для этого действия справедливы следующие равенства :
α : α1=а, α2=аа …
При n=0 результатом будет пустая цепочка, которая не содержит ни одного символа (обознач. λ или [е,ε])
Для пустой цепочки справедливы следующие равенства
│ λ │=0
α: λ α = α λ= α
λR = λ
n=0 : λn = λ
α: α0 = λ
I.3. Понятие языка
В общем случае язык – это заданный набор символов и правил, устанавливающий способы комбинаций этих символов между собой для записи осмысленных текстов.
Основой любого естественного или искусственного языка является алфавит, определяющий набор (множество) допустимых символов языка. Это множество символов обозначается V.
Цепочка символов α является цепочкой над алфавитом
α V : α(V) ,если в нее входят только символы ,принадлежащие V.
Для любого алфавита V пустая цепочка λ может являться или не являться цепочкой λ(V).Это условие оговаривается дополнительно. Если V некоторый алфавит, то
V+ – это множество всех цепочек над алфавитом V
V* – это множество всех цепочек над алфавитом λ(V)
V* = V+ ∪ { λ }
Языком L над алфавитом V: L(V) называется некоторое счетное подмножество цепочек конечной длины из множества всех цепочек над алфавитом V. Цепочку символов принадлежащей заданному языку часто называют предложениями языка, множество символов некоторого языка L(V) множеством предложений этого языка.
