Skip to content

Commit 3ae1898

Browse files
committed
Typos
1 parent ae6f5dd commit 3ae1898

File tree

3 files changed

+115
-107
lines changed

3 files changed

+115
-107
lines changed

tex/Context-Free_Languages.tex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ \chapter{Контекстно-свободные грамматики и язы
7777
\textit{Левосторонний вывод}. На каждом шаге вывода заменяется самый левый нетерминал.
7878
\end{definition}
7979

80+
\begin{definition}
81+
\textit{Правосторонний вывод}. На каждом шаге вывода заменяется самый правый нетерминал.
82+
\end{definition}
83+
84+
8085
\begin{example}
8186
Пример левостороннего вывода цепочки в грамматике
8287

tex/GLL-based_CFPQ.tex

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ \section{Рекурсивный спуск}
88

99
Идея рекурсивного спуска основана на использовании программного стека вызовов в качестве стека магазинного автомата. Достигается это следующим образом.
1010
\begin{itemize}
11-
\item Для каждого нетерминала создаётся функция, принимающая ещё не обработанный остаток строки и возвращающая пару: результат вывода префикса данной строки из соответствующего нетерминала и не обработанный остаток строки. В случае распзнователя результат вывода --- логическое значение (выводится/не выводится).
11+
\item Для каждого нетерминала создаётся функция, принимающая ещё не обработанный остаток строки и возвращающая пару: результат вывода префикса данной строки из соответствующего нетерминала и не обработанный остаток строки. В случае распознавателя результат вывода --- логическое значение (выводится/не выводится).
1212
\item Каждая такая функция реализовывает обработку цепочки согласно правым частям правил для соответствующих нетерминалов: считывание символа входа при обработке терминального символа, вызов соответствующей функции при обработке нетерминального.
1313
\end{itemize}
1414

15-
У твкого подхода есть два ограничения:
15+
У такого подхода есть два ограничения:
1616
\begin{enumerate}
1717
\item Не работает с леворекурсивными грамматиками, грамматиками, в которых вывод может принимать следующий вид:
1818
$$
@@ -23,7 +23,7 @@ \section{Рекурсивный спуск}
2323

2424
\begin{example}
2525

26-
Постороим функцию рекурсивного спуска для продукции $S \rightarrow aSbS \mid \varepsilon$.
26+
Построим функцию рекурсивного спуска для продукции $S \rightarrow aSbS \mid \varepsilon$.
2727

2828
\begin{algorithm}
2929
\floatname{algorithm}{Listing}
@@ -106,14 +106,14 @@ \section{LL(k)-алгоритм синтаксического анализа}
106106
Определим их формально:
107107

108108
\begin{definition}
109-
Пусть $G = \langle N, \Sigma, P, S \rangle$~--- КС-грамматика. Множество $\first[k]$ определено для сентециальной формы $\alpha$ следующим образом:
109+
Пусть $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
\]
112112
, где $\alpha, \beta \in (N \cup \Sigma)^*.$
113113
\end{definition}
114114

115115
\begin{definition}
116-
Пусть $G = \langle N, \Sigma, P, S \rangle$~--- КС-грамматика. Множество $\follow[k]$ определено для сентециальной формы $\beta$ следующим образом:
116+
Пусть $G = \langle N, \Sigma, P, S \rangle$~--- КС-грамматика. Множество $\follow[k]$ определено для сентенциальной формы $\beta$ следующим образом:
117117
\[\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

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

204204
Интерпретатор автомата принимает входную строку и построенную управляющую таблицу и работает следующим образом.
205205
В каждый момент времени конфигурация автомата это позиция во входной строке и стек.
206-
В начальный момент времени стэк пуст, а позиция во входной строке соответствует её началу.
207-
На певом шаге в стек добавляются последовательно сперва симаол концы строки, затем стартовый нетерминал.
206+
В начальный момент времени стек пуст, а позиция во входной строке соответствует её началу.
207+
На первом шаге в стек добавляются последовательно сперва символ концы строки, затем стартовый нетерминал.
208208
На каждом шаге анализируется существующая конфигурация и совершается одно из действий.
209209
\begin{itemize}
210210
\item Если текущая позиция --- конец строки и вершина стека --- символ конца строки, то успешно завершаем разбор.
211-
\item Если текушая вершина стека --- терминал, то проверяем, что позиция в строке соответствует этому терминалу. Если да, то снимаем элемент со стека, сдвигаем позицию на единицу и продолжаем разбор. Иначе завершаем разбор с ошибкой.
212-
\item Если текущая врешина стека --- нетерминал $N_i$ и текущий входной символ $t_j$, то ищем в управляющей таблице ячейку с координатами $(N_i, t_j)$ и записываем на стек содержимое этой ячейки.
211+
\item Если текущая вершина стека --- терминал, то проверяем, что позиция в строке соответствует этому терминалу. Если да, то снимаем элемент со стека, сдвигаем позицию на единицу и продолжаем разбор. Иначе завершаем разбор с ошибкой.
212+
\item Если текущая вершина стека --- нетерминал $N_i$ и текущий входной символ $t_j$, то ищем в управляющей таблице ячейку с координатами $(N_i, t_j)$ и записываем на стек содержимое этой ячейки.
213213
\end{itemize}
214214

215215
\begin{example}Пример работы LL анализатора.
@@ -399,7 +399,7 @@ \section{LL(k)-алгоритм синтаксического анализа}
399399
Данное семейство всё так же не работает с леворекурсивными грамматиками и с неоднозначными грамматиками.
400400

401401
Таким образом, по некоторым граммтикам можно построить LL(k) анализатор (назовём их LL(k) граммтиками), но не по всем.
402-
С левой рекурсией, конечно, можно бороться, так как существуют алгоритмы устранения левой и скрытой левой рекурсии, а вот с неодносзначностями ничего не поделаешь.
402+
С левой рекурсией, конечно, можно бороться, так как существуют алгоритмы устранения левой и скрытой левой рекурсии, а вот с неоднозначностями ничего не поделаешь.
403403

404404

405405

@@ -596,9 +596,9 @@ \section{Алгоритм Generalized LL}
596596
Основанный на нисходящем анализе алгоритма поиска путей с контекстно-свободными ограничениями имеет следующие особенности.
597597
\begin{enumerate}
598598
\item Необходимо явно задавать начальную вершину, поэтому хорошо подходит для задач поиска путей с одним источником (single-source) или с небольшим количеством источников. Для поиска путей между всеми парами вершин необходимо явным образом все указать стартовыми.
599-
\item Является направленным сверху вниз --- обходит граф последовательно начиная с указанной стартовой вершины и строит вывод, начиная со стартового нетерминала. Как следствие, в отличие от алгоритмов на основе линейной алгебры и Хеллингса, обойдёт только подграф, необходимый для построения ответа. В среднем это меньше, чем весь граф, который обрабанывается другими алгоритмами.
599+
\item Является направленным сверху вниз --- обходит граф последовательно начиная с указанной стартовой вершины и строит вывод, начиная со стартового нетерминала. Как следствие, в отличие от алгоритмов на основе линейной алгебры и Хеллингса, обойдёт только подграф, необходимый для построения ответа. В среднем это меньше, чем весь граф, который обрабатывается другими алгоритмами.
600600
\item Естественным образом строит множество путей в виде сжатого леса разбора.
601-
\item Использует существенно более тяжеловесные стуктуры данных и плохо распараллеливается (на практике). Как следствие, при решении задачи досижимости для всех пар путей проигрывает алгоритмам на основе линейной алгебры.
601+
\item Использует существенно более тяжеловесные стуктуры данных и плохо распараллеливается (на практике). Как следствие, при решении задачи достижимости для всех пар путей проигрывает алгоритмам на основе линейной алгебры.
602602
\end{enumerate}
603603

604604
Частным случаем применения задачи КС достижимости является синтаксический анализ с неоднозначной токенизацией, то есть ситуацией, когда несколько пересекающихся подстрок во входной строке символов могут задавать разные лексические единицы и не возможно сделать однозначный выбор на этапе лексического анализа.
@@ -609,7 +609,7 @@ \section{Алгоритм Generalized LL}
609609
\item \verb|ID(x) OP_EQ ID(a) OP_DECRIMENT OP_MINUS ID(b)|
610610
\end{enumerate}
611611

612-
В таком случае на вход синтаксическому анализатору можно подать DAG, содержащий все возможные варианты токенизации. Для нашего примера он может выглядить следующим образом:
612+
В таком случае на вход синтаксическому анализатору можно подать DAG, содержащий все возможные варианты токенизации. Для нашего примера он может выглядеть следующим образом:
613613

614614
\begin{center}
615615
\begin{tikzpicture}[node distance=4cm,shorten >=1pt,on grid,auto]
@@ -633,7 +633,7 @@ \section{Алгоритм Generalized LL}
633633
\end{tikzpicture}
634634
\end{center}
635635

636-
Далее будем проверять наличие пути из старовой (нулевой) вершины в конечную (соответствующую концу строки). Если таких путей оказалось несколько, то нужны дополнительные средства для выбора нужного дерева разбора. Даннаяя идея рассматривается в работе~\cite{10.1145/3357766.3359532}.
636+
Далее будем проверять наличие пути из старовой (нулевой) вершины в конечную (соответствующую концу строки). Если таких путей оказалось несколько, то нужны дополнительные средства для выбора нужного дерева разбора. Данная идея рассматривается в работе~\cite{10.1145/3357766.3359532}.
637637

638638
Напоследок сделаем небольшое замечание об эффективной реализации: в качестве рабочего множества $ R $ можно использовать несколько различных структур данных и, как правило, выбирают очередь. Однако иногда (в особенности для графов) лучше использовать стек дескрипторов, так как в этом случае выше локальность данных --- мы кладём пачку дескрипторов, соответствующих исходящим рёбрам. И если граф представлен списком смежности, то исходящие будут храниться рядом и их лучше обработать сразу.
639639

0 commit comments

Comments
 (0)