Skip to content

Commit 6665c37

Browse files
committed
Поправлена пачка опечаток.
1 parent f175c08 commit 6665c37

12 files changed

Lines changed: 33 additions & 33 deletions

tex/CYK_for_CFPQ.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ \section{Алгоритм для графов на основе CYK}
272272
% \end{algorithmic}
273273
% \end{algorithm}
274274

275-
После завершения алгоритма, если в некоторой ячейке результируюшей матрицы с номером $(i, j)$ находятся стартовый нетерминал, то это означает, что существует путь из вершины $i$ в вершину $j$, удовлетворяющий данной грамматике.
275+
После завершения алгоритма, если в некоторой ячейке результирующей матрицы с номером $(i, j)$ находятся стартовый нетерминал, то это означает, что существует путь из вершины $i$ в вершину $j$, удовлетворяющий данной грамматике.
276276
Таким образом, полученная матрица является ответом для задачи достижимости для заданных графа и грамматики.
277277

278278
\begin{example}

tex/ConjunctiveAndBooleanLanguages.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ \chapter{Конъюнктивные и булевы грамматики}
8282
Пусть $L = (L_1,\ldots,L_n) (L_i \subseteq \Sigma^*)$ вектор из $n$ языков над $\Sigma$, где $n \geqslant 1$. Пусть $\phi_1,\ldots,\phi_m$ выражения над $\Sigma$, зависящее от переменных $X_1,\ldots,X_n$. Значение вектора выражений $P = (\phi_1,\ldots,\phi_m)$ на векторе $L$ --- это вектор языков $P(L) = (\phi_1(L),\ldots,\phi_m(L))$ над тем же алфавитом $\Sigma$.
8383
\end{definition}
8484

85-
Зададим частичный порядок относительно включения $``\preccurlyeq"$ на множестве языков и расширим его на вектора языков длины $n$: $(L_1^{'},\ldots,L_n^{'})\preccurlyeq(L_1^{''},\ldots,L_n^{''})$ если и только если $L_i^{'} \subseteq L_i^{''}$ для любого $1\leqslant i \leqslant n$
85+
Зададим частичный порядок относительно включения $``\preccurlyeq''$ на множестве языков и расширим его на векторы языков длины $n$: $(L_1^{'},\ldots,L_n^{'})\preccurlyeq(L_1^{''},\ldots,L_n^{''})$ тогда и только тогда, когда $L_i^{'} \subseteq L_i^{''}$ для любого $1\leqslant i \leqslant n$
8686

8787
\begin{definition}\label{Definition a conjuctive system of equations}
8888
$X = P(X)$ система уравнений над алфавитом $\Sigma$ и $X = \{X_1,\ldots,X_n\}$, где $P = (\phi_1,\ldots,\phi_n)$ вектор выражений над алфавитом $\Sigma$, зависящий от $X$.

tex/DerivativesForCFPQ.tex

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,16 +85,16 @@ \section{Задача достижимости}
8585
\begin{enumerate}
8686
\item При переходе по ребру дифференцируем запрос по метке на нём
8787
\item Передаём эту производную вдоль ребра в следующую вершину
88-
\item В этой следующей вершине производная запоминается, если ранее не встречалось регулярное выражение, которое порождается тот же язык (таким образом формируется набор регулярных выражений, порождающих языки, которые уже передовались на вершину). В противном случае -- терминируемся.
88+
\item В этой следующей вершине производная запоминается, если ранее не встречалось регулярное выражение, которое порождает тот же язык (таким образом формируется набор регулярных выражений, порождающих языки, которые уже передавались на вершину). В противном случае -- терминируемся.
8989
\end{enumerate}
9090

91-
После того, как вышеописанный алгоритм завершился для всех вершин, проходим по ним и ищем в их наборах Nullable регулярные выражения, которые и сигнализируют о том, что путь из стартовой веришны в данную вершину существует.
91+
После того, как вышеописанный алгоритм завершился для всех вершин, проходим по ним и ищем в их наборах Nullable регулярные выражения, которые и сигнализируют о том, что путь из стартовой вершины в данную вершину существует.
9292

9393
Некоторые замечания:
9494

9595
\begin{itemize}
9696
\item Если алгоритм запускается не на одной вершине, а сразу на нескольких, передаются вдоль рёбер не просто производные, а пары: (стартовая вершина, производная).
97-
\item Что мы в общем случае делаем с циклами, чтобы задача считалась алгоритмически? Разбиваем граф на наибольшие по включению компоненты сильной связности с связями между ними, стягиваем компоненты. Тогда граф превращается в дек, в котором проблем с нетерминируемостью нет, а с компонентами сильной связности разбираемся отдельно. Для этого достаточно рассмотреть одну такую компоненту: если есть цикл, то по нему можно ходить, только если в запросе есть применение звезды Клини, и, как нам уже известно, производная запроса данной операции --- конечная конструкция. В итоге мы сможем, переходя по вершинами, прийти к моменту, когда внутри компоненты в наборах производных вершин новых элементов не будет прибавляться, а значит, мы можем закончить алгоритм.
97+
\item Что мы в общем случае делаем с циклами, чтобы задача считалась алгоритмически? Разбиваем граф на наибольшие по включению компоненты сильной связности со связями между ними, стягиваем компоненты. Тогда граф превращается в дек, в котором проблем с терминируемостью нет, а с компонентами сильной связности разбираемся отдельно. Для этого достаточно рассмотреть одну такую компоненту: если есть цикл, то по нему можно ходить, только если в запросе есть применение звезды Клини, и, как нам уже известно, производная запроса данной операции --- конечная конструкция. В итоге мы сможем, переходя по вершинами, прийти к моменту, когда внутри компоненты в наборах производных вершин новых элементов не будет прибавляться, а значит, мы можем закончить алгоритм.
9898
\end{itemize}
9999

100100
Рассмотрим решение задачи достижимости с помощью производных на конкретном примере:
@@ -117,17 +117,17 @@ \section{Задача достижимости}
117117
\end{tikzpicture}
118118
\end{center}
119119

120-
Стартовая веришина --- вершина графа $\mathcal{G}$ с индексом 0. Хотим проверить существование путей из вершины 0 до других вершин графа по $R$. Заведем 4 множества, в которых будем хранить регулярные выражения, передаваемые в конкретную вершину: $M_{0}$ --- для вершины с индексом 0, $M_{1}$ --- для вершины с индексом 1 и так далее.
120+
Стартовая вершина --- вершина графа $\mathcal{G}$ с индексом 0. Хотим проверить существование путей из вершины 0 до других вершин графа по $R$. Заведем 4 множества, в которых будем хранить регулярные выражения, передаваемые в конкретную вершину: $M_{0}$ --- для вершины с индексом 0, $M_{1}$ --- для вершины с индексом 1 и так далее.
121121

122122
\begin{enumerate}
123123
\item Начинаем идти вдоль ребра с меткой $a$ из вершины 0 в 1. Дифференцируем наш запрос по данной метке: $\partial_{a}(R) = \partial_{a}(a^* \mid a^* \cdot b) = \partial_{a}(a^*) \mid \partial_{a}(a^* \cdot b) = \partial_{a}(a) \cdot a^* \mid \partial_{a}(a^*) \cdot b \mid \partial_{a}(b) = a^* \mid a^* \cdot b = R$. Запоминаем эту производную в $M_{1}$: $M_{1} = \{R\}$
124124
\item Аналогично идём из вершины 1 в вершину 2 по $a$. В итоге в $M_{2}$ также будет находиться R.
125125
\item В вершине 2 параллельно идём по метке $a$ в 0 и по метке $b$ в вершину с индексом 3.
126126
\begin{enumerate}
127127
\item В первом потоке при переходе по $a$ мы дифференцируем $R$ по a, получаем также $R$, кладем его в $M_{0}$. Пытаясь продолжить эти вычисления в данном потоке, мы обнаружим, что при переходе по $a$ из вершины 0 в вершину 1 наша производная будет снова R, но в множестве $M_{1}$ $R$ уже находится, а значит, данная ветка вычислений терминируется.
128-
\item При переходе по $b$ диффиринцируем переданную производную $R$: $\partial_{b}(R) = \partial_{b}(a^* \mid a^* \cdot b) = \partial_{b}(a^*) \mid \partial_{b}(a^* \cdot b) = \partial_{b}(a) \cdot a^* \mid \partial_{b}(a^*) \cdot b \mid \partial_{b}(b) = \partial_{b}(b) = \varepsilon$. Запоминаем производную в $M_{3}$: $M_{3} = \{\varepsilon\}$. Дифференцируем её по $b$ при переходе из 3 в 2. Кладём в $M_{2}$ $\partial_{b}(\varepsilon) = \emptyset$. Tаким oбразом, $M_{2} = \{R, \emptyset\}$. На данном этапе можно терминирироваться, т.к. для достижимости нам интересны регулярные выражения, порождающий $\varepsilon$, но дифференцируя $\emptyset$ по каким-либо меткам, мы снова получаем $\emptyset$. При "честном" вычислении, в нашем случае пустое множество будет добавлено во все множества $M_{i}$, и уже после этого вычисление завершится.
128+
\item При переходе по $b$ дифференцируем переданную производную $R$: $\partial_{b}(R) = \partial_{b}(a^* \mid a^* \cdot b) = \partial_{b}(a^*) \mid \partial_{b}(a^* \cdot b) = \partial_{b}(a) \cdot a^* \mid \partial_{b}(a^*) \cdot b \mid \partial_{b}(b) = \partial_{b}(b) = \varepsilon$. Запоминаем производную в $M_{3}$: $M_{3} = \{\varepsilon\}$. Дифференцируем её по $b$ при переходе из 3 в 2. Кладём в $M_{2}$ $\partial_{b}(\varepsilon) = \emptyset$. Таким образом, $M_{2} = \{R, \emptyset\}$. На данном этапе можно терминироваться, т.к. для достижимости нам интересны регулярные выражения, порождающие $\varepsilon$, но дифференцируя $\emptyset$ по каким-либо меткам, мы снова получаем $\emptyset$. При "честном" вычислении, в нашем случае пустое множество будет добавлено во все множества $M_{i}$, и уже после этого вычисление завершится.
129129
\end{enumerate}
130-
\item Теперь у нас есть сформированные множества производных для всех вершин и мы можем говорить о достижимости до данных вершин из стартовой. Рассмотрим $M_{0}$, $M_{0} = \{R\}$. Содержит ли $R$ $\varepsilon$? Посчитаем для этого нашу функцию Nullable: $N(R) = N(a^* \mid a^* \cdot b) = N(a^*) \mid N(a^* \cdot b) = true \mid N(a^* \cdot b) = true$. Из чего следует, что существует путь из вершины 0 в вершину 0. Аналогичным способом заключаем, что веришны 2 и 3 достижимы из вершины 0 (т.к. в их множества также содержится $R$). Рассмотрим $M_{3} = \{\varepsilon\}$. $N(\varepsilon) = true$, значит, вершина 3 тоже достижима из 0. Алгоритм завершён.
130+
\item Теперь у нас есть сформированные множества производных для всех вершин и мы можем говорить о достижимости до данных вершин из стартовой. Рассмотрим $M_{0}$, $M_{0} = \{R\}$. Содержит ли $R$ $\varepsilon$? Посчитаем для этого нашу функцию Nullable: $N(R) = N(a^* \mid a^* \cdot b) = N(a^*) \mid N(a^* \cdot b) = true \mid N(a^* \cdot b) = true$. Из чего следует, что существует путь из вершины 0 в вершину 0. Аналогичным способом заключаем, что вершины 2 и 3 достижимы из вершины 0 (т.к. в их множества также содержится $R$). Рассмотрим $M_{3} = \{\varepsilon\}$. $N(\varepsilon) = true$, значит, вершина 3 тоже достижима из 0. Алгоритм завершён.
131131
\end{enumerate}
132132

133133
Таким образом, выполнив указанный выше алгоритм для данного примера, мы определили, что из стартовой вершины с индексом 0 достижимы все вершины графа $\mathcal{G}$.

tex/GLL-based_CFPQ.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ \section{Рекурсивный спуск}
5555
\end{algorithm}
5656
\end{example}
5757

58-
Если возвращаеммое значение этой функции --- пара вида \textit{(true, [])}, то разбор завершился успехом.
58+
Если возвращаемое значение этой функции --- пара вида \textit{(true, [])}, то разбор завершился успехом.
5959

6060
Данный подход применяется как для ручного написания синтаксических нализаторов, так и при генерации анализаторов по грамматике.
6161

@@ -218,7 +218,7 @@ \section{LL(k)-алгоритм синтаксического анализа}
218218
\begin{example}Пример работы LL анализатора.
219219
Рассмотрим грамматику $S \to aSbS \mid \varepsilon$ и выводимое слово $\omega = abab$.
220220

221-
Расмотрим пошагово работу алгоритма c построением дерева, будем использовать таблицу, построенную в предыдущем примере:
221+
Рассмотрим пошагово работу алгоритма c построением дерева, будем использовать таблицу, построенную в предыдущем примере:
222222

223223
\begin{enumerate}
224224
\item Начало работы.

0 commit comments

Comments
 (0)