Skip to content

Commit 35bf50c

Browse files
fix: typos in ring definition and LL example
add example of buildig tree in LL algorithm and fixed typos fix: actions
1 parent 21887e0 commit 35bf50c

File tree

2 files changed

+187
-6
lines changed

2 files changed

+187
-6
lines changed

tex/GLL-based_CFPQ.tex

Lines changed: 184 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ \section{LL(k)-алгоритм синтаксического анализа}
109109
Пусть $G = \langle N, \Sigma, P, S \rangle$~--- КС-грамматика. Множество $\first[k]$ определено для сентенциальной формы $\alpha$ следующим образом:
110110
\[ \first[k](\alpha) = \{ \omega \in \Sigma^* \mid \alpha \derives{} \omega \text{ и } |\omega| < k \text{ либо } \exists \beta: \alpha \derives{} \omega \beta \text{ и } |\omega| = k \}
111111
\]
112-
, где $\alpha, \beta \in (N \cup \Sigma)^*.$
112+
, где $\alpha, \beta \in (N \cup \Sigma)^*.$ Это означает, что в общем случае $\alpha$ может быть как одиночным нетерминалом, так и произвольной цепочкой из смешанного алфавита.
113+
Далее в алгоритме построения множества $\first[k]$ это наглядно показано.
113114
\end{definition}
114115

115116
\begin{definition}
@@ -166,6 +167,8 @@ \section{LL(k)-алгоритм синтаксического анализа}
166167
\end{align*}
167168
\end{multicols}
168169

170+
Как можно заметить, в примере поиска множества $\first$ в качестве аргумента функции передается нетерминал, но множество $\first$ ищется для правой части правила.
171+
169172
Пример множеств $\follow$ для нетерминалов грамматики $G$:
170173

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

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

220223
\begin{enumerate}
221224
\item Начало работы.
@@ -264,6 +267,14 @@ \section{LL(k)-алгоритм синтаксического анализа}
264267
\textcolor{red}{a} & b & a & b & \$ \\ \hline
265268
\end{tabular}
266269

270+
\begin{center}
271+
\resizebox{1cm}{1cm}{
272+
\begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm]
273+
\node[symbol_node] (s_0) {$(S)$};
274+
\end{tikzpicture}
275+
}
276+
\end{center}
277+
267278
\item Снимаем терминал $a$ со стека и двигаем указатель.
268279

269280
Стек: \,
@@ -279,6 +290,20 @@ \section{LL(k)-алгоритм синтаксического анализа}
279290
\hline
280291
a & \textcolor{red}{b} & a & b & \$ \\ \hline
281292
\end{tabular}
293+
294+
\begin{center}
295+
\resizebox{1.5cm}{1.3cm}{
296+
\begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm]
297+
298+
\node[symbol_node] (s_0) {$(S)$};
299+
\node[symbol_node] (a_0) [below =of s_0] {$(a)$};
300+
301+
\path[->]
302+
(s_0) edge (a_0)
303+
;
304+
\end{tikzpicture}
305+
}
306+
\end{center}
282307

283308
\item Ищем ячейку с координатами (S, b), применяем продукцию из ячейки.
284309

@@ -295,6 +320,22 @@ \section{LL(k)-алгоритм синтаксического анализа}
295320
a & \textcolor{red}{b} & a & b & \$ \\ \hline
296321
\end{tabular}
297322

323+
\begin{center}
324+
\resizebox{3cm}{2cm}{
325+
\begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm]
326+
327+
\node[symbol_node] (s_0) {$(S)$};
328+
\node[symbol_node] (a_0) [below =of s_0] {$(a)$};
329+
\node[symbol_node] (s_1) [right =of a_0] {$(S)$};
330+
331+
\path[->]
332+
(s_0) edge (a_0)
333+
(s_0) edge (s_1)
334+
;
335+
\end{tikzpicture}
336+
}
337+
\end{center}
338+
298339
\item Снимаем терминал $b$ со стека и двигаем указатель.
299340

300341
Стек: \,
@@ -309,6 +350,24 @@ \section{LL(k)-алгоритм синтаксического анализа}
309350
a & b & \textcolor{red}{a} & b & \$ \\ \hline
310351
\end{tabular}
311352

353+
\begin{center}
354+
\resizebox{3cm}{2cm}{
355+
\begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm]
356+
357+
\node[symbol_node] (s_0) {$(S)$};
358+
\node[symbol_node] (s_1) [below =of s_0] {$(S)$};
359+
\node[symbol_node] (a_0) [left =of s_1] {$(a)$};
360+
\node[symbol_node] (b_0) [right =of s_1] {$(b)$};
361+
362+
\path[->]
363+
(s_0) edge (a_0)
364+
(s_0) edge (s_1)
365+
(s_0) edge (b_0)
366+
;
367+
\end{tikzpicture}
368+
}
369+
\end{center}
370+
312371
\item Ищем ячейку с координатами (S, a), применяем продукцию из ячейки.
313372

314373
Стек: \,
@@ -326,6 +385,26 @@ \section{LL(k)-алгоритм синтаксического анализа}
326385
a & b & \textcolor{red}{a} & b & \$ \\ \hline
327386
\end{tabular}
328387

388+
\begin{center}
389+
\resizebox{5cm}{3cm}{
390+
\begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm]
391+
392+
\node[symbol_node] (s_0) {$(S)$};
393+
\node[symbol_node] (s_1) [below =of s_0] {$(S)$};
394+
\node[symbol_node] (a_0) [left =of s_1] {$(a)$};
395+
\node[symbol_node] (b_0) [right =of s_1] {$(b)$};
396+
\node[symbol_node] (s_2) [right =of b_0] {$(S)$};
397+
398+
\path[->]
399+
(s_0) edge (a_0)
400+
(s_0) edge (s_1)
401+
(s_0) edge (b_0)
402+
(s_0) edge (s_2)
403+
;
404+
\end{tikzpicture}
405+
}
406+
\end{center}
407+
329408
\item Снимаем терминал $a$ со стека и двигаем указатель.
330409

331410
Стек: \,
@@ -342,6 +421,28 @@ \section{LL(k)-алгоритм синтаксического анализа}
342421
a & b & a & \textcolor{red}{b} & \$ \\ \hline
343422
\end{tabular}
344423

424+
\begin{center}
425+
\resizebox{6cm}{3.5cm}{
426+
\begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm]
427+
428+
\node[symbol_node] (s_0) {$(S)$};
429+
\node[symbol_node] (s_1) [below =of s_0] {$(S)$};
430+
\node[symbol_node] (a_0) [left =of s_1] {$(a)$};
431+
\node[symbol_node] (b_0) [right =of s_1] {$(b)$};
432+
\node[symbol_node] (s_2) [right =of b_0] {$(S)$};
433+
\node[symbol_node] (a_1) [below =of s_2] {$(a)$};
434+
435+
\path[->]
436+
(s_0) edge (a_0)
437+
(s_0) edge (s_1)
438+
(s_0) edge (b_0)
439+
(s_0) edge (s_2)
440+
(s_2) edge (a_1)
441+
;
442+
\end{tikzpicture}
443+
}
444+
\end{center}
445+
345446
\item Ищем ячейку с координатами (S, b), применяем продукцию из ячейки.
346447

347448
Стек: \,
@@ -357,6 +458,31 @@ \section{LL(k)-алгоритм синтаксического анализа}
357458
a & b & a & \textcolor{red}{b} & \$ \\ \hline
358459
\end{tabular}
359460

461+
\begin{center}
462+
\resizebox{6cm}{3.5cm}{
463+
\begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm]
464+
465+
\node[symbol_node] (s_0) {$(S)$};
466+
\node[symbol_node] (s_1) [below =of s_0] {$(S)$};
467+
\node[symbol_node] (a_0) [left =of s_1] {$(a)$};
468+
\node[symbol_node] (b_0) [right =of s_1] {$(b)$};
469+
\node[symbol_node] (s_2) [right =of b_0] {$(S)$};
470+
\node[symbol_node] (s_3) [below =of s_2] {$(S)$};
471+
\node[symbol_node] (a_1) [left =of s_3] {$(a)$};
472+
473+
474+
\path[->]
475+
(s_0) edge (a_0)
476+
(s_0) edge (s_1)
477+
(s_0) edge (b_0)
478+
(s_0) edge (s_2)
479+
(s_2) edge (a_1)
480+
(s_2) edge (s_3)
481+
;
482+
\end{tikzpicture}
483+
}
484+
\end{center}
485+
360486
\item Снимаем терминал $b$ со стека и двигаем указатель.
361487

362488
Стек: \,
@@ -371,6 +497,32 @@ \section{LL(k)-алгоритм синтаксического анализа}
371497
a & b & a & b & \textcolor{red}{\$} \\ \hline
372498
\end{tabular}
373499

500+
\begin{center}
501+
\resizebox{6cm}{3.5cm}{
502+
\begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm]
503+
504+
\node[symbol_node] (s_0) {$(S)$};
505+
\node[symbol_node] (s_1) [below =of s_0] {$(S)$};
506+
\node[symbol_node] (a_0) [left =of s_1] {$(a)$};
507+
\node[symbol_node] (b_0) [right =of s_1] {$(b)$};
508+
\node[symbol_node] (s_2) [right =of b_0] {$(S)$};
509+
\node[symbol_node] (s_3) [below =of s_2] {$(S)$};
510+
\node[symbol_node] (a_1) [left =of s_3] {$(a)$};
511+
\node[symbol_node] (b_1) [right =of s_3] {$(b)$};
512+
513+
\path[->]
514+
(s_0) edge (a_0)
515+
(s_0) edge (s_1)
516+
(s_0) edge (b_0)
517+
(s_0) edge (s_2)
518+
(s_2) edge (a_1)
519+
(s_2) edge (s_3)
520+
(s_2) edge (b_1)
521+
;
522+
\end{tikzpicture}
523+
}
524+
\end{center}
525+
374526
\item Ищем ячейку с координатами (S, \$), применяем продукцию из ячейки.
375527

376528
Стек: \,
@@ -384,13 +536,42 @@ \section{LL(k)-алгоритм синтаксического анализа}
384536
a & b & a & b & \textcolor{red}{\$} \\ \hline
385537
\end{tabular}
386538

539+
\begin{center}
540+
\resizebox{7cm}{4cm}{
541+
\begin{tikzpicture}[shorten >=1pt,on grid,auto,node distance=1.8cm]
542+
543+
\node[symbol_node] (s_0) {$(S)$};
544+
\node[symbol_node] (s_1) [below =of s_0] {$(S)$}
545+
\node[symbol_node] (a_0) [left =of s_1] {$(a)$};
546+
\node[symbol_node] (b_0) [right =of s_1] {$(b)$};
547+
\node[symbol_node] (s_2) [right =of b_0] {$(S)$};
548+
\node[symbol_node] (s_3) [below =of s_2] {$(S)$};
549+
\node[symbol_node] (a_1) [left =of s_3] {$(a)$};
550+
\node[symbol_node] (b_1) [right =of s_3] {$(b)$};
551+
\node[symbol_node] (s_4) [right =of b_1] {$(S)$};
552+
553+
554+
\path[->]
555+
(s_0) edge (a_0)
556+
(s_0) edge (s_1)
557+
(s_0) edge (b_0)
558+
(s_0) edge (s_2)
559+
(s_2) edge (a_1)
560+
(s_2) edge (s_3)
561+
(s_2) edge (b_1)
562+
(s_2) edge (s_4)
563+
;
564+
\end{tikzpicture}
565+
}
566+
\end{center}
567+
387568
\item Оказались в конце строки и на вершине стека символ конца --- завершаем разбор.
388569

389570
\end{enumerate}
390571

391572
\end{example}
392573

393-
Можно расширить данный алгоритм так, чтобы он строил дерево вывода. Дерево будет строиться сверху вниз, от корня к листьям. Для этого необходимо расширить шаги алгоритма.
574+
Дерево строится сверху вниз, от корня к листьям. Для этого выолняются следующие шаги алгоритма:
394575
\begin{itemize}
395576
\item В ситуации, когда мы читаем очередной терминал (на вершине стека и во входе одинаковые терминалы), мы создаём лист с соответствующим терминалом.
396577
\item В ситуации, когда мы заменяем нетерминал на стеке на правую часть продукции в соответствии с управляющей таблицей, мы создаём нетерминальный узел соответствующий применяемой продукции.

tex/LinearAlgebra.tex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ \section{Полукольцо}
320320
\section{Кольцо}
321321

322322
\begin{definition}[Кольцо]
323-
Непустое множество $R$ с двумя бинарными операциями $\oplus: R \times R \to R$ (умножение) и $\otimes: R \times R \to R$ (сложение) называется \emph{кольцом}, если выполнены следующие условия.
323+
Непустое множество $R$ с двумя бинарными операциями $\oplus: R \times R \to R$ (сложение) и $\otimes: R \times R \to R$ (умножение) называется \emph{кольцом}, если выполнены следующие условия.
324324
\begin{enumerate}
325325
\item $(R, \oplus)$~--- это абелева группа, нейтральный элемент которой~--- $\Bbbzero$.
326326
Для любых $a, b, c \in R$:
@@ -331,11 +331,11 @@ \section{Кольцо}
331331
\item для любого $a \in R$ существует $-a \in R$, такой что $a + (-a) = \Bbbzero$.
332332
\end{itemize}
333333
В последнем пункте кроется отличие от полукольца.
334-
\item $(R, \otimes)$~--- это моноид, нейтральный элемент которого~--- $\Bbbzero$.
334+
\item $(R, \otimes)$~--- это моноид, нейтральный элемент которого~--- 1.
335335
Для любых $a, b, c \in R$:
336336
\begin{itemize}
337337
\item $(a \otimes b) \otimes c = a \otimes (b \otimes c)$
338-
\item $\Bbbzero \otimes a = a \otimes \Bbbzero = a$
338+
\item $1 \otimes a = a \otimes 1 = a$
339339
\end{itemize}
340340
\item $\otimes$ дистрибутивно слева и справа относительно $\oplus$:
341341
\begin{itemize}

0 commit comments

Comments
 (0)