Методы трансляции-1 2022

Содержание

Слайд 2

Формальные языки

Алфавит — конечное множество символов. А = {0,1} — алфавит из

Формальные языки Алфавит — конечное множество символов. А = {0,1} — алфавит
двух символов: 0 и 1. Предложения языка – цепочки символов. Множество всех цепочек над алфавитом А обозначается А*.
Определение. Формальный язык L над алфавитом А — это подмножество цепочек из множества всех цепочек алфавита А: L ⊆ А*.

Слайд 3

Примеры

Конечный язык можно задать явно: L = {00, 01, 10, 11}. Бесконечный

Примеры Конечный язык можно задать явно: L = {00, 01, 10, 11}.
язык описывается либо словами, либо формально, чтобы определить цепочки, входящие в него.
Пример: язык состоит из цепочек над алфавитом {0,1}, начинающихся с единицы, за которой следует чётное число нулей: L0 = {1, 100, 10000, 1000000, …}.
Пример: в язык входят цепочки из 0 и 1 с нечётной длиной и количеством нулей не более 5.
Пример: язык – последовательность натуральных чисел в десятичной записи, разделённых запятыми.

Слайд 4

Задачи

Построить формальное описание языка (грамматику);
по описанию языка определить, принадлежит ли ему заданная

Задачи Построить формальное описание языка (грамматику); по описанию языка определить, принадлежит ли
цепочка (синтаксический анализ);
написать программу, которая проверит принадлежность цепочки языку и преобразует её в цепочку другого языка (транслятор).

Слайд 5

Формальные грамматики (1)

Формальной грамматикой называется четвёрка G = (А, V, P, s),

Формальные грамматики (1) Формальной грамматикой называется четвёрка G = (А, V, P,
где
А — конечное множество терминальных символов (терминалов);
V — конечное множество нетерминальных символов (нетерминалов), V ∩ А = ∅;
P — конечное множество правил вида α → β, где α и β – цепочки на алфавитом А U V, причём в α должен обязательно входить хотя бы один нетерминал;
s ∈ V — начальный символ.

Слайд 6

Формальные грамматики (2)

Вывод цепочек языка производится следующим образом:
в правиле α →

Формальные грамматики (2) Вывод цепочек языка производится следующим образом: в правиле α
β цепочка символов α называется левой частью, β — правой;
левая часть должна содержать хотя бы один нетерминал;
правая часть — произвольная цепочка из нетерминалов и терминалов;
если правая часть правила пустая, оно называется пустым или e-правилом).
язык L0 из слайда 3 определяется так:
G0 = ({0, 1}, {s, u}, {s → 1u, s → 1, u → 00u, u → 00}, s)

Слайд 7

Формальные грамматики (3)

Обозначения
цепочки из (А U V)* обозначаются строчными греческими буквами;
цепочки

Формальные грамматики (3) Обозначения цепочки из (А U V)* обозначаются строчными греческими
из А* обозначаются прописными греческими;
терминалы обозначаются прописными латинскими буквами (B,C, … Z) или цифрами;
нетерминалы обозначаются строчными латинскими (s, t, u, v, … , z).

Слайд 8

Формальные грамматики (4)

В процессе вывода строится последовательность цепочек в соответствии с правилами

Формальные грамматики (4) В процессе вывода строится последовательность цепочек в соответствии с
грамматики: каждая следующая цепочка получается из предыдущей заменой в ней подстроки, равной левой части правила, на правую его часть.
Пример — вывод цепочки 10000 в грамматике G0:
s ⇒ 1u ⇒ 100u ⇒ 10000
Для наглядности перенумеруем правила грамматики:
1.s → 1u, 2.s → 1, 3.u → 00u, 4.u → 00;
Вывод: s ⇒ 1u ⇒ 100u ⇒ 10000.
1 3 4

Слайд 9

Типы языков по Хомскому

Тип 0 – неограниченные грамматики (рекурсивно вычислимые)
Тип 1 –

Типы языков по Хомскому Тип 0 – неограниченные грамматики (рекурсивно вычислимые) Тип
контекстно-зависимые и неукорачивающие грамматики
Тип 2 – контекстно-свободные (КС) грамматики
Тип 3 – регулярные (автоматные) грамматики  
Далее будем рассматривать только грамматики типа 2 и типа 3.

Слайд 10

Формальные языки: операции

Формальный язык – множество терминальных цепочек.
Над ними определены теоретико-множественные операции:

Формальные языки: операции Формальный язык – множество терминальных цепочек. Над ними определены
объединение, пересечение, дополнение, декартово произведение.
Кроме того, определяются ещё две операции: конкатенация и итерация.
Основа первой – конкатенация цепочек α и β, записывается αβ.
Возведение в степень определяется так: α2 = αα, α3 = ααα …
По определению α0 = e (пустая цепочка).

Слайд 11

Формальные языки: конкатенация

Конкатенация языков L1 и L2 – множество, содержащее все цепочки,

Формальные языки: конкатенация Конкатенация языков L1 и L2 – множество, содержащее все
составленные из конкатенаций двух цепочек, первая из L1, вторая — из L2:
L = L1L2 = {αβ | α ∈ L1, β ∈ L2}
Возведение языка в степень: L12 = L1L1, L13 = L1L1L1 ...
Конкатенация и объединение подчиняются тем же законам, что и умножение и сложение, но конкатенация не коммутативна.
Например, {α}({β} U {γ}) = {αβ} U {αγ}, где α, β и γ –цепочки.

Слайд 12

Формальные языки: вывод

Множество выводимых цепочек в грамматике (А, V, P, s) рекурсивно

Формальные языки: вывод Множество выводимых цепочек в грамматике (А, V, P, s)
задаётся так:
s — выводимая цепочка;
если αγβ — выводимая цепочка и γ → δ ∈ P, то αδβ — выводимая цепочка.
Знак вывода ⇒ означает бинарное отношение на множестве цепочек над алфавитом А U V. Из теории бинарных отношений ⇒+ обозначает транзитивное замыкание отношения, а ⇒* — рефлексивно-транзитивное замыкание.
Для вывода s ⇒ 1u ⇒ 10u можно записать s ⇒* 10u. При записи α ⇒* β говорят, что β выводима из α, а при записи α ⇒ β — непосредственно выводима.

Слайд 13

Формальные языки: определение

Язык, порождаемый грамматикой G = (А, V, P, s) —это

Формальные языки: определение Язык, порождаемый грамматикой G = (А, V, P, s)
множество терминальных цепочек, выводимых из начального символа:
L(G) = {Φ ∈ А* | s ⇒* Φ}.
Грамматики, в зависимости от вида правил, порождают разные классы языков. В теории компиляции наибольшую роль играют контекстно-свободные языки, порождаемые КС-грамматиками.
КС-грамматика — грамматика, в которой левые части правил состоят ровно из одного нетерминала.

Слайд 14

Формальные языки: нотация

Существует несколько форм записи правил грамматики.
Для правил с одинаковыми

Формальные языки: нотация Существует несколько форм записи правил грамматики. Для правил с
левыми частями их правые части называются альтернативами. Эти правила объединяются, правые части разделяются знаком «|»
Пример: правила грамматики G0: s→1u | 1, u→00u | 00
В расширенной форме Бэкуса-Наура (РБНФ) вместо «→» используется «=», в конце правила ставится точка.
Для выделения общих частей в альтернативах служат круглые скобки : s = 1(u | e). u = 00 (u | e).
Для обозначения повторения фрагмента в правой части правила ноль или более раз используются фигурные скобки: s = 1(u | e). u = {00}.

Слайд 15

Дерево вывода (1)

Основная задача синтаксического анализа — построение вывода в заданной грамматике.

Дерево вывода (1) Основная задача синтаксического анализа — построение вывода в заданной
Однако важен не только сам факт существования вывода, но и все промежуточные цепочки вывода.
Рассмотрим грамматику ({с, +, v, =}, {s, expr, term}, P, s) с правилами
s → v = expr
expr → term + term
term → c | v
Вывод для цепочки v = с + v :
s ⇒ v = expr ⇒ v = term + term ⇒ v = с + term ⇒ v = с + v

Слайд 16

Дерево вывода (2)

Дерево вывода — граф с вершинами, помеченными нетерминалами и терминалами.

Дерево вывода (2) Дерево вывода — граф с вершинами, помеченными нетерминалами и
Дуги направлены к непосредственно выводимым символам.

Слайд 17

Неоднозначный вывод (1)

Рассмотрим условный оператор в языке Паскаль.
oper → if b

Неоднозначный вывод (1) Рассмотрим условный оператор в языке Паскаль. oper → if
then oper | if b then oper else oper
Возможны два вывода:
oper ⇒ if b then oper ⇒ if b then if b then oper else oper
oper ⇒ if b then oper else oper ⇒ if b then if b then oper else oper
Из-за неоднозначности в описании языка сделана оговорка: «else относится ко второму if».
В дальнейшем автор языка Н.Вирт исправил эту ситуацию в языках Модула и Оберон.

Слайд 18

Неоднозначный вывод (2)

В теории есть понятие неоднозначной грамматики, в которой существует хотя

Неоднозначный вывод (2) В теории есть понятие неоднозначной грамматики, в которой существует
бы одна цепочка, допускающая два различных вывода.
Вывод называется левым (правым), если на каждом шаге применяется правила для самого левого (правого) нетерминала.
Если грамматика однозначна, дерево вывода получается одинаковым независимо от того, производится левый или правый вывод.

Слайд 19

Эквивалентные грамматики

Грамматики, которые порождают один и тот же язык, называются эквивалентными.
Пример: грамматика

Эквивалентные грамматики Грамматики, которые порождают один и тот же язык, называются эквивалентными.
с правилами
s → 1u, u → 00u, u → e
эквивалентна грамматике G0.
Здесь есть пустое правило, неудобное для анализа.
Чтобы его убрать, подставим вместо нетерминала пустого правила пустую цепочку в другие правила.
Пример: s → 1u|1, u → 00u|00
Грамматики, отличающиеся только на правило s → e, называются почти эквивалентными.

Слайд 20

Нормальные формы грамматик (1)

Недостижимые нетерминалы не могут появиться ни в одной цепочке,

Нормальные формы грамматик (1) Недостижимые нетерминалы не могут появиться ни в одной
выводимой из начального символа.
Пустые нетерминалы – из которых нельзя вывести ни одной терминальной цепочки.
Процесс преобразования грамматики к эквивалентной без недостижимых и пустых нетерминалов –приведение, полученная грамматика — приведенная.
К понятию приведенной грамматики обычно добавляют условие отсутствия циклических нетерминалов, для которых возможен вывод u ⇒* u.

Слайд 21

Нормальные формы грамматик (2)

Грамматика имеет нормальную форму Хомского, если все правые части

Нормальные формы грамматик (2) Грамматика имеет нормальную форму Хомского, если все правые
состоят из двух нетерминалов или из одного терминала.
Грамматика имеет нормальную форму Грейбах, если правые части всех правил (кроме правила s → e) начинаются с терминала, за которым следуют нетерминалы.
Если все эти терминалы разные – грамматика разделённая.
Грамматика не имеет левой рекурсии, если ни для одного нетерминала невозможен вывод u ⇒* uα.

Слайд 22

Регулярные грамматики и выражения (1)

Грамматика называется регулярной (автоматной), если все правила имеют

Регулярные грамматики и выражения (1) Грамматика называется регулярной (автоматной), если все правила
вид u → Bv или u → B, где B — терминал, u и v — нетерминалы. Допускается пустое правило для начального символа s → e, но тогда s не должен встречаться в правых частях других правил.
Регулярные грамматики – частный случай КС-грамматик, они порождают класс регулярных языков.

Слайд 23

Регулярные грамматики и выражения (2)

Регулярный язык может порождаться и нерегулярной грамматикой.
Пример

Регулярные грамматики и выражения (2) Регулярный язык может порождаться и нерегулярной грамматикой.
– грамматика G0 с правилами
{s → 1u, s → 1, u → 00u, u → 00}.
Её легко преобразовать в эквивалентную регулярную грамматику G1, заменив каждое из двух последних правил на два новых:
{s → 1u, s → 1, u → 0x, x → 0u, u → 0y, y → 0}.
Вывод цепочки 10000 в грамматике G1 :
s ⇒ 1u ⇒ 10x ⇒ 100u ⇒ 1000y ⇒ 10000

Слайд 24

Регулярные грамматики и выражения (3)

Таким способом можно заменить правила, у которых перед

Регулярные грамматики и выражения (3) Таким способом можно заменить правила, у которых
нетерминалом стоит любое число терминалов.
Такие грамматики называются праволинейными.
Регулярный язык порождается и леволинейными грамматиками, их правила имеют вид u ⇒* vΦ или u → B, где Φ – цепочка из терминалов.
Регулярный язык представляет собой регулярное множество, которое может быть определено и без понятия грамматики.

Слайд 25

Регулярное множество (определение)

пустое множество ∅ — регулярное множество;
множество из пустой цепочки {ε}

Регулярное множество (определение) пустое множество ∅ — регулярное множество; множество из пустой
— регулярное множество;
множество {a} (атомарное), где a∈A, — регулярное множество;
если L1 и L2 — регулярные множества, то L1 U L2, L1L2 и L1* — регулярные множества.
Последовательно применяя к атомарным множествам операции объединения, конкатенации и итерации (регулярные операции или операциями Клини), можно получить любое регулярное множество.

Слайд 26

Регулярное множество (пример)

Язык L0 = {0, 1, 100, 10000, …} строится из

Регулярное множество (пример) Язык L0 = {0, 1, 100, 10000, …} строится
атомарных множеств {1} и {0} : {0}U{1}({0}{0})*.
Если убрать фигурные скобки, а знак объединения заменить на «+», получим регулярное выражение:
0+1(00)*.
Приоритет конкатенации выше, чем объединения, приоритет итерации выше, чем у конкатенации, значит, можно не писать лишние скобки.
Пример: выражение 0+100* определяет регулярное множество, в которое входит 0 и цепочки, начинающиеся с 1, за которой следует не менее одного нуля.

Слайд 27

Регулярное выражение (1)

С помощью операций можно составлять уравнения из констант и переменных,

Регулярное выражение (1) С помощью операций можно составлять уравнения из констант и
значения которых –регулярные множества (регулярные выражения).
В уравнении x = ax + b справа записано объединение двух множеств ax и b. Значит, в x входит цепочка из символа b.
Множество ax — это множество цепочек с первым символом a, за которым следует цепочка из x. Значит, ab входит в x.
Если ab входит в x, то aab входит в x. Итак, получим, что множество x = {b, ab, aab, aaab, …}, а выражением, определяющим x, будет a*b.
В исходном уравнении в роли a и b могут быть не отдельные символы, а регулярные выражения.

Слайд 28

Регулярное выражение (2)

Представим правила грамматики s → 1u | 1, u →

Регулярное выражение (2) Представим правила грамматики s → 1u | 1, u
00u | 00 в виде системы уравнений:
s = 1u + 1
u = 00u + 00
Второе уравнение имеет тот же вид, что и x = ax + b, и оно имеет решение u = (00)* 00. Подставим u в первое уравнение:
s = 1(00)* 00 + 1 = 1((00)* 00 + e) = 1(00)*.
Первое преобразование — 1 выносим за скобки, второе —выражение (00)* 00 + e заменяем эквивалентным и убираем лишние скобки.
Доказано, что подобным образом решаются системы уравнений любой праволинейной грамматики. Другими словами, регулярные грамматики порождают регулярные множества.

Слайд 29

Конечный автомат (определение)

Конечный автомат — это K = (Q, A, δ, q0, F),

Конечный автомат (определение) Конечный автомат — это K = (Q, A, δ,
где
Q — конечное множество состояний;
A — конечное множество входных символов (алфавит);
δ — функция переходов, δ: Q × A → 2Q;
q0 — начальное состояние, q0 ∈ Q;
F — множество конечных состояний, F ⊆ Q.

Слайд 30

Конечный автомат описание (1)

Конечный автомат — это частный случай машины Тьюринга, но нет

Конечный автомат описание (1) Конечный автомат — это частный случай машины Тьюринга,
записи на ленту, головка движется только вправо, результат работы определяется состоянием, в котором он оказался после прочтения цепочки.

Слайд 31

Конечный автомат описание (2)

Конечный автомат — абстрактная машина с лентой, разбитой на клетки,

Конечный автомат описание (2) Конечный автомат — абстрактная машина с лентой, разбитой
в которых находятся входные символы.
У автомата есть считывающая головка, за один такт работы она передвигается по ленте вправо на клетку.
Автомат находится в одном из состояний. В зависимости от состояния и символа в текущей клетке автомат переходит в новое состояние, которое определено функцией перехода.
Значение функции перехода — подмножество M ⊆ Q. Если для ∀ M: │M│= 1, автомат детерминированный. В противном случае он недетерминированный.

Слайд 32

Конечный автомат конфигурация (1)

В начале работы автомат находится в начальном состоянии, головка

Конечный автомат конфигурация (1) В начале работы автомат находится в начальном состоянии,
стоит на самом левом символе цепочки.
Конфигурация автомата — пара из текущего состояния и непрочитанной части входной цепочки: (q, Φ) . Начальная конфигурация состоит из начального состояния и входной цепочки, заключительная — из конечного состояния и пустой цепочки.
Переход от одной конфигурации к другой обозначается знаком «├», задающим бинарное отношение на множестве конфигураций.

Слайд 33

Конечный автомат конфигурация (2)

Цепочка считается допустимой, если существует хотя бы одна последовательность конфигураций,

Конечный автомат конфигурация (2) Цепочка считается допустимой, если существует хотя бы одна
переводящая начальную конфигурацию в заключительную:
L(K) = {Φ ∈ А* | (q0, Φ) ├* (qk, e), qk ∈ F}.
.

Слайд 34

Конечный автомат пример (1)

Автомат K1 = ({s, u, x, y, t} {0, 1},

Конечный автомат пример (1) Автомат K1 = ({s, u, x, y, t}
δ, s, {t}), где δ:
δ(s, 1) = {u, t}, δ(u, 0) = {x, y},
δ(x, 0) = {u}, δ(y, 0) = {t}.
Будет ли допустима цепочка 10000?
При входной цепочке 10000 автомат должен работать так:
(s,10000) ├ (u,0000) ├ (x,000) ├ (u,00) ├ (y,0) ├ (t,е).
Так как автомат недетерминированный, на первом шаге он мог бы выбрать не состояние u, а состояние t, но тогда он не дочитал бы цепочку до конца.

Слайд 35

Конечный автомат правила построения по грамматике

состояния автомата соответствуют нетерминалам;
добавлено конечное состояние t;
для каждого

Конечный автомат правила построения по грамматике состояния автомата соответствуют нетерминалам; добавлено конечное
правила грамматики вида u → Bv установлено значение функции перехода δ(u, B) = v;
для каждого правила грамматики вида u → B установлено значение функции перехода δ(u, B) = t.
Если для некоторой пары (u, B) окажется более одной функции перехода, получится недетерминированный автомат, в противном случае — детерминированный.
Аналогично по конечному автомату можно построить эквивалентную грамматику.

Слайд 36

Конечный автомат задание функции перехода

Функция перехода может быть представлена в виде таблицы переходов

Конечный автомат задание функции перехода Функция перехода может быть представлена в виде
или в виде диаграммы конечного автомата.
Таблица переходов и диаграмма автомата K1.

Слайд 37

Конечный автомат диаграмма состояний

Диаграмма состояний — ориентированный граф, его вершины помечены состояниями, дуги

Конечный автомат диаграмма состояний Диаграмма состояний — ориентированный граф, его вершины помечены
— входными символами.
Дуга от вершины u к вершине v помечается символом B, если v ∈ δ(u, B).
Построение регулярной грамматики по диаграмме: для каждой дуги от u к v, помеченной символом B, задаем правило вывода u → Bv, а для дуги из u в конечное состояние — правило u → B. Конечные состояния выделяются на графе двойным или жирным кружком, а начальное — небольшой входной стрелкой.

Слайд 38

Конечный автомат диаграмма состояний

Автомат K1 можно упростить и свести к эквивалентному автомату с

Конечный автомат диаграмма состояний Автомат K1 можно упростить и свести к эквивалентному
меньшим числом состояний:
({s, u, v}, {0, 1}, δ, s, {u}).
Его диаграмма:

Слайд 39

Конечный автомат недетерминированный и детерминированный

При недетерминированном автомате нужно произвести перебор вариантов в тех

Конечный автомат недетерминированный и детерминированный При недетерминированном автомате нужно произвести перебор вариантов
состояниях, где функция перехода многозначна.
Но для него всегда можно построить эквивалентный детерминированный автомат.
Состояния детерминированного автомата K', который строится по недетерминированному автомату K, представляются подмножествами состояний K, а функция перехода δ' определяется так:
δ'(S, B) = S' для всех S ⊆ Q ,
где S' = {p | δ(q, B) содержит p для некоторого q ∈ S}.

Слайд 40

Конечный автомат детерминированный

Если в автомате K число состояний n , в автомате K'

Конечный автомат детерминированный Если в автомате K число состояний n , в
в общем случае может оказаться 2n-1 состояний. Для построения K' проще начинать с начального состояния и последовательно добавлять новые.

Слайд 41

Построение ДКА по КА пример (1)

Построим детерминированный автомат K'1 для автомата K1.
Из s

Построение ДКА по КА пример (1) Построим детерминированный автомат K'1 для автомата
есть переходы по 1 в состояния u и t, тогда в K'1 будет переход по 1 из {s} в {u, t}, т.е. δ'({s}, 1) = {u, t}.
Чтобы построить переход из {u, t} по символу 0, нужно объединить подмножества состояний, в которые K1 переходит по символу 0 из u и из t. То же самое и для символа 1.
Получаем, что для 1 переходов нет, а δ'({u, t}, 0) = {x, y}. Объединяя подмножества состояний для x и y, получим δ'({x, y}, 0) = {u, t}. Состояние {u, t} уже появлялось, так что построение завершается. Конечным состоянием построенного автомата будет состояние {u, t}.

Слайд 42

Построение ДКА по КА пример (2)

Диаграмма построенного детерминированного автомата.

Построение ДКА по КА пример (2) Диаграмма построенного детерминированного автомата.