Skip to content

Commit c1c5214

Browse files
committed
Минимально компилирующаяся версия со всеми разделами.
1 parent a619fb8 commit c1c5214

9 files changed

+278
-238
lines changed

tex/FormalLanguageConstrainedReachabilityLectureNotes.tex

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,16 @@
6464
\input{RPQ}
6565
% %\input{CFPQ}
6666
\input{CYK_for_CFPQ}
67-
% \input{Matrix-based_CFPQ}
68-
% \input{TensorProduct}
69-
% \input{SPPF}
70-
% \input{GLL-based_CFPQ}
71-
% \input{GLR-based_CFPQ}
67+
\input{Matrix-based_CFPQ}
68+
\input{TensorProduct}
69+
\input{SPPF}
70+
\input{GLL-based_CFPQ}
71+
\input{GLR-based_CFPQ}
7272
% %\input{CombinatorsForCFPQ}
73-
% \input{Multiple_Context-Free_Language_Reachability} % FIXME: Исправить главу
73+
\input{Multiple_Context-Free_Language_Reachability} % FIXME: Исправить главу
7474
% %\input{DerivativesForCFPQ}
7575
% %\input{CFPQ_to_Datalog}
76-
% \input{Conclusion}
76+
\input{Conclusion}
7777

7878
\backmatter
7979
\setchapterstyle{plain}

tex/GLL-based_CFPQ.tex

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,31 @@ \section{Рекурсивный спуск}
2727

2828
\begin{algorithm}
2929
\floatname{algorithm}{Listing}
30-
\begin{algorithmic}[1]
31-
\caption{Функция рекурсивного спуска}
32-
\Function{S}{$\omega$}
33-
\If {(len$(\omega)=0$)}
34-
\Comment{{\footnotesize Пустая цепочка выводима из $S$}}
35-
\State{\Return \textit{(true, $\omega$)}}
36-
\EndIf
37-
38-
\If{$(\omega = a :: tl)$}
39-
\Comment{{\footnotesize Выводимая из $S$ подстрока должна начинаться с $a$}}
40-
\State{$res,tl' = $ S($tl$)}
41-
\Comment{{\footnotesize Затем должна идти подстрока, выводимая из $S$}}
42-
\If{res \&\& $tl' = b :: tl''$}
43-
\Comment{{\footnotesize Если вызов закончился успешно, то надо проверить, что следующий символ --- это $b$}}
44-
\State{\Return $S(tl'')$}
45-
\Comment{{\footnotesize И снова попробовать вывести перфикс из $S$}}
46-
\Else
47-
\State{\Return \textit{(false, $tl'$)}}
48-
\EndIf
49-
\Else
50-
\State{\Return \textit{(false, $\omega$)}}
51-
\EndIf
52-
\EndFunction
53-
54-
\end{algorithmic}
30+
%\begin{algorithmic}[1]
31+
%\caption{Функция рекурсивного спуска}
32+
%\Function{S}{$\omega$}
33+
% \If {(len$(\omega)=0$)}
34+
% \Comment{{\footnotesize Пустая цепочка выводима из $S$}}
35+
% \State{\Return \textit{(true, $\omega$)}}
36+
% \EndIf
37+
38+
% \If{$(\omega = a :: tl)$}
39+
% \Comment{{\footnotesize Выводимая из $S$ подстрока должна начинаться с $a$}}
40+
% \State{$res,tl' = $ S($tl$)}
41+
% \Comment{{\footnotesize Затем должна идти подстрока, выводимая из $S$}}
42+
% \If{res \&\& $tl' = b :: tl''$}
43+
% \Comment{{\footnotesize Если вызов закончился успешно, то надо проверить, что следующий символ --- это $b$}}
44+
% \State{\Return $S(tl'')$}
45+
% \Comment{{\footnotesize И снова попробовать вывести перфикс из $S$}}
46+
% \Else
47+
% \State{\Return \textit{(false, $tl'$)}}
48+
% \EndIf
49+
% \Else
50+
% \State{\Return \textit{(false, $\omega$)}}
51+
% \EndIf
52+
%\EndFunction
53+
54+
%\end{algorithmic}
5555
\end{algorithm}
5656
\end{example}
5757

@@ -114,7 +114,7 @@ \section{LL(k)-алгоритм синтаксического анализа}
114114

115115
\begin{definition}
116116
Пусть $G = \langle N, \Sigma, P, S \rangle$~--- КС-грамматика. Множество $\follow[k]$ определено для сентенциальной формы $\beta$ следующим образом:
117-
\[\follow[k](\beta) = \{ \omega \in \Sigma^* \mid \exists \gamma, \alpha: S \derives{} \gamma \beta \alpha \text{ и } \omega \in \first[k](\alpha) \} \]
117+
\[\follow[k](\beta) = \{ \omega \in \Sigma^* \mid \exists \gamma, \alpha: S \derives{} \gamma \beta \alpha \text{ и } \omega \in \first[k](\alpha) \} \]
118118
\end{definition}
119119

120120
В частном случае для $k = 1$:
@@ -408,7 +408,7 @@ \section{Алгоритм Generalized LL}
408408
Можно построить анализатор, работающий с произвольными КС-грамматиками.
409409
Generalized LL (GLL)~\cite{Scott:2010:GP:1860132.1860320,10.1007/978-3-662-46663-6_5}
410410

411-
Обзор:~\cite{Cappers2014ExploringAV}, история и т.д.~\cite{Afroozeh2019PracticalGT}
411+
Обзор:~\cite{Cappers2014ExploringAV}, история и т.д.~\cite{Afroozeh2019PracticalGT}
412412

413413
Принцип работы остается абсолютно таким же, как для табличного LL:
414414
\begin{itemize}
@@ -644,4 +644,3 @@ \section{Алгоритм Generalized LL}
644644
% \item Проведите алгоритм GLL для грамматики $ S \to a S b S \mid \varepsilon$. Правда ли, что эта грамматика принадлежит классу $ LL(1) $? Пронаблюдайте, как использование GSS вырождается в работу с обычным стеком.
645645
% \item Доразберите все не рассмотренные в примере \ref{gll:example1} дескрипторы, постройте полный GSS.
646646
%\end{enumerate}
647-

tex/Matrix-based_CFPQ.tex

Lines changed: 54 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -36,31 +36,32 @@
3636
Пусть $\mathcal{G} = (V, E)$ --- входной граф и $G = (N,\Sigma,P)$ --- входная грамматика. Тогда алгоритм может быть сформулирован, как представлено в листинге~\ref{alg:graphParse}.
3737

3838
\begin{algorithm}[H]
39-
\begin{algorithmic}[1]
40-
\caption{Context-free recognizer for graphs}
41-
\label{alg:graphParse}
42-
\Function{contextFreePathQuerying}{$\mathcal{G}$, G}
43-
44-
\State{$n \gets$ количество узлов в $\mathcal{G}$}
45-
\State{$E \gets$ направленные ребра в $\mathcal{G}$}
46-
\State{$P \gets$ набор продукций из $G$}
47-
\State{$T \gets$ матрица $n \times n$, в которой каждый элемент $\varnothing$}
48-
\ForAll{$(i,x,j) \in E$}
49-
\Comment{Инициализация матрицы}
50-
\State{$T_{i,j} \gets T_{i,j} \cup \{A~|~(A \rightarrow x) \in P \}$}
51-
\EndFor
52-
\ForAll{$i \in 0\ldots n-1$}
53-
\Comment{Добавление петель для нетерминалов, порождающих пустую строку}
54-
\State{$T_{i,i} \gets T_{i,i} \cup \{ A \in N \mid A \to \varepsilon \}$}
55-
\EndFor
56-
\While{матрица $T$ меняется}
57-
58-
\State{$T \gets T \cup (T \times T)$}
59-
\Comment{Вычисление транзитивного замыкания}
60-
\EndWhile
61-
\State \Return $T$
62-
\EndFunction
63-
\end{algorithmic}
39+
%TODO!!!
40+
%\begin{algorithmic}[1]
41+
%\caption{Context-free recognizer for graphs}
42+
%\label{alg:graphParse}
43+
%\Function{contextFreePathQuerying}{$\mathcal{G}$, G}
44+
45+
% \State{$n \gets$ количество узлов в $\mathcal{G}$}
46+
% \State{$E \gets$ направленные ребра в $\mathcal{G}$}
47+
% \State{$P \gets$ набор продукций из $G$}
48+
% \State{$T \gets$ матрица $n \times n$, в которой каждый элемент $\varnothing$}
49+
% \ForAll{$(i,x,j) \in E$}
50+
% \Comment{Инициализация матрицы}
51+
% \State{$T_{i,j} \gets T_{i,j} \cup \{A~|~(A \rightarrow x) \in P \}$}
52+
% \EndFor
53+
% \ForAll{$i \in 0\ldots n-1$}
54+
% \Comment{Добавление петель для нетерминалов, порождающих пустую строку}
55+
% \State{$T_{i,i} \gets T_{i,i} \cup \{ A \in N \mid A \to \varepsilon \}$}
56+
% \EndFor
57+
% \While{матрица $T$ меняется}
58+
59+
% \State{$T \gets T \cup (T \times T)$}
60+
% \Comment{Вычисление транзитивного замыкания}
61+
% \EndWhile
62+
%\State \Return $T$
63+
%\EndFunction
64+
%\end{algorithmic}
6465
\end{algorithm}
6566

6667

@@ -194,8 +195,8 @@
194195
% Матричный алгоритм для конъюнктивных грамматик отличается от алгоритма~\ref{alg:graphParse} для контекстно-свободных грамматик только операцией умножения матриц, в остальном алгоритм остается без изменений. Определим операцию умножения матриц.
195196
% \begin{definition}
196197
% Пусть $M_1$ и $M_2$ матрицы размера $n$. Определим операцию $\circ$ следующим образом:
197-
% \[M_1 \circ M_2 = M_3,\]
198-
% \[M_3 [i,j] = \{A \mid \exists (A \rightarrow B_1 C_1 \& \ldots \& B_m C_m) \in P, (B_k , C_k) \in d[i,j] \forall k = 1,\ldots,m\}\],
198+
% \[M_1 \circ M_2 = M_3,\]
199+
% \[M_3 [i,j] = \{A \mid \exists (A \rightarrow B_1 C_1 \& \ldots \& B_m C_m) \in P, (B_k , C_k) \in d[i,j] \forall k = 1,\ldots,m\}\],
199200
% где \[d[i,j] = \bigcup_{k = 1}^{n} M_1 [i,k] \times M_2 [k,j].\]
200201
% \end{definition}
201202

@@ -274,31 +275,32 @@ \section{Особенности реализации}
274275

275276
\begin{algorithm}
276277
\floatname{algorithm}{Listing}
277-
\begin{algorithmic}[1]
278-
\caption{Context-free path querying algorithm. Boolean matrix version}
279-
\label{lst:cfpq_mtx_bool}
280-
\Function{evalCFPQ}{$D=(V,E), G=(N,\Sigma,P)$}
281-
\State{$n \gets$ |V|}
282-
\State{$T \gets \{T^{A_i} \mid A_i \in N, T^{A_i}$ is a matrix $n \times n$, $T^{A_i}_{k,l} \gets$ \texttt{false}\} }
283-
\ForAll{$(i,x,j) \in E$, $A_k \mid A_k \to x \in P$}
284-
%\Comment{Matrices initialization}
285-
%\For{$A_k \mid A_k \to x \in P$}
286-
{$T^{A_k}_{i,j} \gets \texttt{true}$}
287-
%\EndFor
288-
\EndFor
289-
\For{$A_k \mid A_k \to \varepsilon \in P$}
290-
{$T^{A_k}_{i,i} \gets \texttt{true}$}
291-
\EndFor
292-
293-
\While{any matrix in $T$ is changing}
294-
%\Comment{Transitive closure calculation}
295-
\For{$A_i \to A_j A_k \in P$}
296-
{ $T^{A_i} \gets T^{A_i} + (T^{A_j} \times T^{A_k})$ }
297-
\EndFor
298-
\EndWhile
299-
\State \Return $T$
300-
\EndFunction
301-
\end{algorithmic}
278+
% TODO!!!
279+
%\begin{algorithmic}[1]
280+
%\caption{Context-free path querying algorithm. Boolean matrix version}
281+
%\label{lst:cfpq_mtx_bool}
282+
%\Function{evalCFPQ}{$D=(V,E), G=(N,\Sigma,P)$}
283+
% \State{$n \gets$ |V|}
284+
% \State{$T \gets \{T^{A_i} \mid A_i \in N, T^{A_i}$ is a matrix $n \times n$, $T^{A_i}_{k,l} \gets$ \texttt{false}\} }
285+
% \ForAll{$(i,x,j) \in E$, $A_k \mid A_k \to x \in P$}
286+
% %\Comment{Matrices initialization}
287+
% %\For{$A_k \mid A_k \to x \in P$}
288+
% {$T^{A_k}_{i,j} \gets \texttt{true}$}
289+
% %\EndFor
290+
% \EndFor
291+
% \For{$A_k \mid A_k \to \varepsilon \in P$}
292+
% {$T^{A_k}_{i,i} \gets \texttt{true}$}
293+
% \EndFor
294+
295+
% \While{any matrix in $T$ is changing}
296+
% %\Comment{Transitive closure calculation}
297+
% \For{$A_i \to A_j A_k \in P$}
298+
% { $T^{A_i} \gets T^{A_i} + (T^{A_j} \times T^{A_k})$ }
299+
% \EndFor
300+
% \EndWhile
301+
%\State \Return $T$
302+
%\EndFunction
303+
%\end{algorithmic}
302304
\end{algorithm}
303305

304306
С другой стороны, для запросов, выразимых в терминах грамматик с небольшим количеством нетерминалов, практически может быть выгодно представлять множества нетерминалов в ячейке матрицы в виде битового вектора следующим образом.

0 commit comments

Comments
 (0)