Редактирование: Конструирование Компиляторов, Теоретический минимум (2009)
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
''см. также [[Конструирование Компиляторов, Теоретический минимум|ответы на вопросы теоретического минимума 2007 года]], [[Конструирование Компиляторов, Определения|список определений]].'' | ''см. также [[Конструирование Компиляторов, Теоретический минимум|ответы на вопросы теоретического минимума 2007 года]], [[Конструирование Компиляторов, Определения|список определений]].'' | ||
- | == Алфавит == | ||
- | |||
- | Алфавит - конечное множество символов | ||
- | |||
== Определение грамматики == | == Определение грамматики == | ||
- | + | Грамматкиа G = (N,T,P,S) - четверка множеств, где | |
- | * | + | * N - алфавит нетерминальных символов |
- | * | + | * T - алфавит терминальных символов, пересечение N и T = ∅ |
- | * | + | * P - множество правил вида α → β, α ∈ ( N ∪ T)*N(N ∪ T)*, β ∈ (N ∪ T)* |
- | * | + | * S ∈ N - начальный символ или аксиома грамматики |
== Определение грамматик типа 0 по Хомскому == | == Определение грамматик типа 0 по Хомскому == | ||
- | Если на грамматику | + | Если на грамматику G = (N, T, P, S) не накладываются никакие ограничения, то её называют грамматикой типа 0, или грамматикой без ограничений. |
== Определение грамматик типа 1 (неукорачивающих) по Хомскому == | == Определение грамматик типа 1 (неукорачивающих) по Хомскому == | ||
Если | Если | ||
- | # Каждое правило грамматики, кроме | + | # Каждое правило грамматики, кроме S → ε, имеет вид α → β, |α| ≤ |β| |
- | # В том случае, когда | + | # В том случае, когда S → ε ∈ P, символ S не встречается в правых частях правил |
то грамматику называют грамматикой типа 1, или неукорачивающей. | то грамматику называют грамматикой типа 1, или неукорачивающей. | ||
- | |||
- | == Грамматика типа 2 (Контекстно-свободная, КС) по Хомскому == | ||
- | |||
- | Грамматика типа 2 (Контекстно-свободная, КС) - грамматика, где каждое правило <math>p \in P</math> имеет вид <math>A \rarr \alpha</math>, где <math> A \in N, \alpha \in (N \cup T)^*</math> | ||
- | |||
- | == Грамматика типа 3 (Праволинейная) по Хомскому == | ||
- | |||
- | Грамматика типа 3 (Праволинейная) - грамматика, где <math> \forall p \in P </math> имеет вид либо <math> A \rarr xB </math>, либо <math> A \rarr x </math>, где <math> A,B \in N, x \in T^* </math> | ||
== Определение детерминированной машины Тьюринга == | == Определение детерминированной машины Тьюринга == | ||
Строка 38: | Строка 26: | ||
* F ⊆ Q — множество конечных состояний | * F ⊆ Q — множество конечных состояний | ||
- | + | == Определение недетерминированной машины Тьюринга == | |
+ | '''Недетерминированная машина Тьюринга''' — T<sub>m</sub> = (Q, Г, Σ, D, q<sub>0</sub>, F) | ||
+ | * Q — конечное множество состояний | ||
+ | * Г — конечное множество символов (конечный алфавит) | ||
+ | * Σ — входной алфавит, Σ ⊆ Г\{b} (b - пустой символ) | ||
+ | * D — правила перехода | ||
+ | ** D: (Q\F) × Г → 2<sup>Q × Г × {L, R}</sup> | ||
+ | * q<sub>0</sub> ∈ Q — начальное состояние | ||
+ | * F ⊆ Q — множество конечных состояний | ||
== Определение конфигурации машины Тьюринга == | == Определение конфигурации машины Тьюринга == | ||
Строка 58: | Строка 54: | ||
'''Регулярное множество''' в алфавите T определяется следующим образом: | '''Регулярное множество''' в алфавите T определяется следующим образом: | ||
- | * | + | * {} (пустое множество) — регулярное множество в алфавите T |
- | * | + | * {a} — регулярное множество в алфавите T для каждого a ∈ T |
- | * | + | * {ε} — регулярное множество в алфавите T |
- | * Если P и Q — регулярные множества в алфавите T, то | + | * Если P и Q — регулярные множества в алфавите T, то таковы же и множества |
- | ** | + | ** P ∪ Q (объединение) |
- | ** | + | ** PQ (конкатенация, то есть множество таких pq, что p ∈ P, q ∈ Q) |
- | ** | + | ** P* (итерация: P* = {ε} ∪ P ∪ PP ∪ PPP ∪ …) |
* Ничто другое не является регулярным множеством в алфавите T | * Ничто другое не является регулярным множеством в алфавите T | ||
Строка 106: | Строка 102: | ||
== Объяснить разницу между недетерминированным и детерминированным конечным автоматом == | == Объяснить разницу между недетерминированным и детерминированным конечным автоматом == | ||
Недетерминированный конечный автомат является обобщением детерминированного. Существует теорема, гласящая, что «Любой недетерминированный конечный автомат может быть преобразован в детерминированный так, чтобы их языки совпадали» (такие автоматы называются эквивалентными). | Недетерминированный конечный автомат является обобщением детерминированного. Существует теорема, гласящая, что «Любой недетерминированный конечный автомат может быть преобразован в детерминированный так, чтобы их языки совпадали» (такие автоматы называются эквивалентными). | ||
- | В детерменированном автомате из одного состояния допускается не более одного перехода для каждого символа алфавита, в недетерменированном - произвольное количество. Кроме того, в НКА возможны эпсилон-переходы. | ||
== Определение конфигурации конечного автомата == | == Определение конфигурации конечного автомата == | ||
Строка 186: | Строка 181: | ||
== Определение эквивалентных состояний ДКА == | == Определение эквивалентных состояний ДКА == | ||
- | Два состояния <math>q_i</math> и <math>q_j</math> называются эквивалентными (<math>q_i</math> ~ <math>q_j</math>), если <math>\forall z\in</math> T* верно, что <math>D(q_i, z)\in T \Leftrightarrow D(q_j, z)\in T</math> | ||
- | |||
== Определение различимых состояний ДКА == | == Определение различимых состояний ДКА == | ||
Строка 209: | Строка 202: | ||
== Определение сентенциальной формы == | == Определение сентенциальной формы == | ||
- | '''Сентенциальная форма''' — цепочка | + | '''Сентенциальная форма''' — цепочка (состоящая, в общем случае, из терминалов и нетерминалов), выводимая из аксиомы грамматики |
== Определение однозначной КС-грамматики == | == Определение однозначной КС-грамматики == | ||
Строка 249: | Строка 242: | ||
Цепочка ''w'' допускается МП автоматом, если (''q''<sub>0</sub>, ''w'', ''Z''<sub>0</sub>)⊢* (''q'', ε, ''u'') для некоторых ''q'' ∈ ''F'' и ''u'' ∈ ''Г''*. Язык, допускаемый МП-автоматом ''M'' — множество всех цепочек, допускаемых автоматом ''M''. | Цепочка ''w'' допускается МП автоматом, если (''q''<sub>0</sub>, ''w'', ''Z''<sub>0</sub>)⊢* (''q'', ε, ''u'') для некоторых ''q'' ∈ ''F'' и ''u'' ∈ ''Г''*. Язык, допускаемый МП-автоматом ''M'' — множество всех цепочек, допускаемых автоматом ''M''. | ||
- | == Определение недетерминированного МП автомата, допускающего | + | == Определение недетерминированного МП автомата, допускающего опустошение магазина == |
Цепочка ''w'' допускается МП автоматом, если (''q''<sub>0</sub>, ''w'', ''Z''<sub>0</sub>)⊢* (''q'', ε, ε) для некоторого ''q'' ∈ ''Q''. В таком случае говорят, что автомат допускает цепочку ''опустошением магазина''. | Цепочка ''w'' допускается МП автоматом, если (''q''<sub>0</sub>, ''w'', ''Z''<sub>0</sub>)⊢* (''q'', ε, ε) для некоторого ''q'' ∈ ''Q''. В таком случае говорят, что автомат допускает цепочку ''опустошением магазина''. | ||
Строка 256: | Строка 249: | ||
== Формулировка леммы о разрастании для КС-языков == | == Формулировка леммы о разрастании для КС-языков == | ||
- | Для любого контекстно-свободного языка L существуют такие целые l и k, что любая цепочка | + | Для любого контекстно-свободного языка L существуют такие целые l и k, что любая цепочка alpha; ∈ L, |α| > l представима в виде α = uvwxy, где |
# |vwx| <= k | # |vwx| <= k | ||
# vx != e | # vx != e | ||
Строка 262: | Строка 255: | ||
== Определение нормальной формы Хомского для КС-грамматики == | == Определение нормальной формы Хомского для КС-грамматики == | ||
- | говорят что КС-грамматика находится в нормальной форме Хомского если каждое правило имеет вид: | ||
- | # Либо A → BC, A,B,C - нетерминалы | ||
- | # либо A → α, α - терминал | ||
- | # либо S → e, в таком случае S не встречается в правых частях правил | ||
== Определение правостороннего вывода в КС-грамматике == | == Определение правостороннего вывода в КС-грамматике == | ||
Строка 287: | Строка 276: | ||
== Определение множества FOLLOW1 == | == Определение множества FOLLOW1 == | ||
== Определение LL(1) грамматики == | == Определение LL(1) грамматики == | ||
- | LL(1)-грамматика - грамматика, для которой | + | LL(1)-грамматика - грамматика, для которой можно построить LL(1) анализатор |
- | + | ||
== Определение LR(1) ситуации == | == Определение LR(1) ситуации == | ||
LR(1)-ситуацией называется пара [''A'' → α . β, ''a''], где ''A'' → α β — правило грамматики, ''a'' — терминал или правый концевой маркер $. Вторая компонента ситуации называется аванцепочкой. | LR(1)-ситуацией называется пара [''A'' → α . β, ''a''], где ''A'' → α β — правило грамматики, ''a'' — терминал или правый концевой маркер $. Вторая компонента ситуации называется аванцепочкой. | ||
== Определение LR(1) грамматики == | == Определение LR(1) грамматики == | ||
- | Грамматика называется LR(1), если из условий | ||
- | |||
- | 1. <math>S' =>_r uAw =>_r uvw</math>, | ||
- | |||
- | 2. <math>S' =>_r zBx =>_r uvy</math>, | ||
- | |||
- | 3. FIRST(w) = FIRST(y) | ||
- | |||
- | следует, что uAy = zBx (т.е. u = z, A = B и x = y). | ||
== Какого типа конфликты могут появиться в канонической системе множеств LR(1) ситуаций? == | == Какого типа конфликты могут появиться в канонической системе множеств LR(1) ситуаций? == | ||
Строка 314: | Строка 293: | ||
Перенести верхний символ входа в магазин, занести наверх магазина состояние action(предыдущее состояние, взятый символ) | Перенести верхний символ входа в магазин, занести наверх магазина состояние action(предыдущее состояние, взятый символ) | ||
== Что такое основа правой сентенциальной формы == | == Что такое основа правой сентенциальной формы == | ||
- | |||
- | Основа правой сентенциальной формы z - это правило вывода <math>A -> v</math> и позиция в z, в которой может быть найдена цепочка v такие, что в результате замены v на A получается предыдущая сентенциальная форма в правостороннем выводе z. Таким образом, если <math>S =>_r avb</math>, то <math>A -> v</math> в позиции, следующей за a - это основа цепочки <math>avb</math>. Подцепочка b справа от основы содержит только терминальные символы. | ||
{{Курс Конструирование Компиляторов}} | {{Курс Конструирование Компиляторов}} |