You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: tex/RegularLanguages.tex
+63-51Lines changed: 63 additions & 51 deletions
Original file line number
Diff line number
Diff line change
@@ -98,7 +98,7 @@ \section{Регулярные выражения}
98
98
\section{Конечные автоматы}
99
99
100
100
\emph{Конечный автомат} (Finite State Machine, FSM)~--- вычислительная машина, которая имеет конечный набор состояний и может совершать переходы между ними, основываясь на прочитанных входных данных.
101
-
Важно отметить, что никакой дополнительной памяти классический конечный автомат не имеет и дополнительных действий (кроме чтения входной ленты) не производит%
101
+
Важно отметить, что никакой дополнительной памяти классический конечный автомат не имеет и дополнительных действий (кроме чтения входной ленты) не производит%
102
102
\sidenote{Cуществуют автоматы с записью на отдельную (выходную) ленту (например, автоматы Мили~\cite{6771467}) и другие, основанные на конечных автоматах, вычислители, производящие дополнительные действия.
103
103
Например, расширенные конечные автоматы (Extended Finite State Machine), которые умеют работать с памятью (переменными)~\cite{Alagar2011, foster.ea:efsm:2020}.}.
104
104
@@ -445,10 +445,10 @@ \section{Построение конечного автомата по регу
445
445
Стартовому состоянию соответствует выражение $a(a \mid (b \ b))^*$.
446
446
Так как $\emph{IsNull}(a(a \mid (b \ b))^*) = \emph{false}$, это состояние не является финальным.
447
447
Вычислим производные по всем символам из алфавита:
В результате появляются два новых состояния: $(a \mid (b \ b))^*$ и $\varnothing$.
453
453
Второе состояние соответствует пустому языку и является \emph{поглощающим} (или \emph{дьявольским}) состоянием, а первое~--- финальным, так как $\emph{IsNull}((a \mid (b \ b))^*) = \emph{true}$.
454
454
На рисунке~\ref{fig:regexp_to_dfa_example_step_1} показан автомат после первого шага алгоритма.
@@ -470,10 +470,10 @@ \section{Построение конечного автомата по регу
470
470
\end{marginfigure}
471
471
472
472
На следующем шаге вычислим производные для состояния $(a \mid (b \ b))^*$:
Таким образом, появляется новое состояние $b(a \mid (b \ b))^*$, а автомат принимает вид, показанный на рисунке~\ref{fig:regexp_to_dfa_example_step_2}.
478
478
479
479
\begin{marginfigure}
@@ -498,10 +498,10 @@ \section{Построение конечного автомата по регу
498
498
\end{marginfigure}
499
499
500
500
Осталось обработать состояние $b(a \mid (b \ b))^*$:
В результате добавляются новые переходы, и автомат принимает окончательный вид (рисунок~\ref{fig:regexp_to_dfa_example_step_3}).
506
506
507
507
\begin{marginfigure}
@@ -534,7 +534,7 @@ \section{Построение конечного автомата по регу
534
534
535
535
\section{Построение регулярного выражения по конечному автомату}
536
536
537
-
Алгоритм Клини(?)
537
+
Для построения регулярного выражения по конечному будем использовать вариацию классической конструкции, часто связываемой с теоремой Клини о эквивалентности языков, задаваемых регулярными выражениями и конечными автоматами, для доказательства которой нужно, в частности, построить регулярное выражение по конечному автомату.
538
538
Регулярное выражение будем строить по недетерминированному автомату специального вида: потребуем, чтобы у него было ровно одно стартовое состояние и ровно одно финальное%
539
539
\sidenote{Любой автомат можно привести к такому виду.
540
540
Предположим, что в автомате два стартовых состояния $q_0^s$ и $q_1^s$.
Таким образом, полученная грамматика порождает тот же язык, что и данный автомат.
773
+
Таким образом, мы получили грамматику, которая порождает тот же язык, что и исходный автомат%
774
+
\sidenote{В качестве упражнения можно взять несколько цепочек, принадлежащих языку, и проследить, как переходы в автомате в процессе раскознования цепочки соотносятся с применением правил грамматики при её выоде.}.
0 commit comments