From 35bf50c43aef0052cbf0e059f103811c4ae951e5 Mon Sep 17 00:00:00 2001 From: SurfaceYellowDuck Date: Fri, 7 Mar 2025 16:46:05 +0300 Subject: [PATCH 1/3] fix: typos in ring definition and LL example add example of buildig tree in LL algorithm and fixed typos fix: actions --- tex/GLL-based_CFPQ.tex | 187 ++++++++++++++++++++++++++++++++++++++++- tex/LinearAlgebra.tex | 6 +- 2 files changed, 187 insertions(+), 6 deletions(-) diff --git a/tex/GLL-based_CFPQ.tex b/tex/GLL-based_CFPQ.tex index d663728..aec1dfb 100644 --- a/tex/GLL-based_CFPQ.tex +++ b/tex/GLL-based_CFPQ.tex @@ -109,7 +109,8 @@ \section{LL(k)-алгоритм синтаксического анализа} Пусть $G = \langle N, \Sigma, P, S \rangle$~--- КС-грамматика. Множество $\first[k]$ определено для сентенциальной формы $\alpha$ следующим образом: \[ \first[k](\alpha) = \{ \omega \in \Sigma^* \mid \alpha \derives{} \omega \text{ и } |\omega| < k \text{ либо } \exists \beta: \alpha \derives{} \omega \beta \text{ и } |\omega| = k \} \] - , где $\alpha, \beta \in (N \cup \Sigma)^*.$ + , где $\alpha, \beta \in (N \cup \Sigma)^*.$ Это означает, что в общем случае $\alpha$ может быть как одиночным нетерминалом, так и произвольной цепочкой из смешанного алфавита. + Далее в алгоритме построения множества $\first[k]$ это наглядно показано. \end{definition} \begin{definition} @@ -166,6 +167,8 @@ \section{LL(k)-алгоритм синтаксического анализа} \end{align*} \end{multicols} +Как можно заметить, в примере поиска множества $\first$ в качестве аргумента функции передается нетерминал, но множество $\first$ ищется для правой части правила. + Пример множеств $\follow$ для нетерминалов грамматики $G$: \begin{align*} @@ -215,7 +218,7 @@ \section{LL(k)-алгоритм синтаксического анализа} \begin{example}Пример работы LL анализатора. Рассмотрим грамматику $S \to aSbS \mid \varepsilon$ и выводимое слово $\omega = abab$. -Расмотрим пошагово работу алгоритма, будем использовать таблицу, построенную в предыдущем примере: +Расмотрим пошагово работу алгоритма c построением дерева, будем использовать таблицу, построенную в предыдущем примере: \begin{enumerate} \item Начало работы. @@ -264,6 +267,14 @@ \section{LL(k)-алгоритм синтаксического анализа} \textcolor{red}{a} & b & a & b & \$ \\ \hline \end{tabular} + \begin{center} + \resizebox{1cm}{1cm}{ + \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] + \node[symbol_node] (s_0) {$(S)$}; + \end{tikzpicture} + } + \end{center} + \item Снимаем терминал $a$ со стека и двигаем указатель. Стек: \, @@ -279,6 +290,20 @@ \section{LL(k)-алгоритм синтаксического анализа} \hline a & \textcolor{red}{b} & a & b & \$ \\ \hline \end{tabular} + + \begin{center} + \resizebox{1.5cm}{1.3cm}{ + \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] + + \node[symbol_node] (s_0) {$(S)$}; + \node[symbol_node] (a_0) [below =of s_0] {$(a)$}; + + \path[->] + (s_0) edge (a_0) + ; + \end{tikzpicture} + } + \end{center} \item Ищем ячейку с координатами (S, b), применяем продукцию из ячейки. @@ -295,6 +320,22 @@ \section{LL(k)-алгоритм синтаксического анализа} a & \textcolor{red}{b} & a & b & \$ \\ \hline \end{tabular} + \begin{center} + \resizebox{3cm}{2cm}{ + \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] + + \node[symbol_node] (s_0) {$(S)$}; + \node[symbol_node] (a_0) [below =of s_0] {$(a)$}; + \node[symbol_node] (s_1) [right =of a_0] {$(S)$}; + + \path[->] + (s_0) edge (a_0) + (s_0) edge (s_1) + ; + \end{tikzpicture} + } +\end{center} + \item Снимаем терминал $b$ со стека и двигаем указатель. Стек: \, @@ -309,6 +350,24 @@ \section{LL(k)-алгоритм синтаксического анализа} a & b & \textcolor{red}{a} & b & \$ \\ \hline \end{tabular} + \begin{center} + \resizebox{3cm}{2cm}{ + \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] + + \node[symbol_node] (s_0) {$(S)$}; + \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; + \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; + \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; + + \path[->] + (s_0) edge (a_0) + (s_0) edge (s_1) + (s_0) edge (b_0) + ; + \end{tikzpicture} + } +\end{center} + \item Ищем ячейку с координатами (S, a), применяем продукцию из ячейки. Стек: \, @@ -326,6 +385,26 @@ \section{LL(k)-алгоритм синтаксического анализа} a & b & \textcolor{red}{a} & b & \$ \\ \hline \end{tabular} + \begin{center} + \resizebox{5cm}{3cm}{ + \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] + + \node[symbol_node] (s_0) {$(S)$}; + \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; + \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; + \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; + \node[symbol_node] (s_2) [right =of b_0] {$(S)$}; + + \path[->] + (s_0) edge (a_0) + (s_0) edge (s_1) + (s_0) edge (b_0) + (s_0) edge (s_2) + ; + \end{tikzpicture} + } + \end{center} + \item Снимаем терминал $a$ со стека и двигаем указатель. Стек: \, @@ -342,6 +421,28 @@ \section{LL(k)-алгоритм синтаксического анализа} a & b & a & \textcolor{red}{b} & \$ \\ \hline \end{tabular} + \begin{center} + \resizebox{6cm}{3.5cm}{ + \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] + + \node[symbol_node] (s_0) {$(S)$}; + \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; + \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; + \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; + \node[symbol_node] (s_2) [right =of b_0] {$(S)$}; + \node[symbol_node] (a_1) [below =of s_2] {$(a)$}; + + \path[->] + (s_0) edge (a_0) + (s_0) edge (s_1) + (s_0) edge (b_0) + (s_0) edge (s_2) + (s_2) edge (a_1) + ; + \end{tikzpicture} + } + \end{center} + \item Ищем ячейку с координатами (S, b), применяем продукцию из ячейки. Стек: \, @@ -357,6 +458,31 @@ \section{LL(k)-алгоритм синтаксического анализа} a & b & a & \textcolor{red}{b} & \$ \\ \hline \end{tabular} + \begin{center} + \resizebox{6cm}{3.5cm}{ + \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] + + \node[symbol_node] (s_0) {$(S)$}; + \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; + \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; + \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; + \node[symbol_node] (s_2) [right =of b_0] {$(S)$}; + \node[symbol_node] (s_3) [below =of s_2] {$(S)$}; + \node[symbol_node] (a_1) [left =of s_3] {$(a)$}; + + + \path[->] + (s_0) edge (a_0) + (s_0) edge (s_1) + (s_0) edge (b_0) + (s_0) edge (s_2) + (s_2) edge (a_1) + (s_2) edge (s_3) + ; + \end{tikzpicture} + } + \end{center} + \item Снимаем терминал $b$ со стека и двигаем указатель. Стек: \, @@ -371,6 +497,32 @@ \section{LL(k)-алгоритм синтаксического анализа} a & b & a & b & \textcolor{red}{\$} \\ \hline \end{tabular} + \begin{center} + \resizebox{6cm}{3.5cm}{ + \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] + + \node[symbol_node] (s_0) {$(S)$}; + \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; + \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; + \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; + \node[symbol_node] (s_2) [right =of b_0] {$(S)$}; + \node[symbol_node] (s_3) [below =of s_2] {$(S)$}; + \node[symbol_node] (a_1) [left =of s_3] {$(a)$}; + \node[symbol_node] (b_1) [right =of s_3] {$(b)$}; + + \path[->] + (s_0) edge (a_0) + (s_0) edge (s_1) + (s_0) edge (b_0) + (s_0) edge (s_2) + (s_2) edge (a_1) + (s_2) edge (s_3) + (s_2) edge (b_1) + ; + \end{tikzpicture} + } + \end{center} + \item Ищем ячейку с координатами (S, \$), применяем продукцию из ячейки. Стек: \, @@ -384,13 +536,42 @@ \section{LL(k)-алгоритм синтаксического анализа} a & b & a & b & \textcolor{red}{\$} \\ \hline \end{tabular} + \begin{center} + \resizebox{7cm}{4cm}{ + \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] + + \node[symbol_node] (s_0) {$(S)$}; + \node[symbol_node] (s_1) [below =of s_0] {$(S)$} + \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; + \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; + \node[symbol_node] (s_2) [right =of b_0] {$(S)$}; + \node[symbol_node] (s_3) [below =of s_2] {$(S)$}; + \node[symbol_node] (a_1) [left =of s_3] {$(a)$}; + \node[symbol_node] (b_1) [right =of s_3] {$(b)$}; + \node[symbol_node] (s_4) [right =of b_1] {$(S)$}; + + + \path[->] + (s_0) edge (a_0) + (s_0) edge (s_1) + (s_0) edge (b_0) + (s_0) edge (s_2) + (s_2) edge (a_1) + (s_2) edge (s_3) + (s_2) edge (b_1) + (s_2) edge (s_4) + ; + \end{tikzpicture} + } + \end{center} + \item Оказались в конце строки и на вершине стека символ конца --- завершаем разбор. \end{enumerate} \end{example} -Можно расширить данный алгоритм так, чтобы он строил дерево вывода. Дерево будет строиться сверху вниз, от корня к листьям. Для этого необходимо расширить шаги алгоритма. +Дерево строится сверху вниз, от корня к листьям. Для этого выолняются следующие шаги алгоритма: \begin{itemize} \item В ситуации, когда мы читаем очередной терминал (на вершине стека и во входе одинаковые терминалы), мы создаём лист с соответствующим терминалом. \item В ситуации, когда мы заменяем нетерминал на стеке на правую часть продукции в соответствии с управляющей таблицей, мы создаём нетерминальный узел соответствующий применяемой продукции. diff --git a/tex/LinearAlgebra.tex b/tex/LinearAlgebra.tex index 83345d6..010667d 100644 --- a/tex/LinearAlgebra.tex +++ b/tex/LinearAlgebra.tex @@ -320,7 +320,7 @@ \section{Полукольцо} \section{Кольцо} \begin{definition}[Кольцо] - Непустое множество $R$ с двумя бинарными операциями $\oplus: R \times R \to R$ (умножение) и $\otimes: R \times R \to R$ (сложение) называется \emph{кольцом}, если выполнены следующие условия. + Непустое множество $R$ с двумя бинарными операциями $\oplus: R \times R \to R$ (сложение) и $\otimes: R \times R \to R$ (умножение) называется \emph{кольцом}, если выполнены следующие условия. \begin{enumerate} \item $(R, \oplus)$~--- это абелева группа, нейтральный элемент которой~--- $\Bbbzero$. Для любых $a, b, c \in R$: @@ -331,11 +331,11 @@ \section{Кольцо} \item для любого $a \in R$ существует $-a \in R$, такой что $a + (-a) = \Bbbzero$. \end{itemize} В последнем пункте кроется отличие от полукольца. - \item $(R, \otimes)$~--- это моноид, нейтральный элемент которого~--- $\Bbbzero$. + \item $(R, \otimes)$~--- это моноид, нейтральный элемент которого~--- 1. Для любых $a, b, c \in R$: \begin{itemize} \item $(a \otimes b) \otimes c = a \otimes (b \otimes c)$ - \item $\Bbbzero \otimes a = a \otimes \Bbbzero = a$ + \item $1 \otimes a = a \otimes 1 = a$ \end{itemize} \item $\otimes$ дистрибутивно слева и справа относительно $\oplus$: \begin{itemize} From a55bf46b910846eeeda575787b86a551f93085a3 Mon Sep 17 00:00:00 2001 From: SurfaceYellowDuck Date: Fri, 7 Mar 2025 21:13:25 +0300 Subject: [PATCH 2/3] fix: add semicolon --- tex/GLL-based_CFPQ.tex | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tex/GLL-based_CFPQ.tex b/tex/GLL-based_CFPQ.tex index aec1dfb..bb11181 100644 --- a/tex/GLL-based_CFPQ.tex +++ b/tex/GLL-based_CFPQ.tex @@ -290,7 +290,7 @@ \section{LL(k)-алгоритм синтаксического анализа} \hline a & \textcolor{red}{b} & a & b & \$ \\ \hline \end{tabular} - + \begin{center} \resizebox{1.5cm}{1.3cm}{ \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] @@ -537,11 +537,11 @@ \section{LL(k)-алгоритм синтаксического анализа} \end{tabular} \begin{center} - \resizebox{7cm}{4cm}{ - \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] + \resizebox{6cm}{3.5cm}{ + \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] \node[symbol_node] (s_0) {$(S)$}; - \node[symbol_node] (s_1) [below =of s_0] {$(S)$} + \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; \node[symbol_node] (s_2) [right =of b_0] {$(S)$}; @@ -550,7 +550,6 @@ \section{LL(k)-алгоритм синтаксического анализа} \node[symbol_node] (b_1) [right =of s_3] {$(b)$}; \node[symbol_node] (s_4) [right =of b_1] {$(S)$}; - \path[->] (s_0) edge (a_0) (s_0) edge (s_1) @@ -560,7 +559,7 @@ \section{LL(k)-алгоритм синтаксического анализа} (s_2) edge (s_3) (s_2) edge (b_1) (s_2) edge (s_4) - ; + ; \end{tikzpicture} } \end{center} From dcf4c1c154902fa9d95efea459bbf03ba5c7ffaa Mon Sep 17 00:00:00 2001 From: SurfaceYellowDuck Date: Thu, 13 Mar 2025 16:39:45 +0300 Subject: [PATCH 3/3] fix: delete superfluous, some typos --- tex/GLL-based_CFPQ.tex | 124 +++++++++++++++++++++++------------------ tex/TensorProduct.tex | 2 +- 2 files changed, 71 insertions(+), 55 deletions(-) diff --git a/tex/GLL-based_CFPQ.tex b/tex/GLL-based_CFPQ.tex index bb11181..7289ddf 100644 --- a/tex/GLL-based_CFPQ.tex +++ b/tex/GLL-based_CFPQ.tex @@ -109,7 +109,7 @@ \section{LL(k)-алгоритм синтаксического анализа} Пусть $G = \langle N, \Sigma, P, S \rangle$~--- КС-грамматика. Множество $\first[k]$ определено для сентенциальной формы $\alpha$ следующим образом: \[ \first[k](\alpha) = \{ \omega \in \Sigma^* \mid \alpha \derives{} \omega \text{ и } |\omega| < k \text{ либо } \exists \beta: \alpha \derives{} \omega \beta \text{ и } |\omega| = k \} \] - , где $\alpha, \beta \in (N \cup \Sigma)^*.$ Это означает, что в общем случае $\alpha$ может быть как одиночным нетерминалом, так и произвольной цепочкой из смешанного алфавита. + , где $\alpha, \beta \in (N \cup \Sigma)^*.$ Далее в алгоритме построения множества $\first[k]$ это наглядно показано. \end{definition} @@ -156,18 +156,13 @@ \section{LL(k)-алгоритм синтаксического анализа} Пример множеств $\first$ для нетерминалов грамматики $G$: -\begin{multicols}{2} - -\columnbreak - +% \begin{multicols}{2} \begin{align*} \first(S) &= \{ a \} & \first(B) &= \{ c, \varepsilon \} \\ \first(A) &= \{ a, \varepsilon \} & \first(S') &= \{ a, b, \varepsilon \}\\ \first(A') &= \{ a, b \} \end{align*} -\end{multicols} - -Как можно заметить, в примере поиска множества $\first$ в качестве аргумента функции передается нетерминал, но множество $\first$ ищется для правой части правила. +% \end{multicols} Пример множеств $\follow$ для нетерминалов грамматики $G$: @@ -270,7 +265,7 @@ \section{LL(k)-алгоритм синтаксического анализа} \begin{center} \resizebox{1cm}{1cm}{ \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] - \node[symbol_node] (s_0) {$(S)$}; + \node[symbol_node] (s_0) {$S$}; \end{tikzpicture} } \end{center} @@ -295,8 +290,8 @@ \section{LL(k)-алгоритм синтаксического анализа} \resizebox{1.5cm}{1.3cm}{ \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] - \node[symbol_node] (s_0) {$(S)$}; - \node[symbol_node] (a_0) [below =of s_0] {$(a)$}; + \node[symbol_node] (s_0) {$S$}; + \node[symbol_node] (a_0) [below =of s_0] {$a$}; \path[->] (s_0) edge (a_0) @@ -324,13 +319,14 @@ \section{LL(k)-алгоритм синтаксического анализа} \resizebox{3cm}{2cm}{ \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] - \node[symbol_node] (s_0) {$(S)$}; - \node[symbol_node] (a_0) [below =of s_0] {$(a)$}; - \node[symbol_node] (s_1) [right =of a_0] {$(S)$}; - + \node[symbol_node] (s_0) {$S$}; + \node[symbol_node] (a_0) [below =of s_0] {$a$}; + \node[symbol_node] (s_1) [right =of a_0] {$S$}; + \node[symbol_node] (eps_1) [below =of s_1] {$\varepsilon$}; \path[->] (s_0) edge (a_0) (s_0) edge (s_1) + (s_1) edge (eps_1) ; \end{tikzpicture} } @@ -354,15 +350,17 @@ \section{LL(k)-алгоритм синтаксического анализа} \resizebox{3cm}{2cm}{ \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] - \node[symbol_node] (s_0) {$(S)$}; - \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; - \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; - \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; + \node[symbol_node] (s_0) {$S$}; + \node[symbol_node] (s_1) [below =of s_0] {$S$}; + \node[symbol_node] (a_0) [left =of s_1] {$a$}; + \node[symbol_node] (b_0) [right =of s_1] {$b$}; + \node[symbol_node] (eps_1) [below =of s_1] {$\varepsilon$}; \path[->] (s_0) edge (a_0) (s_0) edge (s_1) (s_0) edge (b_0) + (s_1) edge (eps_1) ; \end{tikzpicture} } @@ -389,17 +387,19 @@ \section{LL(k)-алгоритм синтаксического анализа} \resizebox{5cm}{3cm}{ \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] - \node[symbol_node] (s_0) {$(S)$}; - \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; - \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; - \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; - \node[symbol_node] (s_2) [right =of b_0] {$(S)$}; + \node[symbol_node] (s_0) {$S$}; + \node[symbol_node] (s_1) [below =of s_0] {$S$}; + \node[symbol_node] (a_0) [left =of s_1] {$a$}; + \node[symbol_node] (b_0) [right =of s_1] {$b$}; + \node[symbol_node] (s_2) [right =of b_0] {$S$}; + \node[symbol_node] (eps_1) [below =of s_1] {$\varepsilon$}; \path[->] (s_0) edge (a_0) (s_0) edge (s_1) (s_0) edge (b_0) (s_0) edge (s_2) + (s_1) edge (eps_1) ; \end{tikzpicture} } @@ -425,12 +425,13 @@ \section{LL(k)-алгоритм синтаксического анализа} \resizebox{6cm}{3.5cm}{ \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] - \node[symbol_node] (s_0) {$(S)$}; - \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; - \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; - \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; - \node[symbol_node] (s_2) [right =of b_0] {$(S)$}; - \node[symbol_node] (a_1) [below =of s_2] {$(a)$}; + \node[symbol_node] (s_0) {$S$}; + \node[symbol_node] (s_1) [below =of s_0] {$S$}; + \node[symbol_node] (a_0) [left =of s_1] {$a$}; + \node[symbol_node] (b_0) [right =of s_1] {$b$}; + \node[symbol_node] (s_2) [right =of b_0] {$S$}; + \node[symbol_node] (a_1) [below =of s_2] {$a$}; + \node[symbol_node] (eps_1) [below =of s_1] {$\varepsilon$}; \path[->] (s_0) edge (a_0) @@ -438,6 +439,7 @@ \section{LL(k)-алгоритм синтаксического анализа} (s_0) edge (b_0) (s_0) edge (s_2) (s_2) edge (a_1) + (s_1) edge (eps_1) ; \end{tikzpicture} } @@ -462,13 +464,15 @@ \section{LL(k)-алгоритм синтаксического анализа} \resizebox{6cm}{3.5cm}{ \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] - \node[symbol_node] (s_0) {$(S)$}; - \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; - \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; - \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; - \node[symbol_node] (s_2) [right =of b_0] {$(S)$}; - \node[symbol_node] (s_3) [below =of s_2] {$(S)$}; - \node[symbol_node] (a_1) [left =of s_3] {$(a)$}; + \node[symbol_node] (s_0) {$S$}; + \node[symbol_node] (s_1) [below =of s_0] {$S$}; + \node[symbol_node] (a_0) [left =of s_1] {$a$}; + \node[symbol_node] (b_0) [right =of s_1] {$b$}; + \node[symbol_node] (s_2) [right =of b_0] {$S$}; + \node[symbol_node] (s_3) [below =of s_2] {$S$}; + \node[symbol_node] (a_1) [left =of s_3] {$a$}; + \node[symbol_node] (eps_1) [below =of s_1] {$\varepsilon$}; + \node[symbol_node] (eps_2) [below =of s_3] {$\varepsilon$}; \path[->] @@ -478,6 +482,8 @@ \section{LL(k)-алгоритм синтаксического анализа} (s_0) edge (s_2) (s_2) edge (a_1) (s_2) edge (s_3) + (s_1) edge (eps_1) + (s_3) edge (eps_2) ; \end{tikzpicture} } @@ -501,14 +507,16 @@ \section{LL(k)-алгоритм синтаксического анализа} \resizebox{6cm}{3.5cm}{ \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] - \node[symbol_node] (s_0) {$(S)$}; - \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; - \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; - \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; - \node[symbol_node] (s_2) [right =of b_0] {$(S)$}; - \node[symbol_node] (s_3) [below =of s_2] {$(S)$}; - \node[symbol_node] (a_1) [left =of s_3] {$(a)$}; - \node[symbol_node] (b_1) [right =of s_3] {$(b)$}; + \node[symbol_node] (s_0) {$S$}; + \node[symbol_node] (s_1) [below =of s_0] {$S$}; + \node[symbol_node] (a_0) [left =of s_1] {$a$}; + \node[symbol_node] (b_0) [right =of s_1] {$b$}; + \node[symbol_node] (s_2) [right =of b_0] {$S$}; + \node[symbol_node] (s_3) [below =of s_2] {$S$}; + \node[symbol_node] (a_1) [left =of s_3] {$a$}; + \node[symbol_node] (b_1) [right =of s_3] {$b$}; + \node[symbol_node] (eps_1) [below =of s_1] {$\varepsilon$}; + \node[symbol_node] (eps_2) [below =of s_3] {$\varepsilon$}; \path[->] (s_0) edge (a_0) @@ -518,6 +526,8 @@ \section{LL(k)-алгоритм синтаксического анализа} (s_2) edge (a_1) (s_2) edge (s_3) (s_2) edge (b_1) + (s_1) edge (eps_1) + (s_3) edge (eps_2) ; \end{tikzpicture} } @@ -540,15 +550,18 @@ \section{LL(k)-алгоритм синтаксического анализа} \resizebox{6cm}{3.5cm}{ \begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm] - \node[symbol_node] (s_0) {$(S)$}; - \node[symbol_node] (s_1) [below =of s_0] {$(S)$}; - \node[symbol_node] (a_0) [left =of s_1] {$(a)$}; - \node[symbol_node] (b_0) [right =of s_1] {$(b)$}; - \node[symbol_node] (s_2) [right =of b_0] {$(S)$}; - \node[symbol_node] (s_3) [below =of s_2] {$(S)$}; - \node[symbol_node] (a_1) [left =of s_3] {$(a)$}; - \node[symbol_node] (b_1) [right =of s_3] {$(b)$}; - \node[symbol_node] (s_4) [right =of b_1] {$(S)$}; + \node[symbol_node] (s_0) {$S$}; + \node[symbol_node] (s_1) [below =of s_0] {$S$}; + \node[symbol_node] (a_0) [left =of s_1] {$a$}; + \node[symbol_node] (b_0) [right =of s_1] {$b$}; + \node[symbol_node] (s_2) [right =of b_0] {$S$}; + \node[symbol_node] (s_3) [below =of s_2] {$S$}; + \node[symbol_node] (a_1) [left =of s_3] {$a$}; + \node[symbol_node] (b_1) [right =of s_3] {$b$}; + \node[symbol_node] (s_4) [right =of b_1] {$S$}; + \node[symbol_node] (eps_1) [below =of s_1] {$\varepsilon$}; + \node[symbol_node] (eps_2) [below =of s_3] {$\varepsilon$}; + \node[symbol_node] (eps_3) [below =of s_4] {$\varepsilon$}; \path[->] (s_0) edge (a_0) @@ -559,6 +572,9 @@ \section{LL(k)-алгоритм синтаксического анализа} (s_2) edge (s_3) (s_2) edge (b_1) (s_2) edge (s_4) + (s_1) edge (eps_1) + (s_3) edge (eps_2) + (s_4) edge (eps_3) ; \end{tikzpicture} } diff --git a/tex/TensorProduct.tex b/tex/TensorProduct.tex index efcd6e1..079a542 100644 --- a/tex/TensorProduct.tex +++ b/tex/TensorProduct.tex @@ -417,7 +417,7 @@ \section{Примеры} То есть находим ровно одну новую пару вершин, между которыми существует интересующий нас путь. Попробуйте спрогнозировать, сколько итераций нам ещё осталось сделать. -\textbf{Итерауия 4}. +\textbf{Итерация 4}. Продолжаем. Вычисляем тензорное произведение. \begin{scaledalign}{\footnotesize}{2pt}{0.9}{\notag}