Редактирование: Конструирование Компиляторов, Теоретический минимум (2009)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 1: Строка 1:
''см. также [[Конструирование Компиляторов, Теоретический минимум|ответы на вопросы теоретического минимума 2007 года]], [[Конструирование Компиляторов, Определения|список определений]].''
''см. также [[Конструирование Компиляторов, Теоретический минимум|ответы на вопросы теоретического минимума 2007 года]], [[Конструирование Компиляторов, Определения|список определений]].''
-
== Алфавит ==
 
- 
-
Алфавит - конечное множество символов
 
- 
-
== Определение грамматики ==
 
-
Грамматика <math>~G = (N,T,P,S)</math> - четверка множеств, где
 
-
* <math>~N</math> - алфавит нетерминальных символов
 
-
* <math>~T</math> - алфавит терминальных символов, <math>N \cap T = \empty</math>;
 
-
* <math>~P</math> - множество правил вида <math>\alpha \rarr \beta, \alpha \in ( N \cup T)^*N(N \cup T)^*, \beta \in (N \cup T)^*</math>
 
-
* <math>S \in N</math> - начальный символ или аксиома грамматики
 
- 
== Определение грамматик типа 0 по Хомскому ==
== Определение грамматик типа 0 по Хомскому ==
-
Если на грамматику <math>~G = (N, T, P, S)</math> не накладываются никакие ограничения, то её называют грамматикой типа 0, или грамматикой без ограничений.
+
Если на грамматику G = (N, T, P, S) не накладываются никакие ограничения, то её называют грамматикой типа 0, или грамматикой без ограничений.
== Определение грамматик типа 1 (неукорачивающих) по Хомскому ==
== Определение грамматик типа 1 (неукорачивающих) по Хомскому ==
Если
Если
-
# Каждое правило грамматики, кроме <math>S \rarr \epsilon </math> , имеет вид <math>\alpha \rarr \beta, |\alpha| \le |\beta|</math>
+
# Каждое правило грамматики, кроме S &rarr; &epsilon;, имеет вид &alpha; &rarr; &beta;, |&alpha;| &le; |&beta;|
-
# В том случае, когда <math>S \rarr \epsilon \in P</math>, символ <math>~S</math> не встречается в правых частях правил
+
# В том случае, когда S &rarr; &epsilon; &isin; 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>
 
== Определение детерминированной машины Тьюринга ==
== Определение детерминированной машины Тьюринга ==
'''Детерминированная машина Тьюринга''' — T<sub>m</sub> = (Q, Г, &Sigma;, D, q<sub>0</sub>, F)
'''Детерминированная машина Тьюринга''' — T<sub>m</sub> = (Q, Г, &Sigma;, D, q<sub>0</sub>, F)
* Q — конечное множество состояний
* Q — конечное множество состояний
-
* Г — конечное множество ленточных символов (конечный алфавит), один из которых называется пустым и обозначается обычно b
+
* Г — конечное множество символов (конечный алфавит)
* &Sigma; — входной алфавит, &Sigma; &sube; Г\{b} (b - пустой символ)
* &Sigma; — входной алфавит, &Sigma; &sube; Г\{b} (b - пустой символ)
* D — правила перехода
* D — правила перехода
Строка 38: Строка 19:
* F &sube; Q — множество конечных состояний
* F &sube; Q — множество конечных состояний
-
 
+
== Определение недетерминированной машины Тьюринга ==
 +
'''Недетерминированная машина Тьюринга''' — T<sub>m</sub> = (Q, Г, &Sigma;, D, q<sub>0</sub>, F)
 +
* Q — конечное множество состояний
 +
* Г — конечное множество символов (конечный алфавит)
 +
* &Sigma; — входной алфавит, &Sigma; &sube; Г\{b} (b - пустой символ)
 +
* D — правила перехода
 +
** D: (Q\F) &times; Г &rarr; 2<sup>Q &times; Г &times; {L, R}</sup>
 +
* q<sub>0</sub> &isin; Q — начальное состояние
 +
* F &sube; Q — множество конечных состояний
== Определение конфигурации машины Тьюринга ==
== Определение конфигурации машины Тьюринга ==
Конфигурацией машины Тьюринга называется тройка (q, w, i), где
Конфигурацией машины Тьюринга называется тройка (q, w, i), где
* q &isin; Q — состояние машины Тьюринга
* q &isin; Q — состояние машины Тьюринга
-
* w &isin; Г* —текущее содержимое занятого участка ленты, w = a<sub>1</sub> &hellip; a<sub>n</sub>
+
* w &isin; Г* — вход, помещаемый на ленту машины Тьюринга, w = a<sub>1</sub> &hellip; a<sub>n</sub>
* i &isin; Z — положение головки машины Тьюринга
* i &isin; Z — положение головки машины Тьюринга
Строка 58: Строка 47:
'''Регулярное множество''' в алфавите T определяется следующим образом:
'''Регулярное множество''' в алфавите T определяется следующим образом:
-
* <math> \varnothing </math> — регулярное множество в алфавите T
+
* {} (пустое множество) — регулярное множество в алфавите T
-
* <math> ~\{a\} </math> — регулярное множество в алфавите T для каждого a &isin; T
+
* {a} — регулярное множество в алфавите T для каждого a &isin; T
-
* <math> ~\{\epsilon\} </math> — регулярное множество в алфавите T
+
* {&epsilon;} — регулярное множество в алфавите T
-
* Если P и Q — регулярные множества в алфавите T, то регулярны множества
+
* Если P и Q — регулярные множества в алфавите T, то таковы же и множества
-
** <math>~P \cup Q</math> (объединение)
+
** P &cup; Q (объединение)
-
** <math>~PQ</math> (конкатенация, <math>\{ pq | p \in P, q \in Q\}</math>)
+
** PQ (конкатенация, то есть множество таких pq, что p &isin; P, q &isin; Q)
-
** <math>~P^*</math> (итерация: <math>P^* = \{\epsilon\} \cup P \cup PP \cup PPP \cup ...)</math>
+
** P* (итерация: P* = {&epsilon;} &cup; P &cup; PP &cup; PPP &cup; &hellip;)
* Ничто другое не является регулярным множеством в алфавите T
* Ничто другое не является регулярным множеством в алфавите T
Строка 106: Строка 95:
== Объяснить разницу между недетерминированным и детерминированным конечным автоматом ==
== Объяснить разницу между недетерминированным и детерминированным конечным автоматом ==
Недетерминированный конечный автомат является обобщением детерминированного. Существует теорема, гласящая, что «Любой недетерминированный конечный автомат может быть преобразован в детерминированный так, чтобы их языки совпадали» (такие автоматы называются эквивалентными).
Недетерминированный конечный автомат является обобщением детерминированного. Существует теорема, гласящая, что «Любой недетерминированный конечный автомат может быть преобразован в детерминированный так, чтобы их языки совпадали» (такие автоматы называются эквивалентными).
-
В детерменированном автомате из одного состояния допускается не более одного перехода для каждого символа алфавита, в недетерменированном - произвольное количество. Кроме того, в НКА возможны эпсилон-переходы.
 
== Определение конфигурации конечного автомата ==
== Определение конфигурации конечного автомата ==
Строка 186: Строка 174:
== Определение эквивалентных состояний ДКА ==
== Определение эквивалентных состояний ДКА ==
-
Два состояния <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>
 
- 
== Определение различимых состояний ДКА ==
== Определение различимых состояний ДКА ==
Строка 197: Строка 183:
A &rarr; &alpha;, &alpha; &isin; (N &cup; T)*
A &rarr; &alpha;, &alpha; &isin; (N &cup; T)*
-
== Определение выводимости в грамматике ==
+
== Определение вывода в КС-грамматике ==
Определим на множестве (''N'' &cup; ''T'')* грамматики ''G'' = (''N'', ''T'', ''P'', ''S'') бинарное отношение выводимости «&rArr;» следующим образом: если ''&delta;'' &rarr; ''&gamma;'' &isin; ''P'', то ''&alpha;&delta;&beta;'' &rArr; ''&alpha;&gamma;&beta;'' для всех ''&alpha;'', ''&beta;'' &isin; (''N'' &cup; ''T'')*. Если ''&alpha;''<sub>1</sub> &rArr; ''&alpha;''<sub>2</sub>, то ''&alpha;''<sub>2</sub> непосредственно выводима из ''&alpha;''<sub>1</sub>.
Определим на множестве (''N'' &cup; ''T'')* грамматики ''G'' = (''N'', ''T'', ''P'', ''S'') бинарное отношение выводимости «&rArr;» следующим образом: если ''&delta;'' &rarr; ''&gamma;'' &isin; ''P'', то ''&alpha;&delta;&beta;'' &rArr; ''&alpha;&gamma;&beta;'' для всех ''&alpha;'', ''&beta;'' &isin; (''N'' &cup; ''T'')*. Если ''&alpha;''<sub>1</sub> &rArr; ''&alpha;''<sub>2</sub>, то ''&alpha;''<sub>2</sub> непосредственно выводима из ''&alpha;''<sub>1</sub>.
Строка 209: Строка 195:
== Определение сентенциальной формы ==
== Определение сентенциальной формы ==
-
'''Сентенциальная форма''' — цепочка над алфавитом <math> (T \cup N)^* </math>, выводимая из аксиомы грамматики
+
'''Сентенциальная форма''' — цепочка (состоящая, в общем случае, из терминалов и нетерминалов), выводимая из аксиомы грамматики
== Определение однозначной КС-грамматики ==
== Определение однозначной КС-грамматики ==
Строка 249: Строка 235:
Цепочка ''w'' допускается МП автоматом, если (''q''<sub>0</sub>, ''w'', ''Z''<sub>0</sub>)⊢* (''q'', &epsilon;, ''u'') для некоторых ''q''&nbsp;&isin;&nbsp;''F'' и ''u''&nbsp;&isin;&nbsp;''Г''*. Язык, допускаемый МП-автоматом ''M'' — множество всех цепочек, допускаемых автоматом ''M''.
Цепочка ''w'' допускается МП автоматом, если (''q''<sub>0</sub>, ''w'', ''Z''<sub>0</sub>)⊢* (''q'', &epsilon;, ''u'') для некоторых ''q''&nbsp;&isin;&nbsp;''F'' и ''u''&nbsp;&isin;&nbsp;''Г''*. Язык, допускаемый МП-автоматом ''M'' — множество всех цепочек, допускаемых автоматом ''M''.
-
== Определение недетерминированного МП автомата, допускающего опустошением магазина ==
+
== Определение недетерминированного МП автомата, допускающего опустошение магазина ==
Цепочка ''w'' допускается МП автоматом, если (''q''<sub>0</sub>, ''w'', ''Z''<sub>0</sub>)⊢* (''q'', &epsilon;, &epsilon;) для некоторого ''q''&nbsp;&isin;&nbsp;''Q''. В таком случае говорят, что автомат допускает цепочку ''опустошением магазина''.
Цепочка ''w'' допускается МП автоматом, если (''q''<sub>0</sub>, ''w'', ''Z''<sub>0</sub>)⊢* (''q'', &epsilon;, &epsilon;) для некоторого ''q''&nbsp;&isin;&nbsp;''Q''. В таком случае говорят, что автомат допускает цепочку ''опустошением магазина''.
Строка 256: Строка 242:
== Формулировка леммы о разрастании для КС-языков ==
== Формулировка леммы о разрастании для КС-языков ==
-
Для любого контекстно-свободного языка L существуют такие целые l и k, что любая цепочка &alpha; &isin; L, |&alpha;| > l представима в виде &alpha; = uvwxy, где
 
-
# |vwx| <= k
 
-
# vx != e
 
-
# uv<sup>i</sup>wx<sup>i</sup>y &isin; L для любого i >= 0
 
== Определение нормальной формы Хомского для КС-грамматики ==
== Определение нормальной формы Хомского для КС-грамматики ==
-
говорят что КС-грамматика находится в нормальной форме Хомского если каждое правило имеет вид:
 
-
# Либо A &rarr; BC, A,B,C - нетерминалы
 
-
# либо A &rarr; &alpha;, &alpha; - терминал
 
-
# либо S &rarr; e, в таком случае S не встречается в правых частях правил
 
== Определение правостороннего вывода в КС-грамматике ==
== Определение правостороннего вывода в КС-грамматике ==
Строка 274: Строка 252:
== Что такое леворекурсивная грамматика? ==
== Что такое леворекурсивная грамматика? ==
-
'''Грамматика''' называется '''леворекурсивной''', если в ней имеется нетерминал A такой, что существует вывод A &rArr;<sup>+</sup> Au для некоторой строки u.
+
'''Грамматика''' называется '''леворекурсивной''', если в ней имеется нетерминал A такой, что существует вывод A &rArr; Au для некоторой строки u.
== Определение множества FIRST1 ==
== Определение множества FIRST1 ==
-
FIRST1 — множество всех терминальных символов, с которых может начинаться цепочка терминальных символов, выводимых из цели грамматики или ε, если u ⇒* ε.
 
- 
-
Пример:
 
- 
-
* S → aS | A
 
-
* A → b | bSd | bA | ε
 
-
* FIRST1 = {a, b, ε}
 
- 
== Определение множества FOLLOW1 ==
== Определение множества FOLLOW1 ==
== Определение LL(1) грамматики ==
== Определение LL(1) грамматики ==
-
LL(1)-грамматика - грамматика, для которой таблица предсказывающего анализатора не имеет неоднозначно определенных входов
+
LL(1)-грамматика - грамматика, для которой можно построить LL(1) анализатор
-
 
+
== Определение LR(1) ситуации ==
== Определение LR(1) ситуации ==
LR(1)-ситуацией называется пара [''A''&nbsp;&rarr;&nbsp;&alpha; . &beta;, ''a''], где ''A''&nbsp;&rarr;&nbsp;&alpha; &beta;&nbsp;— правило грамматики, ''a''&nbsp;— терминал или правый концевой маркер $. Вторая компонента ситуации называется аванцепочкой.
LR(1)-ситуацией называется пара [''A''&nbsp;&rarr;&nbsp;&alpha; . &beta;, ''a''], где ''A''&nbsp;&rarr;&nbsp;&alpha; &beta;&nbsp;— правило грамматики, ''a''&nbsp;— терминал или правый концевой маркер $. Вторая компонента ситуации называется аванцепочкой.
== Определение 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: Строка 274:
Перенести верхний символ входа в магазин, занести наверх магазина состояние 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 справа от основы содержит только терминальные символы.
 
{{Курс Конструирование Компиляторов}}
{{Курс Конструирование Компиляторов}}

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Шаблоны, использованные на этой странице:

Личные инструменты
Разделы