|
1 | 1 | \chapter{Сжатое представление леса разбора}
|
2 | 2 |
|
3 | 3 | Матричный алгоритм даёт нам ответ на вопрос о достижимости, но не предоставляет самих путей.
|
4 |
| -Что делать, если мы хотим построить все пути, удовлетворяющие ограичениям? |
| 4 | +Что делать, если мы хотим построить все пути, удовлетворяющие ограничениям? |
5 | 5 |
|
6 | 6 | Проблема в том, что искомое множество путей может быть бесконечным.
|
7 | 7 | Можем ли мы предложить конечную структуру, однозначно описывающую такое множество?
|
8 | 8 | Вспомним, что пересечение контекстно-свободного языка с регулярным --- это контекстно-свободный язык.
|
9 |
| -Мы знаем, что конекстно-свободный язык можно описать коньекстно-своюодной граммтикой, которая конечна. |
| 9 | +Мы знаем, что контекстно-свободный язык можно описать контекстно-свободной грамматикой, которая конечна. |
10 | 10 | Это и есть решение нашего вопроса.
|
11 |
| -Осталось толко научиться строить такую грамматику. |
| 11 | +Осталось только научиться строить такую грамматику. |
12 | 12 |
|
13 | 13 | Прежде, чем двинуться дальше, рекомендуется вспомнить всё, что касается деревьев вывода~\ref{sect:DerivTree}.
|
14 | 14 |
|
15 | 15 | \section{Лес разбора как представление контекстно-свободной грамматики}
|
16 | 16 |
|
17 | 17 | Для начала нам потребуется внести некоторые изменения в конструкцию дерева вывода.
|
18 | 18 |
|
19 |
| -Во-первых, заметим, что в дереве вывода каждый узел соответсвует выводу какой-то подстроки с известными позициями начала и конца. |
| 19 | +Во-первых, заметим, что в дереве вывода каждый узел соответствует выводу какой-то подстроки с известными позициями начала и конца. |
20 | 20 | Давайте будем сохранять эту информацию в узлах дерева.
|
21 | 21 | Таким образом, метка любого узла это тройка вида $(i,q,j)$, где $i$ --- координата начала подстроки, соответствующей этому узлу, $j$ --- координата конца, $q \in \Sigma \cup N$ --- метка как в исходном определении.
|
22 | 22 |
|
23 |
| -Во-вторых, заметим, что внутренний узел со своими сыновьями связаны с продукцией в граммтике: узел появляется благодаря применению конкретной продукции в процессе вывода. |
24 |
| -Давайте занумеруем все продукции в граммтике и добавим в дерево вывода ещё один тип узлов (дополнительные узлы), в которых будем хранить номер применённой продукции. |
| 23 | +Во-вторых, заметим, что внутренний узел со своими сыновьями связаны с продукцией в грамматике: узел появляется благодаря применению конкретной продукции в процессе вывода. |
| 24 | +Давайте занумеруем все продукции в грамматике и добавим в дерево вывода ещё один тип узлов (дополнительные узлы), в которых будем хранить номер применённой продукции. |
25 | 25 | Получим следующую конструкцию: непосредственный предок дополнительного узла --- это левая часть продукции, а непосредственные сыновья дополнительного узла --- это правая часть продукции.
|
26 | 26 |
|
27 | 27 | \begin{example}
|
@@ -150,15 +150,15 @@ \section{Лес разбора как представление контекс
|
150 | 150 | & \} \rangle
|
151 | 151 | \end{align*}
|
152 | 152 |
|
153 |
| -Пердположим, что мы строим левосторонний вывод. |
154 |
| -Тогда после первого применеия продукции 0 у нас есть два варианта переписывания первого нетерминала: либо с применением продукции 0, либо с применением продукции 1: |
| 153 | +Предположим, что мы строим левосторонний вывод. |
| 154 | +Тогда после первого применения продукции 0 у нас есть два варианта переписывания первого нетерминала: либо с применением продукции 0, либо с применением продукции 1: |
155 | 155 | \begin{align*}
|
156 | 156 | &\textbf{S} \xrightarrow{0} \textbf{S}S \xrightarrow{0} \textbf{S}SS \xrightarrow{1} a\textbf{S}bSS \xrightarrow{2} ab\textbf{S}S \xrightarrow{1} aba\textbf{S}bS \xrightarrow{2} abab\textbf{S} \xrightarrow{1} ababa\textbf{S}b \xrightarrow{2} ababab
|
157 | 157 | \\
|
158 | 158 | &\textbf{S} \xrightarrow{0} \textbf{S}S \xrightarrow{1} a\textbf{S}bS \xrightarrow{2} ab\textbf{S} \xrightarrow{0} ab\textbf{S}S \xrightarrow{1} aba\textbf{S}bS \xrightarrow{2} abab\textbf{S} \xrightarrow{1} ababa\textbf{S}b \xrightarrow{2} ababab
|
159 | 159 | \end{align*}
|
160 | 160 |
|
161 |
| -Сначал рассмотрим первый вариант (применили переписываение по подукции 0). |
| 161 | +Сначала рассмотрим первый вариант (применили переписывание по продукции 0). |
162 | 162 | Все остальные шаги вывода деретерминированы и в результате мы получим следующее дерево разбора:
|
163 | 163 |
|
164 | 164 | \begin{center}
|
@@ -349,7 +349,7 @@ \section{Лес разбора как представление контекс
|
349 | 349 |
|
350 | 350 | В двух построенных деревьях большое количество одинаковых узлов.
|
351 | 351 | Построим структуру, которая содержит оба дерева и при этом никакие нетерминальные и терминальные узлы не встречаются дважды.
|
352 |
| -В результате мы молучим следующий граф: |
| 352 | +В результате мы получим следующий граф: |
353 | 353 |
|
354 | 354 | \begin{center}
|
355 | 355 | \resizebox{0.9\textwidth}{!}{
|
@@ -448,8 +448,8 @@ \section{Лес разбора как представление контекс
|
448 | 448 |
|
449 | 449 | Мы получили очень простой вариант сжатого представления леса разбора (Shared Packed Parse Forest, SPPF).
|
450 | 450 | Впервые подобная идея была предложена Джоаном Рекерсом в его кандидатской диссертации~\cite{SPPF}.
|
451 |
| -В дальнейшем она нашла широкое применеие в обобщённом (generalized) синтаксическом анализе и получила серьёзное развитие. |
452 |
| -В частности, наш вариант, хоть и позволяет избежать экспоненциального разростания леса разбора, всё же не является оптимальным. |
| 451 | +В дальнейшем она нашла широкое применение в обобщённом (generalized) синтаксическом анализе и получила серьёзное развитие. |
| 452 | +В частности, наш вариант, хоть и позволяет избежать экспоненциального разрастания леса разбора, всё же не является оптимальным. |
453 | 453 | Оптимальное асимптотическое поведение достигается при использовании бинаризованного SPPF~\cite{Billot:1989:SSF:981623.981641} --- в этом случае объём леса составляет $O(n^3)$, где $n$ --- это длина входной строки.
|
454 | 454 |
|
455 | 455 | Различные модификации SPPF применяются в таких алгоритмах синтаксического анализа, как RNGLR~\cite{Scott:2006:RNG:1146809.1146810}, бинаризованная верся SPPF в BRNGLR~\cite{Scott:2007:BCT:1289813.1289815} и GLL~\cite{Scott:2010:GP:1860132.1860320,10.1007/978-3-662-46663-6_5}\footnote{Ещё немного полезной информации про SPPF: \url{http://www.bramvandersanden.com/post/2014/06/shared-packed-parse-forest/}.}.
|
@@ -559,9 +559,8 @@ \section{Лес разбора как представление контекс
|
559 | 559 | }
|
560 | 560 | \end{center}
|
561 | 561 |
|
562 |
| - |
563 | 562 | Мы построили дерево вывода для одного пути из вершины 2 в неё же.
|
564 |
| - Но можно заметить, что таких путей бесконечно моного: мы можем бесконечное число раз повтроять уже выполненный обход и получать всё более длинные пути. |
| 563 | + Но можно заметить, что таких путей бесконечно много: мы можем бесконечное число раз повторять уже выполненный обход и получать всё более длинные пути. |
565 | 564 | В терминах дерева вывода это будет означать, что к узлу $_1S_3$ мы добавим сына, соответствующего применению продукции 0, а не 1 для нетерминала $S$.
|
566 | 565 | В таком случае мы получим узел $_2S_2$, который уже существует в дереве и таким образом замкнём цикл.
|
567 | 566 |
|
@@ -656,7 +655,7 @@ \section{Лес разбора как представление контекс
|
656 | 655 | \end{example}
|
657 | 656 |
|
658 | 657 | \begin{note}
|
659 |
| - SPPF построенный для данной контекстно-свободной грамматки $G$ и графа $\mathcal{G}$ |
| 658 | + SPPF построенный для данной контекстно-свободной грамматики $G$ и графа $\mathcal{G}$ |
660 | 659 | \begin{enumerate}
|
661 | 660 | \item содержит терминальный узел вида $(i,t_k,j)$ тогда и только тогда, когда в графе $\mathcal{G}$ есть ребро $(i,t_k,j)$;
|
662 | 661 | \item содержит нетерминальный узел вида $(i,S_k,j)$ тогда и только тогда, когда в графе $\mathcal{G}$ есть путь из вершины $i$ в вершину $j$, выводимый из нетерминала $S_k$ в грамматике $G$.
|
|
0 commit comments