- •Часть 1
- •Строка символов: определение, основные операции обработки
- •Язык: определение, основные элементы, способы задания
- •Грамматика языка: определение, способы задания
- •Графический язык
- •Классификация языков и грамматик
- •Понятие вывода в языке, виды вывода, дерево вывода
- •Распознаватели: определение, основные операции, классификация
- •Конечные автоматы
- •Основные фазы компиляции программы. Фазы компиляции
- •Лексический анализ: основные операции, виды лексем, способы реализации таблиц лексем
- •Синтаксический анализ: назначение, основные операции
- •Нисходящий распознаватель с подбором альтернатив
Графический язык
Грамматика описывается в виде графа.
– терминальные символы
– нетерминальные символы
Классификация языков и грамматик
Классификация Холмского: 4 вида грамматик:
Грамматики типа 0 – грамматики с фразовой структурой. Грамматики естественных языков. На правила не накладывается ограничений.
G = (VT, VN, P, S): V = VT∪VN; α→β; α ∈ V+, β ∈ V*
Грамматики типа 1:
а) контекстно-зависимые грамматики (КЗ)
Правило вывода:
α1Aα2→ α1βα2
α1, α2 ∈ V*; A ∈ VN; β ∈ V+
α1, α2 – контекст
б) неукорачивающие грамматики (НУ)
Правило вывода:
α→β; α, β ∈ V+; |β|≥|α|
Общее название – НУКЗ.
Грамматики типа 2 – контекстно-свободная грамматика
Правило вывода:
A→β; A ∈ VN; β ∈ V+
а) неукорачивающие (НКС): β ∈ V+
б) укорачивающие (УКС): β ∈ V*
Используются для описания синтаксиса языков программирования.
Грамматики типа 3 – регулярные грамматики
а) леволинейные:
A→Bα; A, B ∈ VN; α ∈ VT*
б) праволинейные
A→αB; A, B ∈ VN; α ∈ VT*
Лексика ЯП описывается на основе грамматик типа 3.
0
1
3
2
В соответствии с грамматиками классифицируются и языки:
Языки с фразовой структурой. Для языков типа 0 невозможно построить транслятор, который гарантированно бы выполнял разбор предложений языка за ограниченное время на основе ограниченных ресурсов
Контекстно-зависимые языки. Время распознавания (трансляции) экспоненциально зависит от длины исходной цепочки символов
Контекстно-свободные языки. Зависимость времени распознавания цепочки от длины цепочки является степенной (t ≈ ln, n = 2|3|4)
Регулярные языки. Время распознавания прямо пропорционально длине цепочки.
Понятие вывода в языке, виды вывода, дерево вывода
Вывод – процесс порождения предложений языка на основе продукций грамматики.
Цепочка β=δ1γδ2 называется непосредственно выводимой из цепочки α=δ1ωδ2, если существует правило вывода (ω→γ)∈P в рамках грамматики G=(VT, VN, P, S), V=VT∪VN, δ1, δ2, γ ∈ V*; ω ∈ V+.
Цепочка β называется непосредственно выводимой из цепочки α (α=>*β), если
β непосредственно выводится из α (α=>β)
существует такая цепочка γ, которая выводится из α (α=>*γ), а β непосредственно выводится из γ (γ=>*β)
α => γ => γ1 => γ2 => γ3 => … => γn => β (n≥1) – цепочка вывода (вывод). Каждый шаг здесь – шаг вывода.
Если n>1, то α=>+β
α=>4β – цепочка из 4 шагов
3
γ1 => γ2 – шаг 3
Вывод называется законченным, если больше нельзя сделать ни одного шага. Результатом может быть либо пустая цепочка, либо цепочка только из терминальных символов (конечная цепочка вывода).
Цепочка α ∈ V+ называется сентенциальной формой грамматики, если она выводится непосредственно из целевого символа грамматики: S => *α
Цепочка α ∈ VT* называется конечной сентенциальной формой, если она получена в результате законченного вывода (предложения).
Язык L – это множество всех конечных сентенциальных форм грамматики G.
L(G) = {α ∈ VT*; S => *α}
Вывод бывает двух видов: левосторонний и правосторонний. При левостороннем выводе на каждом очередном шаге правило вывода применяется к крайнему левому нетерминальному символу цепочки. При правостороннем выводе – наоборот.
Дерево вывода – это граф, который соответствует следующему условию: каждая вершина графа обозначается символом грамматики, который может принадлежать к множеству терминальных и нетерминальных символов.
Корень дерева – целевой символ грамматики S.
Листья дерева – терминальные символы или пустая цепочка λ.
Если в дереве есть некоторая вершина А, и связанные с этой вершиной узлы bi∈(VT∪VN)∪λ, это значит, что существует правило:
А → b1|b2|b3|…|bn) ∈ P
Дерево вывода может строиться сверху вниз и снизу вверх (левосторонний и правосторонний вывод)
Построение дерева вывода:
Определение целевого символа S
Выбор подходящего правила и раскрытие S на несколько символов I уровня
Выбор крайней нетерминальной вершины (левой) и раскрытие на несколько вершин следующего уровня с помощью соответствующего правила
Шаг 3) повторяется до тех пор, пока не будут получены вершины только их терминальных символов.