Конструирование Компиляторов, Теоретический минимум (2007)
Материал из eSyr's wiki.
(Содержимое страницы заменено на «== From Ebaums Inc to MurkLoar. == We at EbaumsWorld consider you as disgrace of human race. Your faggotry level exceeded any imaginab...») |
(Отмена правки № 1374 участника 192.108.114.19 (обсуждение)) |
||
Строка 1: | Строка 1: | ||
- | == | + | == Определение грамматик типа 0 по Хомскому == |
- | + | Если на грамматику G = (N, T, P, S) не накладываются никакие ограничения, то её называют грамматикой типа 0, или грамматикой без ограничений. | |
- | + | ||
- | + | == Определение грамматик типа 1 (неукорачивающих) по Хомскому == | |
+ | Если | ||
+ | # Каждое правило грамматики, кроме S → ε, имеет вид α → β, |α| ≤ |β| | ||
+ | # В том случае, когда S → ε ∈ P, символ S не встречается в правых частях правил | ||
+ | то грамматику называют грамматикой типа 1, или неукорачивающей. | ||
+ | |||
+ | == Определение детерминированной машины Тьюринга == | ||
+ | '''Детерминированная машина Тьюринга''' — T<sub>m</sub> = (Q, Г, Σ, D, q<sub>0</sub>, F) | ||
+ | * Q — конечное множество состояний | ||
+ | * Г — конечное множество символов (конечный алфавит) | ||
+ | * Σ — входной алфавит | ||
+ | * D — правила перехода | ||
+ | ** D: (Q\F) × Г → Q × Г × {L, R} | ||
+ | * q<sub>0</sub> ∈ Q — начальное состояние | ||
+ | * F ⊆ Q — множество конечных состояний | ||
+ | |||
+ | == Определение недетерминированной машины Тьюринга == | ||
+ | '''Недетерминированная машина Тьюринга''' — T<sub>m</sub> = (Q, Г, Σ, D, q<sub>0</sub>, F) | ||
+ | * Q — конечное множество состояний | ||
+ | * Г — конечное множество символов (конечный алфавит) | ||
+ | * Σ — входной алфавит | ||
+ | * D — правила перехода | ||
+ | ** D: (Q\F) × Г → 2<sup>Q × Г × {L, R}</sup> | ||
+ | * q<sub>0</sub> ∈ Q — начальное состояние | ||
+ | * F ⊆ Q — множество конечных состояний | ||
+ | |||
+ | == Определение конфигурации машины Тьюринга == | ||
+ | Конфигурацией машины Тьюринга называется тройка (q, w, i), где | ||
+ | * q ∈ Q — состояние машины Тьюринга | ||
+ | * w ∈ Г* — вход, помещаемый на ленту машины Тьюринга, w = a<sub>1</sub> … a<sub>n</sub> | ||
+ | * i ∈ Z — положение головки машины Тьюринга | ||
+ | |||
+ | == Определение языка, допускаемого машиной Тьюринга == | ||
+ | Язык, допускаемый машиной Тьюринга — множество таких слов w, что, машина Тьюринга, находясь в состоянии (q<sub>0</sub>, w, 1) может достигнуть через конечное число переходов состояния q ∈ F. | ||
+ | |||
+ | == Соотношение между языками, порождаемыми грамматиками типа 0 и языками, допускаемыми машинами Тьюринга == | ||
+ | Класс языков, допускаемых машиной Тьюринга, эквивалентен классу языков, порождаемых грамматиками типа 0. | ||
+ | |||
+ | == Объяснить разницу между недетерминированной и детерминированной машиной Тьюринга == | ||
+ | Детерминированная машина Тьюринга из данного состояния по данному символу может сделать не более одного перехода, недетерминированная же таким свойством не обладает. | ||
+ | |||
+ | == Определение линейно-ограниченного автомата == | ||
+ | '''Линейно-ограниченный автомат''' — это недетерминированная машина Тьюринга, которая не может выходить за область входной строки. | ||
+ | |||
+ | == Соотношение между языками, порождаемыми грамматиками типа 0 и языками, допускаемыми линейно-ограниченными автоматами == | ||
+ | Линейно-ограниченные автоматы распознают контекстно-зависимые языки (то есть языки класса 1). Языки класса 0 распознаются только машинами Тьюринга с неограниченной памятью. | ||
+ | |||
+ | <!-- | ||
+ | Часто в определении линейно-ограниченного автомата длину ленты считают равной L = a + b*l, где l - длина входа. ЛОА с таким ограничением принимают тот же класс языков, что и ЛОА с L = l. | ||
+ | --> | ||
+ | |||
+ | <!-- | ||
+ | Так как для любой заданной грамматики типа 0 можно построить машину Тьюринга, которая будет проверять слова, порождаемые данной грамматикой, и при этом в процессе работы будет использовать некое заранее заданное пространство (то есть, данная машина Тьюринга будет являться линейно-ограниченным автоматом), то рассматриваемые языки эквивалентны. | ||
+ | |||
+ | это исключительно на моей совести. Нигде этого я не нашёл, пришлось выводить из эквивалентности языков грамматик уровня 0 и МТ — ~~~~ | ||
+ | |||
+ | Тут используется ограниченность при некотором конкретном вводе, но требуется ограниченность (тем более линейная) для просизвольного ввода длины l. Доказательство неверно, как и доказываемый факт. | ||
+ | --> | ||
+ | |||
+ | == Определение регулярного множества == | ||
+ | |||
+ | '''Регулярное множество''' в алфавите T определяется следующим образом: | ||
+ | * {} (пустое множество) — регулярное множество в алфавите T | ||
+ | * {a} — регулярное множество в алфавите T для каждого a ∈ T | ||
+ | * {ε} — регулярное множество в алфавите T | ||
+ | * Если P и Q — регулярные множества в алфавите T, то таковы же и множества | ||
+ | ** P ∪ Q (объединение) | ||
+ | ** PQ (конкатенация, то есть множество таких pq, что p ∈ P, q ∈ Q) | ||
+ | ** P* (итерация: P* = {ε} ∪ P ∪ PP ∪ PPP ∪ …) | ||
+ | * Ничто другое не является регулярным множеством в алфавите T | ||
+ | |||
+ | == Определение регулярного выражения == | ||
+ | '''Регулярное выражение''' — форма записи [[Конструирование Компиляторов, Определения#Регулярное монжество|регулярного множества]]. | ||
+ | |||
+ | Регулярное выражение и обозначаемое им регулярное множество определяются следующим образом: | ||
+ | * ∅ — обозначает множество {} | ||
+ | * ε — обозначает множество {ε} | ||
+ | * ''a'' — обозначает множество {''a''} | ||
+ | * Если РВ ''p'' и ''q'' обозначают множества ''P'' и ''Q'' соответственно, то: | ||
+ | ** (''p''|''q'') обозначает ''P'' ∪ ''Q'' | ||
+ | ** ''pq'' обозначает ''PQ'' | ||
+ | ** (''p''*) обозначет ''P''* | ||
+ | * Ничто другое не является регулярным выражением в данном алфавите | ||
+ | |||
+ | == Определение праволинейной грамматики == | ||
+ | Праволинейная грамматика или грамматика типа 3 по Хомскому — грамматика вида A → w, A → wB, w ∈ T*. | ||
+ | |||
+ | == Определение недетерминированного конечного автомата == | ||
+ | '''Недетерминированный конечный автомат''' - M = (Q, Σ, D, q<sub>0</sub>, F) | ||
+ | * Q — конечное непустое множество состояний | ||
+ | * Σ — входной алфавит | ||
+ | * D — правила перехода | ||
+ | ** Q × ( Σ ∪ {ε} ) → 2<sup>Q</sup> | ||
+ | * q<sub>0</sub> ∈ Q — начальное состояние | ||
+ | * F ⊆ Q — множество конечных состояний | ||
+ | <!-- про epsilon - моя отсебятина, его обычно потом отдельно добавляют --> | ||
+ | <!-- или от нас требуется только нестрогое определение? --> | ||
+ | |||
+ | == Определение детерминированного конечного автомата == | ||
+ | '''Детерминированный конечный автомат''' - M = (Q, Σ, D, q<sub>0</sub>, F) | ||
+ | * Q — конечное непустое множество состояний | ||
+ | * Σ — конечный входной алфавит | ||
+ | * D — правила перехода | ||
+ | ** Q × Σ → Q | ||
+ | * q<sub>0</sub> ∈ Q — начальное состояние | ||
+ | * F ⊆ Q — множество конечных состояний | ||
+ | <!-- или от нас требуется только нестрогое определение? --> | ||
+ | |||
+ | == Объяснить разницу между недетерминированным и детерминированным конечным автоматом == | ||
+ | Недетерминированный конечный автомат является обобщением детерминированного. Существует теорема, гласящая, что «Любой недетерминированный конечный автомат может быть преобразован в детерминированный так, чтобы их языки совпадали» (такие автоматы называются эквивалентными). | ||
+ | |||
+ | == Определение конфигурации конечного автомата == | ||
+ | Пусть ''M'' = (''Q'', ''T'', ''D'', ''q''<sub>0</sub>, ''F'') — НКА. Конфигурацией автомата ''M'' называется пара (''q'', ω) ∈ ''Q'' × ''T''*, где ''q'' — текущее состояние управляющего устройства, а ω — цепочка символов на входной ленте, состоящая из символов под головкой и всех символов справа от неё. | ||
+ | |||
+ | == Определение языка, допускаемого конечным автоматом == | ||
+ | Автомат ''M'' допускает цепочку ω, если (''q''<sub>0</sub>, ω) ⊦* (''q'', ε) для некоторого ''q'' ∈ ''F''. Языком, допускаемым автоматом ''M'', называется множество входных цепочек,допускаемых автоматом ''M''. То есть: | ||
+ | * ''L(M)'' = {ω | ω ∈ ''T''* и (''q''<sub>0</sub>, ω) ⊦* (''q'', ε)'' для некоторого ''q'' ∈ ''F''} | ||
+ | |||
+ | == Определение ε-замыкания для подмножества состояний НКА == | ||
+ | ε-замыкание множества состояний ''R'', ''R'' ⊆ ''Q'' — множество состояний НКА, достижимых из состояний, входящих в ''R'', посредством только переходов по ε, то есть множество | ||
+ | * S = ⋃<sub>q ∈ R</sub> {p | (q, ε) ⊦* (p, ε)} | ||
+ | |||
+ | == Определение расширенной функции переходов для КА == | ||
+ | Расширенная функция переходов множества состояний ''R'', ''R'' ⊆ ''Q'' по ''a'' — множество состояний НКА, в которые есть переход на входе ''a'' для состояний из ''R'', то есть множество | ||
+ | * S = ⋃<sub>q ∈ R</sub> {p | p ∈ D(q, a)} | ||
+ | |||
+ | == Определение функции firstpos для поддерева в дереве регулярного выражения == | ||
+ | Функция ''firstpos(n)'' для каждого узла ''n'' узла синтаксического дерева регулярных выражений даёт множество позиций, которые соответствуют первым символам в цепочках, генерируемых подвыражением с вершиной ''n''. Построение: | ||
+ | {| | ||
+ | !узел ''n'' | ||
+ | !''firstpos(n)'' | ||
+ | |- | ||
+ | |ε | ||
+ | |∅ | ||
+ | |- | ||
+ | |''i'' ≠ ε | ||
+ | |{''i''} | ||
+ | |- | ||
+ | |u | v | ||
+ | |''firstpos''(''u'') ∪ ''firstpos''(''v'') | ||
+ | |- | ||
+ | |u . v | ||
+ | |if ''nullable''(''u'') then ''firstpos''(''u'') ∪ ''firstpos''(''v'') else ''firstpos''(''u'') | ||
+ | |- | ||
+ | |v* | ||
+ | |''firstpos''(''v'') | ||
+ | |} | ||
+ | |||
+ | == Определение функции lastpos для поддерева в дереве регулярного выражения == | ||
+ | Функция ''lastpos(n)'' для каждого узла ''n'' узла синтаксического дерева регулярных выражений даёт множество позиций, которым соответствуют последние символы в цепочках, генерируемых подвыражениями с вершиной ''n''. | ||
+ | Построение ''lastpos''(''n''): | ||
+ | {| | ||
+ | !узел ''n'' | ||
+ | !''lastpos(n)'' | ||
+ | |- | ||
+ | |ε | ||
+ | |∅ | ||
+ | |- | ||
+ | |''i'' ≠ ε | ||
+ | |{''i''} | ||
+ | |- | ||
+ | |u | v | ||
+ | |''lastpos''(''u'') ∪ ''lastpos''(''v'') | ||
+ | |- | ||
+ | |u . v | ||
+ | |if ''nullable''(''v'') then ''lastpos''(''u'') ∪ ''lastpos''(''v'') else ''lastpos''(''v'') | ||
+ | |- | ||
+ | |v* | ||
+ | |''lastpos''(''v'') | ||
+ | |} | ||
+ | |||
+ | == Определение функции followpos для позиций в дереве регулярного выражения == | ||
+ | Функция ''followpos(i)'' для позиции ''i'' есть множество позиций ''j'' таких, что существует некоторая строка ''…cd…'', входящая в язык, описываемый регулярным выражением, такая, что позиция ''i'' соответствует вхождению ''c'', а позиция ''j'' — вхождению ''d''. | ||
+ | |||
+ | == Сформулировать соотношение между регулярными множествами и языками, допускаемыми КА == | ||
+ | Любой конечный автомат распознает регулярное множество цепочек символов входного алфавита. | ||
+ | Верно и обратное — для любого регулярного языка можно построить распознающий его конечный автомат. | ||
+ | |||
+ | == Определение регулярной грамматики == | ||
+ | Регулярные грамматики — праволинейные (A → w, A → wB, w ∈ T*), леволинейные (A → w, A → Bw, w ∈ T*). | ||
+ | |||
+ | == Соотношение, между языками, порождаемыми КС-грамматиками, и языками, допускаемыми недетерминированными МП автоматами == | ||
+ | Они совпадают. | ||
+ | |||
+ | == Определение контекстно-свободной грамматики == | ||
+ | A → α, α ∈ (N ∪ T)* | ||
+ | |||
+ | == Определение левостороннего вывода в КС-грамматике == | ||
+ | Вывод, в котором в любой сентенциальной форме на каждом шаге делается подстановка самого левого нетерминала, называется '''левосторонним'''. | ||
+ | |||
+ | == Определение правостороннего вывода в КС-грамматике == | ||
+ | Вывод, в котором в любой сентенциальной форме на каждом шаге делается подстановка самого правого нетерминала, называется '''правосторонним'''. | ||
+ | |||
+ | == Определение сентенциальной формы == | ||
+ | '''Сентенциальная форма''' — последовательность символов (терминалов и нетерминалов), выводимых из аксиомы | ||
+ | |||
+ | == Определение приведенной грамматики == | ||
+ | '''Грамматика''' называется '''приведённой''', если она не содержит бесполезных символов. | ||
+ | |||
+ | == Определение множества FOLLOW(A) == | ||
+ | Пусть A — нетерминал. Тогда '''FOLLOW(A)''' — множество терминалов a, которые могут появиться непосредственно справа от A в некоторой [[#Сентенциальная форма|сентенциальной форме]], то есть, множество терминалов a таких, что существует вывод вида S ⇒* uAav для некоторых u и v. | ||
+ | |||
+ | == Определение LR(1) ситуации == | ||
+ | LR(1)-ситуацией называется пара [''A'' → α β, ''a''], где ''A'' → α β — правило грамматики, ''a'' — терминал или правый концевой маркер $. Вторая компонента ситуации называется аванцепочкой. | ||
+ | |||
+ | == Сформулировать соотношение между языками, порождаемыми праволинейными грамматиками и языками, допускаемыми КА == | ||
+ | Для любой праволинейной грамматики существует конечный автомат, проверяющий порождаемый грамматикой язык. Для любого конечного автомата существует праволинейная грамматика, порождающая проверяемый конечным автоматом язык. | ||
+ | |||
+ | == Определение однозначной КС-грамматики == | ||
+ | КС грамматика называется однозначной или детерминированной, если всякая выводимая терминальная цепочка имеет только одно дерево вывода (соотвественно только один левый и только один правый вывод). | ||
+ | |||
+ | == Определение неоднозначной КС-грамматики == | ||
+ | КС-грамматика G называется неоднозначной, если существует хотя бы одна цепочка α ⊂ L(G), для которой может быть построено два или более различных деревьев вывода. | ||
+ | |||
+ | == Определение контекстно-свободной грамматики без ε-правил == | ||
+ | * A → α, α ∈ (N ∪ T)<sup>+</sup> | ||
+ | * допускается S → ε, если S не входит ни в какую правую часть | ||
+ | |||
+ | == Определение вывода в КС-грамматике == | ||
+ | Определим на множестве (''N'' ∪ ''T'')* грамматики ''G'' = (''N'', ''T'', ''P'', ''S'') бинарное отношение выводимости «⇒» следующим образом: если ''δ'' → ''γ'' ∈ ''P'', то ''αδβ'' ⇒ ''αγβ'' для всех ''α'', ''β'' ∈ (''N'' ∪ ''T'')*. Если ''α''<sub>1</sub> ⇒ ''α''<sub>2</sub>, то ''α''<sub>2</sub> непосредственно выводима из ''α''<sub>1</sub>. | ||
+ | |||
+ | Если ''α'' ⇒<sup>''k''</sup> ''β'' (''k'' ≥ 0), то существует последовательность шагов | ||
+ | * ''γ''<sub>0</sub> ⇒ ''γ''<sub>1</sub> ⇒ ''γ''<sub>2</sub> ⇒ … ⇒ ''γ''<sub>''k'' − 1</sub> ⇒ ''γ''<sub>''k''</sub> | ||
+ | где ''α'' = ''γ''<sub>0</sub> и ''β'' = ''γ''<sub>''k''</sub>. Последовательность цепочек ''γ''<sub>0</sub>, ''γ''<sub>1</sub>, ''γ''<sub>2</sub>, …, ''γ''<sub>''k'' − 1</sub>, ''γ''<sub>''k''</sub> в этом случае называется выводом ''β'' из ''α''. | ||
+ | |||
+ | == Определение языка, порождаемого КС-грамматикой == | ||
+ | Языком, порождаемым грамматикой ''G'' = (''N'', ''T'', ''P'', ''S'') (обозначается ''L''(''G'')) называется множество всех цепочек терминалов, выводимых из аксиомы, то есть: | ||
+ | * ''L''(''G'') = {''w'' | ''w'' ∈ ''T''*, ''S'' ⇒<sup>+</sup> ''w''} | ||
+ | |||
+ | == Определение недетерминированного МП автомата == | ||
+ | Недетерминированный автомат с магазинной памятью (МП-автомат) — семёрка ''M'' = (''Q'', ''T'', ''Г'', ''D'', ''q''<sub>0</sub>, ''Z''<sub>0</sub>, ''F''), где | ||
+ | # ''Q'' — конечное множество состояний, представляющее всевозможные состояния управляющего устройства | ||
+ | # ''T'' — конечный входной алфавит | ||
+ | # ''Г'' — конечный алфавит магазинных символов | ||
+ | # ''D'' — отображение множества ''Q'' × (''T'' ∪ {ε}) × ''Г'' в множество всех конечных подмножеств ''Q'' × ''Г''*, называемое функцией переходов | ||
+ | # ''q''<sub>0</sub> ∈''Q'' — начальное состояние управляющего устройства | ||
+ | # ''Z''<sub>0</sub> ∈''Г'' — символ, находящийся в магазине в начальный момент (начальный символ магазина) | ||
+ | # ''F'' ⊆''Q'' — множество заключительных состояний | ||
+ | |||
+ | == Определение детерминированного МП автомата == | ||
+ | Детерминированный автомат с магазинной памятью (МП-автомат) — семёрка ''M'' = (''Q'', ''T'', ''Г'', ''D'', ''q''<sub>0</sub>, ''Z''<sub>0</sub>, ''F''), где | ||
+ | # ''Q'' — конечное множество состояний, представляющее всевозможные состояния управляющего устройства | ||
+ | # ''T'' — конечный входной алфавит | ||
+ | # ''Г'' — конечный алфавит магазинных символов | ||
+ | # ''D'' — отображение множества ''Q'' × (''T'' ∪ {ε}) × ''Г'' в множество всех конечных подмножеств ''Q'' × ''Г''*, называемое функцией переходов | ||
+ | # ''q''<sub>0</sub> ∈ ''Q'' — начальное состояние управляющего устройства | ||
+ | # ''Z''<sub>0</sub> ∈ ''Г'' — символ, находящийся в магазине в начальный момент (начальный символ магазина) | ||
+ | # ''F'' ⊆ ''Q'' — множество заключительных состояний | ||
+ | Кроме того, должны выполняться следующие условия: | ||
+ | # Множество ''D''(''q'', ''a'', ''Z'') содержит не более одного элемента для любых ''q'' ∈ ''Q'', ''a'' ∈ ''T'' ∪ {ε}, ''Z''<sub>0</sub> ∈ ''Г'' | ||
+ | # Если ''D''(''q'', ε, ''Z'') ≠ ∅, то ''D''(''q'', ''a'', ''Z'') = ∅ для всех ''a'' ∈ ''T'' | ||
+ | |||
+ | == Определение конфигурации МП автомата == | ||
+ | Конфигурацией автомата с магазинной памятью (МП автомата) называется тройка (''q'', ''w'', ''u''), где | ||
+ | * ''q'' ∈ ''Q'' — текущее состояние магазинного устройства | ||
+ | * ''w'' ∈ ''T''* — непрочитанная часть входной цепочки; первый символ цепочки ''w'' находится под входной головкой; если ''w'' = ε, то считается, что входная лента прочитана | ||
+ | * ''u'' ∈ ''Г''* — содержимое магазина; самый левый символ цепочки ''u'' считается вершиной магазина; если ''u = ε, то магазин считается пустым | ||
+ | |||
+ | == Определение языка, допускаемого МП автоматом == | ||
+ | Цепочка ''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''. В таком случае говорят, что автомат допускает цепочку ''опустошением магазина''. | ||
+ | |||
+ | == Определение множества FIRST(u) == | ||
+ | Если u — любая строка символов грамматики, положим FIRST(u) — множество терминалов, с которых начинаются строки, выводимые из u. Если u ⇒* ε, то ε так же принадлежит FIRST(u). | ||
+ | |||
+ | == Определение замыкания множества LR(1) ситуаций == | ||
+ | Пусть есть множество ситуаций ''I'' тогда определим функцию ''closure''(''I'') как добавление к ''I'' ситуаций вида [''B'' → .''γ'', ''b''] для каждых ситуации [''A'' → ''α.Bβ'', ''a''], правила вывода ''B'' → ''γ'', принадлежащего ''Г'', каждого терминала ''b'' из ''FIRST''(''βa''), пока это возможно. | ||
+ | |||
+ | |||
+ | //Ильдар: | ||
+ | Мне кажется это не совсем определение, а процедура построения. Я бы предварительно написал, что замыкание множества LR(1)-ситуаций, допустимых для некоторого активного префикса z, - это множество всех LR(1)-ситуаций, допустимых для этого префикса. | ||
+ | |||
+ | == Что такое леворекурсивная грамматика? == | ||
+ | '''Грамматика''' называется '''леворекурсивной''', если в ней имеется нетерминал A такой, что существует вывод A ⇒ Au для некоторой строки u. | ||
+ | |||
+ | {{Курс Конструирование Компиляторов}} |
Версия 17:49, 3 февраля 2008
Определение грамматик типа 0 по Хомскому
Если на грамматику G = (N, T, P, S) не накладываются никакие ограничения, то её называют грамматикой типа 0, или грамматикой без ограничений.
Определение грамматик типа 1 (неукорачивающих) по Хомскому
Если
- Каждое правило грамматики, кроме S → ε, имеет вид α → β, |α| ≤ |β|
- В том случае, когда S → ε ∈ P, символ S не встречается в правых частях правил
то грамматику называют грамматикой типа 1, или неукорачивающей.
Определение детерминированной машины Тьюринга
Детерминированная машина Тьюринга — Tm = (Q, Г, Σ, D, q0, F)
- Q — конечное множество состояний
- Г — конечное множество символов (конечный алфавит)
- Σ — входной алфавит
- D — правила перехода
- D: (Q\F) × Г → Q × Г × {L, R}
- q0 ∈ Q — начальное состояние
- F ⊆ Q — множество конечных состояний
Определение недетерминированной машины Тьюринга
Недетерминированная машина Тьюринга — Tm = (Q, Г, Σ, D, q0, F)
- Q — конечное множество состояний
- Г — конечное множество символов (конечный алфавит)
- Σ — входной алфавит
- D — правила перехода
- D: (Q\F) × Г → 2Q × Г × {L, R}
- q0 ∈ Q — начальное состояние
- F ⊆ Q — множество конечных состояний
Определение конфигурации машины Тьюринга
Конфигурацией машины Тьюринга называется тройка (q, w, i), где
- q ∈ Q — состояние машины Тьюринга
- w ∈ Г* — вход, помещаемый на ленту машины Тьюринга, w = a1 … an
- i ∈ Z — положение головки машины Тьюринга
Определение языка, допускаемого машиной Тьюринга
Язык, допускаемый машиной Тьюринга — множество таких слов w, что, машина Тьюринга, находясь в состоянии (q0, w, 1) может достигнуть через конечное число переходов состояния q ∈ F.
Соотношение между языками, порождаемыми грамматиками типа 0 и языками, допускаемыми машинами Тьюринга
Класс языков, допускаемых машиной Тьюринга, эквивалентен классу языков, порождаемых грамматиками типа 0.
Объяснить разницу между недетерминированной и детерминированной машиной Тьюринга
Детерминированная машина Тьюринга из данного состояния по данному символу может сделать не более одного перехода, недетерминированная же таким свойством не обладает.
Определение линейно-ограниченного автомата
Линейно-ограниченный автомат — это недетерминированная машина Тьюринга, которая не может выходить за область входной строки.
Соотношение между языками, порождаемыми грамматиками типа 0 и языками, допускаемыми линейно-ограниченными автоматами
Линейно-ограниченные автоматы распознают контекстно-зависимые языки (то есть языки класса 1). Языки класса 0 распознаются только машинами Тьюринга с неограниченной памятью.
Определение регулярного множества
Регулярное множество в алфавите T определяется следующим образом:
- {} (пустое множество) — регулярное множество в алфавите T
- {a} — регулярное множество в алфавите T для каждого a ∈ T
- {ε} — регулярное множество в алфавите T
- Если P и Q — регулярные множества в алфавите T, то таковы же и множества
- P ∪ Q (объединение)
- PQ (конкатенация, то есть множество таких pq, что p ∈ P, q ∈ Q)
- P* (итерация: P* = {ε} ∪ P ∪ PP ∪ PPP ∪ …)
- Ничто другое не является регулярным множеством в алфавите T
Определение регулярного выражения
Регулярное выражение — форма записи регулярного множества.
Регулярное выражение и обозначаемое им регулярное множество определяются следующим образом:
- ∅ — обозначает множество {}
- ε — обозначает множество {ε}
- a — обозначает множество {a}
- Если РВ p и q обозначают множества P и Q соответственно, то:
- (p|q) обозначает P ∪ Q
- pq обозначает PQ
- (p*) обозначет P*
- Ничто другое не является регулярным выражением в данном алфавите
Определение праволинейной грамматики
Праволинейная грамматика или грамматика типа 3 по Хомскому — грамматика вида A → w, A → wB, w ∈ T*.
Определение недетерминированного конечного автомата
Недетерминированный конечный автомат - M = (Q, Σ, D, q0, F)
- Q — конечное непустое множество состояний
- Σ — входной алфавит
- D — правила перехода
- Q × ( Σ ∪ {ε} ) → 2Q
- q0 ∈ Q — начальное состояние
- F ⊆ Q — множество конечных состояний
Определение детерминированного конечного автомата
Детерминированный конечный автомат - M = (Q, Σ, D, q0, F)
- Q — конечное непустое множество состояний
- Σ — конечный входной алфавит
- D — правила перехода
- Q × Σ → Q
- q0 ∈ Q — начальное состояние
- F ⊆ Q — множество конечных состояний
Объяснить разницу между недетерминированным и детерминированным конечным автоматом
Недетерминированный конечный автомат является обобщением детерминированного. Существует теорема, гласящая, что «Любой недетерминированный конечный автомат может быть преобразован в детерминированный так, чтобы их языки совпадали» (такие автоматы называются эквивалентными).
Определение конфигурации конечного автомата
Пусть M = (Q, T, D, q0, F) — НКА. Конфигурацией автомата M называется пара (q, ω) ∈ Q × T*, где q — текущее состояние управляющего устройства, а ω — цепочка символов на входной ленте, состоящая из символов под головкой и всех символов справа от неё.
Определение языка, допускаемого конечным автоматом
Автомат M допускает цепочку ω, если (q0, ω) ⊦* (q, ε) для некоторого q ∈ F. Языком, допускаемым автоматом M, называется множество входных цепочек,допускаемых автоматом M. То есть:
- L(M) = {ω | ω ∈ T* и (q0, ω) ⊦* (q, ε) для некоторого q ∈ F}
Определение ε-замыкания для подмножества состояний НКА
ε-замыкание множества состояний R, R ⊆ Q — множество состояний НКА, достижимых из состояний, входящих в R, посредством только переходов по ε, то есть множество
- S = ⋃q ∈ R {p | (q, ε) ⊦* (p, ε)}
Определение расширенной функции переходов для КА
Расширенная функция переходов множества состояний R, R ⊆ Q по a — множество состояний НКА, в которые есть переход на входе a для состояний из R, то есть множество
- S = ⋃q ∈ R {p | p ∈ D(q, a)}
Определение функции firstpos для поддерева в дереве регулярного выражения
Функция firstpos(n) для каждого узла n узла синтаксического дерева регулярных выражений даёт множество позиций, которые соответствуют первым символам в цепочках, генерируемых подвыражением с вершиной n. Построение:
узел n | firstpos(n) |
---|---|
ε | ∅ |
i ≠ ε | {i} |
u | v | firstpos(u) ∪ firstpos(v) |
u . v | if nullable(u) then firstpos(u) ∪ firstpos(v) else firstpos(u) |
v* | firstpos(v) |
Определение функции lastpos для поддерева в дереве регулярного выражения
Функция lastpos(n) для каждого узла n узла синтаксического дерева регулярных выражений даёт множество позиций, которым соответствуют последние символы в цепочках, генерируемых подвыражениями с вершиной n. Построение lastpos(n):
узел n | lastpos(n) |
---|---|
ε | ∅ |
i ≠ ε | {i} |
u | v | lastpos(u) ∪ lastpos(v) |
u . v | if nullable(v) then lastpos(u) ∪ lastpos(v) else lastpos(v) |
v* | lastpos(v) |
Определение функции followpos для позиций в дереве регулярного выражения
Функция followpos(i) для позиции i есть множество позиций j таких, что существует некоторая строка …cd…, входящая в язык, описываемый регулярным выражением, такая, что позиция i соответствует вхождению c, а позиция j — вхождению d.
Сформулировать соотношение между регулярными множествами и языками, допускаемыми КА
Любой конечный автомат распознает регулярное множество цепочек символов входного алфавита. Верно и обратное — для любого регулярного языка можно построить распознающий его конечный автомат.
Определение регулярной грамматики
Регулярные грамматики — праволинейные (A → w, A → wB, w ∈ T*), леволинейные (A → w, A → Bw, w ∈ T*).
Соотношение, между языками, порождаемыми КС-грамматиками, и языками, допускаемыми недетерминированными МП автоматами
Они совпадают.
Определение контекстно-свободной грамматики
A → α, α ∈ (N ∪ T)*
Определение левостороннего вывода в КС-грамматике
Вывод, в котором в любой сентенциальной форме на каждом шаге делается подстановка самого левого нетерминала, называется левосторонним.
Определение правостороннего вывода в КС-грамматике
Вывод, в котором в любой сентенциальной форме на каждом шаге делается подстановка самого правого нетерминала, называется правосторонним.
Определение сентенциальной формы
Сентенциальная форма — последовательность символов (терминалов и нетерминалов), выводимых из аксиомы
Определение приведенной грамматики
Грамматика называется приведённой, если она не содержит бесполезных символов.
Определение множества FOLLOW(A)
Пусть A — нетерминал. Тогда FOLLOW(A) — множество терминалов a, которые могут появиться непосредственно справа от A в некоторой сентенциальной форме, то есть, множество терминалов a таких, что существует вывод вида S ⇒* uAav для некоторых u и v.
Определение LR(1) ситуации
LR(1)-ситуацией называется пара [A → α β, a], где A → α β — правило грамматики, a — терминал или правый концевой маркер $. Вторая компонента ситуации называется аванцепочкой.
Сформулировать соотношение между языками, порождаемыми праволинейными грамматиками и языками, допускаемыми КА
Для любой праволинейной грамматики существует конечный автомат, проверяющий порождаемый грамматикой язык. Для любого конечного автомата существует праволинейная грамматика, порождающая проверяемый конечным автоматом язык.
Определение однозначной КС-грамматики
КС грамматика называется однозначной или детерминированной, если всякая выводимая терминальная цепочка имеет только одно дерево вывода (соотвественно только один левый и только один правый вывод).
Определение неоднозначной КС-грамматики
КС-грамматика G называется неоднозначной, если существует хотя бы одна цепочка α ⊂ L(G), для которой может быть построено два или более различных деревьев вывода.
Определение контекстно-свободной грамматики без ε-правил
- A → α, α ∈ (N ∪ T)+
- допускается S → ε, если S не входит ни в какую правую часть
Определение вывода в КС-грамматике
Определим на множестве (N ∪ T)* грамматики G = (N, T, P, S) бинарное отношение выводимости «⇒» следующим образом: если δ → γ ∈ P, то αδβ ⇒ αγβ для всех α, β ∈ (N ∪ T)*. Если α1 ⇒ α2, то α2 непосредственно выводима из α1.
Если α ⇒k β (k ≥ 0), то существует последовательность шагов
- γ0 ⇒ γ1 ⇒ γ2 ⇒ … ⇒ γk − 1 ⇒ γk
где α = γ0 и β = γk. Последовательность цепочек γ0, γ1, γ2, …, γk − 1, γk в этом случае называется выводом β из α.
Определение языка, порождаемого КС-грамматикой
Языком, порождаемым грамматикой G = (N, T, P, S) (обозначается L(G)) называется множество всех цепочек терминалов, выводимых из аксиомы, то есть:
- L(G) = {w | w ∈ T*, S ⇒+ w}
Определение недетерминированного МП автомата
Недетерминированный автомат с магазинной памятью (МП-автомат) — семёрка M = (Q, T, Г, D, q0, Z0, F), где
- Q — конечное множество состояний, представляющее всевозможные состояния управляющего устройства
- T — конечный входной алфавит
- Г — конечный алфавит магазинных символов
- D — отображение множества Q × (T ∪ {ε}) × Г в множество всех конечных подмножеств Q × Г*, называемое функцией переходов
- q0 ∈Q — начальное состояние управляющего устройства
- Z0 ∈Г — символ, находящийся в магазине в начальный момент (начальный символ магазина)
- F ⊆Q — множество заключительных состояний
Определение детерминированного МП автомата
Детерминированный автомат с магазинной памятью (МП-автомат) — семёрка M = (Q, T, Г, D, q0, Z0, F), где
- Q — конечное множество состояний, представляющее всевозможные состояния управляющего устройства
- T — конечный входной алфавит
- Г — конечный алфавит магазинных символов
- D — отображение множества Q × (T ∪ {ε}) × Г в множество всех конечных подмножеств Q × Г*, называемое функцией переходов
- q0 ∈ Q — начальное состояние управляющего устройства
- Z0 ∈ Г — символ, находящийся в магазине в начальный момент (начальный символ магазина)
- F ⊆ Q — множество заключительных состояний
Кроме того, должны выполняться следующие условия:
- Множество D(q, a, Z) содержит не более одного элемента для любых q ∈ Q, a ∈ T ∪ {ε}, Z0 ∈ Г
- Если D(q, ε, Z) ≠ ∅, то D(q, a, Z) = ∅ для всех a ∈ T
Определение конфигурации МП автомата
Конфигурацией автомата с магазинной памятью (МП автомата) называется тройка (q, w, u), где
- q ∈ Q — текущее состояние магазинного устройства
- w ∈ T* — непрочитанная часть входной цепочки; первый символ цепочки w находится под входной головкой; если w = ε, то считается, что входная лента прочитана
- u ∈ Г* — содержимое магазина; самый левый символ цепочки u считается вершиной магазина; если u = ε, то магазин считается пустым
Определение языка, допускаемого МП автоматом
Цепочка w допускается МП автоматом, если (q0, w, Z0)⊢* (q, ε, u) для некоторых q ∈ F и u ∈ Г*. Язык, допускаемый МП-автоматом M — множество всех цепочек, допускаемых автоматом M.
Определение недетерминированного МП автомата, допускающего опустошением магазина
Цепочка w допускается МП автоматом, если (q0, w, Z0)⊢* (q, ε, ε) для некоторого q ∈ Q. В таком случае говорят, что автомат допускает цепочку опустошением магазина.
Определение множества FIRST(u)
Если u — любая строка символов грамматики, положим FIRST(u) — множество терминалов, с которых начинаются строки, выводимые из u. Если u ⇒* ε, то ε так же принадлежит FIRST(u).
Определение замыкания множества LR(1) ситуаций
Пусть есть множество ситуаций I тогда определим функцию closure(I) как добавление к I ситуаций вида [B → .γ, b] для каждых ситуации [A → α.Bβ, a], правила вывода B → γ, принадлежащего Г, каждого терминала b из FIRST(βa), пока это возможно.
//Ильдар:
Мне кажется это не совсем определение, а процедура построения. Я бы предварительно написал, что замыкание множества LR(1)-ситуаций, допустимых для некоторого активного префикса z, - это множество всех LR(1)-ситуаций, допустимых для этого префикса.
Что такое леворекурсивная грамматика?
Грамматика называется леворекурсивной, если в ней имеется нетерминал A такой, что существует вывод A ⇒ Au для некоторой строки u.