|
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