Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
- | * Авторы рукописной версии: Синдеев Михаил (оригинал), Комаров Сергей (обработка)
| + | == From Ebaums Inc to MurkLoar. == |
- | | + | We at EbaumsWorld consider you as disgrace of human race. |
- | == Цепочка == | + | Your faggotry level exceeded any imaginable levels, and therefore we have to inform you that your pitiful resourse should be annihilated. |
- | '''Цепочка''' — последовательность символов.
| + | Dig yourself a grave - you will need it. |
- | | + | |
- | '''Терминальная цепочка''' — последовательность терминальных символов.
| + | |
- | | + | |
- | == Язык ==
| + | |
- | '''Язык''' — множество терминальных цепочек.
| + | |
- | | + | |
- | == Грамматика ==
| + | |
- | '''Грамматика''' — G = (N, T, P, S)
| + | |
- | * N — множество нетерминальных символов (напр. A, B, C...)
| + | |
- | * T (иногда E) — алфавит терминальных символов (N ∩ T = ∅)
| + | |
- | * P — конечное множество правил вывода
| + | |
- | ** P = {α → β | α ∈ (N ∪ T)<sup>+</sup>; β ∈ (N ∪ T)*}
| + | |
- | * S ∈ N — аксиома (или начальный символ) грамматики
| + | |
- | | + | |
- | == Сентенциальная форма ==
| + | |
- | '''Сентенциальная форма''' — последовательность символов (терминалов и нетерминалов), выводимых из начального символа (аксиомы)
| + | |
- | | + | |
- | == Язык, порождённый грамматикой ==
| + | |
- | '''Язык, порождённый грамматикой''' — L(G) = {W | W ∈ T*, S ⇒<sup>+</sup> W}
| + | |
- | | + | |
- | '''Язык, порождённый грамматикой''' — множество всех терминальных цепочек, выводимых из аксиомы грамматики
| + | |
- | | + | |
- | == Иерархия по Хомскому ==
| + | |
- | * '''0:''' произвольные грамматики
| + | |
- | * '''1:''' неукорачивающие (контекстно-зависимые) грамматики
| + | |
- | ** α → β, |α| ≤ |β|
| + | |
- | ** допускается S → ε, если S не входит ни в какую правую часть
| + | |
- | * '''2:''' контекстно-свободные
| + | |
- | ** A → α, α ∈ (N ∪ T)*
| + | |
- | * '''3:''' праволинейные (A → w, A → wB, w ∈ T*), леволинейные (A → w, A → Bw, w ∈ T*),
| + | |
- | | + | |
- | Из определения следует, что Z<sub>0</sub> ⊇ Z<sub>1</sub> ⊇ Z<sub>2</sub> ⊇ Z<sub>3</sub>.
| + | |
- | | + | |
- | Существует теорема, которая доказывает (конструктивно, путём построения соответствующих грамматик), что Z<sub>0</sub> ⊃ Z<sub>1</sub> ⊃ Z<sub>2</sub> ⊃ Z<sub>3</sub>.
| + | |
- | | + | |
- | == Машина Тьюринга ==
| + | |
- | '''Машина Тьюринга''' — T<sub>m</sub> = (Q, Г, Σ, D, q<sub>0</sub>, F)
| + | |
- | * Q — конечное множество состояний
| + | |
- | * Г — конечное множество символов (конечный алфавит)
| + | |
- | * Σ — входной алфавит - подмножество Г, не включающее пустой символ
| + | |
- | * D — правила перехода
| + | |
- | ** D: (Q\F) × Г → Q × Г × {L, R} — для детерминированной машины Тьюринга
| + | |
- | ** D: (Q\F) × Г → 2<sup>Q × Г × {L, R}</sup> — для недетерминированной машины Тьюринга
| + | |
- | * q<sub>0</sub> ∈ Q — начальное состояние
| + | |
- | * F ⊆ Q — множество конечных состояний
| + | |
- | | + | |
- | == Универсальная машина Тьюринга ==
| + | |
- | '''Универсальная машина Тьюринга''' — такая машина Тьюринга, которая моделирует любую машину Тьюринга.
| + | |
- | | + | |
- | == Рекурсивно-перечислимый язык ==
| + | |
- | '''Язык''' является '''рекурсивно-перечислимым''', если он может быть распознан машиной Тьюринга.
| + | |
- | ''(доп.)'' '''Язык''' - '''рекурсивно-перечислим''', если имеется процедура, распознающая предложения языка.
| + | |
- | | + | |
- | == Линейно-ограниченный автомат ==
| + | |
- | '''Линейно-ограниченный автомат''' — это машина Тьюринга, которая не может выходить за область входной строки.
| + | |
- | | + | |
- | == Лемма о разрастании ==
| + | |
- | Если язык L — регулярный, то ∃ k: ∀ w ∈ L, |w| ≥ k | w = xyz, 0 < |y|, |xy| ≤ k, xy<sup>i</sup>z ∈ L, ∀ i ≥ 0
| + | |
- | | + | |
- | == Неоднозначная грамматика ==
| + | |
- | '''Грамматика''' называется '''неоднозначной''', если для некоторой цепочки существует хотя бы два дерева вывода.
| + | |
- | | + | |
- | == Левосторонний вывод ==
| + | |
- | '''Левосторонний вывод''' — такой вывод, на каждом шаге которого заменяется самый левый нетерминал.
| + | |
- | | + | |
- | == Магазинный автомат ==
| + | |
- | '''Магазинный автомат''' — M = (Q, T, Г, D, q<sub>0</sub>, z<sub>0</sub>, F)
| + | |
- | * Q — конечное множество состояний
| + | |
- | * T — конечный входной алфавит
| + | |
- | * Г — конечный алфавит магазинных символов
| + | |
- | * D — D: Q × (T ∪ {ε}) × Г → 2<sup>Q × Г*</sup>
| + | |
- | * q<sub>0</sub> ∈ Q — начальное состояние
| + | |
- | * z<sub>0</sub> — начальный символ магазина
| + | |
- | * F ⊆ Q — множество конечных состояний
| + | |
- | | + | |
- | == Расширенный магазинный автомат ==
| + | |
- | | + | |
- | Отличается от магазинного автомата только областью определения D.
| + | |
- | | + | |
- | '''Расширенный магазинный автомат''' — M = (Q, T, Г, D, q<sub>0</sub>, z<sub>0</sub>, F)
| + | |
- | * Q — конечное множество состояний
| + | |
- | * T — конечный входной алфавит
| + | |
- | * Г — конечный алфавит магазинных символов
| + | |
- | * D — D: Q × (T ∪ {ε}) × Г* → 2<sup>Q × Г*</sup>
| + | |
- | * q<sub>0</sub> ∈ Q — начальное состояние
| + | |
- | * z<sub>0</sub> — начальный символ магазина
| + | |
- | * F ⊆ Q — множество конечных состояний
| + | |
- | | + | |
- | == Грамматика в нормальной форме Хомского ==
| + | |
- | | + | |
- | Грамматика находится '''в нормальной форме Хомского''', если правила вывода имеют вид:
| + | |
- | # Либо A → BC; A, B, C — нетерминалы.
| + | |
- | # Либо A → a; a — терминал.
| + | |
- | # Либо S → ε и в этом случае S не встречается в правых частях правил.
| + | |
- | | + | |
- | == Лемма о разрастании (для контекстно-свободного языка) ==
| + | |
- | Для любого контекстно-свободного языка L ∃ l, k: ∀ α ∈ L, |α| > l, α = uvwxy
| + | |
- | # |vwx| ≤ k
| + | |
- | # vx ≠ ε
| + | |
- | # uv<sup>i</sup>wx<sup>i</sup>y ∈ L, ∀ i
| + | |
- | | + | |
- | == Недостижимый символ ==
| + | |
- | x — '''недостижимый символ''', если он не входит ни в одну [[#Сентенциальная форма|сентенциальную форму]].
| + | |
- | | + | |
- | x — '''недостижимый символ''', если не существует вывода S ⇒* αxβ
| + | |
- | | + | |
- | == Непорождающий символ ==
| + | |
- | x — '''непорождающий символ''', если из него нельзя вывести терминальную цепочку
| + | |
- | | + | |
- | x — '''непорождающий символ''', если не существует вывода x ⇒* w, w ∈ T*
| + | |
- | | + | |
- | == Бесполезный символ ==
| + | |
- | '''Бесполезный символ''' — [[#Недостижимый символ|недостижимый]] или [[#Непорождающий символ|непорождающий символ]].
| + | |
- | | + | |
- | == Приведённая грамматика ==
| + | |
- | '''Грамматика''' называется '''приведённой''', если она не содержит [[#Бесполезный символ|бесполезных символов]].
| + | |
- | | + | |
- | == Регулярное множество ==
| + | |
- | '''Регулярное множество''' в алфавите T определяется следующим образом:
| + | |
- | # {} (пустое множество) — регулярное множество в алфавите T
| + | |
- | # {a} — регулярное множество в алфавите T для каждого a ∈ T
| + | |
- | # {ε} — регулярное множество в алфавите T
| + | |
- | # Если P и Q — регулярные множества в алфавите T, то таковы же и множества
| + | |
- | ## P ∪ Q (объединение)
| + | |
- | ## PQ (конкатенация, то есть множество таких pq, что p ∈ P, q ∈ Q)
| + | |
- | ## P* (итерация: P* = {ε} ∪ P ∪ PP ∪ PPP ∪ …)
| + | |
- | # Ничто другое не является регулярным множеством в алфавите T
| + | |
- | | + | |
- | == Регулярное выражение ==
| + | |
- | '''Регулярное выражение''' — форма записи [[#Регулярное монжество|регулярного множества]].
| + | |
- | | + | |
- | == Длина пути от листа к корню ==
| + | |
- | '''Длиной пути от листа к корню''' называется число вершин в пути от листа до корня, считая сам лист и сам корень (то есть, <число дуг в пути> + 1)
| + | |
- | | + | |
- | == Высота дерева ==
| + | |
- | '''Высота дерева''' — максимальная длина пути (по всем терминальным символам).
| + | |
- | | + | |
- | == Множество FIRST(u) ==
| + | |
- | Если u — любая строка символов грамматики, положим '''FIRST(u)''' — множество терминалов, с которых начинаются строки, выводимые из u. Если u ⇒* ε, то ε так же принадлежит FIRST(u).
| + | |
- | | + | |
- | == Множество FOLLOW(A) ==
| + | |
- | Пусть A — нетерминал. Тогда '''FOLLOW(A)''' — множество терминалов a, которые могут появиться непосредственно справа от A в некоторой [[#Сентенциальная форма|сентенциальной форме]], то есть, множество терминалов a таких, что существует вывод вида S ⇒* uAav для некоторых u и v.
| + | |
- | | + | |
- | == Множество FIRST<sub>1</sub> ==
| + | |
- | '''FIRST<sub>1</sub>''' — множество всех терминальных символов, с которых может начинаться цепочка терминальных символов, выводимых из цели грамматики или ε, если u ⇒* ε.
| + | |
- | | + | |
- | '''Пример:'''
| + | |
- | * S → aS | A
| + | |
- | * A → b | bSd | bA | ε
| + | |
- | * FIRST<sub>1</sub> = {a, b, ε}
| + | |
- | | + | |
- | == Основа сентенциальной формы ==
| + | |
- | '''Основа сентенциальной формы''' — позиция в сентенциальной форме, которая заменена в следующей сентенциальной форме.
| + | |
- | | + | |
- | == Множество FIRST(A) ==
| + | |
- | '''Множество FIRST(A)''' — множество терминальных символов,которыми начинаются цепочки, выводимые из A в грамматике G = (VT, VN, P, S), то есть, FIRST(A) = {a ∈ VT | A ⇒ aα, A ∈ VN, α ∈ (VT ∪ VN)*}
| + | |
- | | + | |
- | == Множество FOLLOW(A) ==
| + | |
- | '''Множество FOLLOW(A)''' — множество терминальных символов, которые следуют за цепочками, выводимыми из A в грамматике G = (VT, VN, P, S), то есть, FOLLOW(A) = {a ∈ VT | S ⇒ αAβ, β → aγ, A ∈ VN, α, β, γ ∈ (VT ∪ VN)*}
| + | |
- | | + | |
- | == Леворекурсивная грамматика ==
| + | |
- | '''Грамматика''' называется '''леворекурсивной''', если в ней имеется нетерминал A такой, что существует вывод A ⇒<sup>+</sup> Au для некоторой цепочки u.
| + | |
- | | + | |
- | == LL(1) грамматика ==
| + | |
- | Контекстно-свободная грамматика называется '''LL(1) грамматикой''' тогда и только тогда, когда выполняются следующие два условия:
| + | |
- | # Для каждого нетерминала, являющегося левой частью нескольких правил:<br />< A > → α<sub>1</sub> | α<sub>2</sub> | … | α<sub>n</sub><br />необходимо, чтобы пересечение множеств FIRST(α<sub>i</sub>) и FIRST(α<sub>j</sub>) было пусто для всех i ≠ j
| + | |
- | # Для каждого аннулирующего нетерминала < A > ⇒ *$ необходимо, чтобы пересечение FIRST(A) и FOLLOW(A) было пустым
| + | |
- | | + | |
- | '''Грамматика'', для которой таблицы анализа не имеют неоднозначно определённых входов, называются '''LL(1)'''.
| + | |
- | | + | |
- | == LR грамматика ==
| + | |
- | Грамматика, для которой можно построить таблицу LR разбора, называется '''LR грамматикой'''.
| + | |
- | | + | |
- | == Конфигурация LR анализатора ==
| + | |
- | '''Конфигурация LR анализатора''' — пара, первая компонента которой —содержимое стека, вторая — непросмотренный вход:<br />
| + | |
- | (S<sub>0</sub> X<sub>1</sub> S<sub>1</sub> X<sub>2</sub> S<sub>2</sub> … X<sub>m</sub> S<sub>m</sub>, A<sub>i</sub> A<sub>i + 1</sub> … A<sub>n</sub> $).<br />
| + | |
- | Эта конфигурация соответствует правой сентенциальной форме X<sub>1</sub> X<sub>2</sub> … X<sub>m</sub> A<sub>i</sub> A<sub>i + 1</sub> … A<sub>n</sub>.
| + | |
- | | + | |
- | == Атрибутная грамматика ==
| + | |
- | '''Атрибутной грамматикой''' называется четвёрка AG = (G, A<sub>S</sub>, A<sub>I</sub>, R), где
| + | |
- | * G = (N, T, P, S) — приведённая контекстно-свободная грамматика
| + | |
- | * A<sub>S</sub> — конечное множество синтезируемых элементов
| + | |
- | * A<sub>I</sub> — конечное множество наследуемых атрибутов, A<sub>S</sub> ∩ A<sub>I</sub> = ∅
| + | |
- | * R — конечное множество семантических правил
| + | |
- | | + | |
- | == Основа сентенциальной формы ==
| + | |
- | Подцепочка сентенциальной формы, которая может быть сопоставлена правой части некоторого правила вывода, свертка по которому к левой части правила соответствует одному шагу в обращении правостороннего вывода, называется '''основой цепочки'''.
| + | |
- | | + | |
- | == Пролог подпрограммы ==
| + | |
- | '''Пролог подпрограммы''' — инициализация стека для подпрограммы (то есть, это PUSH BP, MOV BP, SP и подобное)
| + | |
- | | + | |
- | == Дисплей ==
| + | |
- | '''Дисплей''' — это массив, i-й элемент которого представляет собой указатель на область активации процедуры i-го статического уровня.
| + | |
- | | + | |
- | == Статическая цепочка ==
| + | |
- | '''Статическая цепочка''' — список, в который связаны все статические контексты.
| + | |
- | | + | |
- | == Динамическая цепочка ==
| + | |
- | '''Динамическая цепочка''' — «база» динамически предыдущей процедуры.
| + | |
- | | + | |
- | | + | |
- | ''P.S.'' это скорее объяснение, нежели определение.
| + | |
- | | + | |
- | | + | |
- | {{Курс Конструирование Компиляторов}}
| + | |