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
Регулярные языки --- иерархии, связанные с конечные автоматы, взаимные конвертации, основные свойства регулярных языков, такие как замкнутость относительно различных операций.
4
+
В данном разделе мы обсудим регулярные языки --- класс, лежащий на самом нижнем уровне иерархии Хомского.
5
+
Будут рассмотрены основные способы задания таких языков: \textit{регулярные выражения}, \textit{конечные автоматы}, \textit{лево(право)линейные грамматики}.
6
+
Обсудим основные свойства регулярных языков, такие как замкнутость относительно различных операций, а также различные свойства соответствующих автоматов и грамматик.
5
7
6
8
7
9
\section{Регулярные выражения}
8
10
11
+
Регулярные выражения --- один из классических способов задать регулярный язык\footnote{Замечание для программистов. Важно понимать, что речь идёт о формальной конструкции, а не о том, что называется регулярными выражениями в различных языках программирования или библиотеках, где под названием <<регулярные выражения>> могут скрываться конструкции, существенно более выразительные, чем обсуждаемые здесь.}.
12
+
Основывается этот способ на предложении синтаксиса для описания \textit{регулярных множеств}\footnote{Помним, что язык --- это множество слов.}.
13
+
9
14
\begin{definition}
10
15
Регулярное множество (над алфавитом $\Sigma$) это:
Для того, чтобы описывать такие множества, удобно пользоваться \textit{регулярными выражениями}.
21
27
22
28
\begin{definition}
23
-
Регулярное выражение.
29
+
Регулярное выражение (над алфавитом $\Sigma$) это:
24
30
\begin{itemize}
31
+
\item$\varnothing$
25
32
\item$\varepsilon$
26
-
\item$t$
27
-
\item$R_1\mid R_2$
28
-
\item$R_1\cdot R_2$
29
-
\item$R^*$
33
+
\item$t$, $t \in\Sigma$
34
+
\item$R_1\mid R_2$, где $R_1$ и $R_2$ --- регулярные выражения
35
+
\item$R_1\cdot R_2$, где $R_1$ и $R_2$ --- регулярные выражения
36
+
\item$R^*$, где $R$ --- регулярное выражение
37
+
\item$(R)$, где $R$ --- регулярное выражение
30
38
\end{itemize}
31
39
\end{definition}
32
40
41
+
Отметим несколько важных с прикладной точки зрения моментов.
42
+
Во-первых, часто используется расширенный синтаксис, в который добавляются конструкции не увеличивающие выразительную силу, но упрощающие запись.
43
+
Например, встречаются следующие расширения\footnote{Существуют и другие, однако их мы не будем использовать и, соответственно, рассматривать. Читатель может вспомнить, что называется регулярными выражениями в его любимом языке программирования и попробовать самостоятельно выразить имеющиеся там конструкции через базовые.}.
44
+
\begin{itemize}
45
+
\item$R? = R \mid\varepsilon$, где $R$ --- регулярное выражение.
46
+
\item$R^+ = R \cdot R^*$, где $R$ --- регулярное выражение.
47
+
\end{itemize}
48
+
49
+
Во-вторых, конструкции $\varnothing$ и $\varepsilon$ используются крайне редко, особенно в случае расширенного синтаксиса, так как часто выражение, эквивалентное использующему данные конструкции, часто более компактно записывается с использованием расширенного синтаксиса.
50
+
В-третьих, оператор конкатенации часто опускается\footnote{Как и знак умножения во многих математических записях.}.
51
+
52
+
Рассмотрим несколько примеров регулярных выражений.
53
+
\begin{example}
54
+
Регулярное выражение $a$ задаёт регулярное множество $\{a\}$ и, соответственно, язык из единственного слова $a$.
55
+
\end{example}
56
+
57
+
\begin{example}
58
+
Регулярное выражение $ab$ задаёт регулярное множество $\{ab\}$ и, соответственно, язык из единственного слова $ab$.
59
+
\end{example}
60
+
61
+
62
+
\begin{example}
63
+
Регулярное выражение $a^*$ задаёт регулярное множество $$R = \bigcup_{i=0}^{\infty}{a^i} = \{\varepsilon, a, aa, aaa, \ldots\}$$ и, соответственно, бесконечный язык, содержащий для любого неотрицательного целого $n$ цепочку из символов $a$ длины $n$.
64
+
\end{example}
65
+
66
+
67
+
\begin{example}
68
+
$a^*b$
69
+
\end{example}
70
+
71
+
\begin{example}
72
+
$(a\mid b)^*$
73
+
\end{example}
74
+
75
+
\begin{example}
76
+
$(ab)^*c?$
77
+
\end{example}
78
+
33
79
\section{Конечные автоматы}
34
80
35
-
\begin{definition}\label{def:FiniteAutomata}
36
-
\textit{Конечный автомат} --- это пятёрка $M = \langle Q, q_S, Q_F, \delta, \Sigma\rangle$, где
81
+
\textit{Конечный автомат} --- вычислительная машина, которая имеет конечный набор состояний и может совершать переходы между ними, читая входные данные.
82
+
Важно отметить, что ни какой дополнительной памяти классический конечный автомат не имеет\footnote{Существуют автоматы с константной памятью, регистрами} и не производит дополнительных действий\footnote{Автоматы с записью на ленту, и т.д.}.
\textit{Недетерминированный конечный автомат, НКА} --- это пятёрка $M = \langle Q, Q_S, Q_F, \delta, \Sigma\rangle$, где
86
+
\begin{itemize}
87
+
\item$Q$ --- конечное множество состояний
88
+
\item$Q_S \in Q$ --- множество стартовых состояний
89
+
\item$Q_F \subseteq Q$ --- множество финальных состояний
90
+
\item$\delta\subseteq Q \times (\Sigma\cup\varepsilon) \times2^Q$ --- функция переходов, а $\varepsilon\notin\Sigma$
91
+
\item$\Sigma$ --- конечный алфавит
92
+
\end{itemize}
93
+
\end{definition}
94
+
95
+
Так как нас интересуют конечные автоматы в контексте языков, то будем говорить, что на ленте автомата записано какое-то слово (или строка).
96
+
Иными словами, будем говорить, что автомат принимает на вход слово или строку.
97
+
98
+
99
+
Процесс вычислений, проделываемых конечным автоматом, удобно описывать в терминах переходов между \textit{конфигурациями}.
100
+
101
+
\begin{definition}
102
+
Конфигурация $c$ конечного автомата $M = \langle Q, Q_S, Q_F, \delta, \Sigma\rangle$ --- это пара $(q,w)$, где $q\in Q$ --- это текущее состояние автомата, а $w \in\Sigma^*$ --- непросмотренная часть входной строки.
103
+
\end{definition}
104
+
105
+
\begin{definition}
106
+
Будем говорить, что автомат $M = \langle Q, Q_S, Q_F, \delta, \Sigma\rangle$ может перейти из конфигурации $c_1 = (q_1,w_1)$ в конфигурацию $c_2 = (q_2,w_2)$, если
\textit{Детерминированный конечный автомат (ДКА, Deterministic Finite Automata, DFA)} --- это пятёрка $M = \langle Q, q_S, Q_F, \delta, \Sigma\rangle$, где
37
129
\begin{itemize}
38
130
\item$Q$ --- конечное множество состояний
39
131
\item$q_S \in Q$ --- стартовое состояние
40
132
\item$Q_F \subseteq Q$ --- множество финальных состояний
41
-
\item$\delta\subseteq Q \times(\Sigma\cup\varepsilon) \times Q$ --- функция переходов, а $\varepsilon\notin\Sigma$
133
+
\item$\delta\subseteq Q \times\Sigma\times Q$ --- функция переходов
42
134
\item$\Sigma$ --- конечный алфавит
43
135
\end{itemize}
44
136
\end{definition}
45
137
46
-
Заметим, что определение~\ref{def:FiniteAutomata}
47
138
48
-
В зависимости от того, как именно представлена функция переходов: список троек, матрица, граф.
139
+
Заметим, что функцию переходов можно представить разными способами В зависимости от того, как именно представлена функция переходов: список троек, матрица, граф.
49
140
50
141
\begin{example}
51
142
Пример КА.
@@ -55,16 +146,15 @@ \section{Конечные автоматы}
55
146
\end{example}
56
147
57
148
58
-
\begin{definition}
59
-
Конфигурация, переход между конфигурациями.
60
-
\end{definition}
61
149
62
150
\begin{example}
63
151
Пример интерпретации конечного автомата.
64
152
\end{example}
65
153
66
154
Построение КА по регулярному выражению и регулярному выражению по КА. На производных.
67
155
156
+
Построение регулярного выражения по КА.
157
+
68
158
Алгоритмы: проверка пустоты ...
69
159
70
160
Примеры.
@@ -162,6 +252,8 @@ \section{Замкнутость регулярных языков относит
162
252
163
253
Построение пересечения через тензорное произведение автоматов.
164
254
255
+
Идея доказательства, что мы построили именно пересечение.
0 commit comments