Skip to content

Commit d50d957

Browse files
committed
Немного причёсан раздел про first и follow.
1 parent 1b029db commit d50d957

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

tex/part_02_Foundations/chapter_07_ClassicalParsing/03_FirstAndFollow.tex

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ \section{Построение множеств $\first$ и $\follow$}
2020
в нисходящем анализе они определяют, какую продукцию применять (раздел~\ref{sec:TopDown}),
2121
в восходящем~--- помогают разрешать конфликты (раздел~\ref{sec:BottomUp}).
2222

23-
\fixit{Определение множеств first k и follow k}{Связать абзацы}
23+
Дадим формальные определения для произвольного $k$, а затем специализируем их для наиболее распространённого на практике случая $k = 1$.
2424

2525
Формально эти множества определяются следующим образом.
2626

@@ -46,7 +46,8 @@ \section{Построение множеств $\first$ и $\follow$}
4646

4747
Иными словами, $\follow[k](\beta)$~--- это множество всех терминальных цепочек длины не более $k$, которые могут следовать непосредственно за $\beta$ в некоторой сентенциальной форме, выводимой из аксиомы.
4848

49-
\fixit{Частный случай k = 1 и алгоритмы вычисления}{Связать абзацы}
49+
Приведённые выше определения носят общий характер.
50+
Однако на практике подавляющее большинство алгоритмов синтаксического анализа ограничивается одним символом предпросмотра, поэтому далее мы специализируем их для $k = 1$ и подробно рассмотрим построение множеств именно в этом случае.
5051

5152
На практике наиболее распространён случай $k = 1$.
5253
Для него определения упрощаются:
@@ -63,7 +64,7 @@ \section{Построение множеств $\first$ и $\follow$}
6364

6465
Иными словами, $\follow(\beta)$~--- множество терминалов, которые могут следовать непосредственно за $\beta$ в некоторой сентенциальной форме, выводимой из аксиомы.
6566

66-
\fixit{Алгоритм вычисления first}{Связать абзацы}
67+
Теперь перейдём непосредственно к алгоритмам вычисления этих множеств и начнём с $\first$.
6768

6869
Множество $\first$ для произвольной сентенциальной формы можно вычислить, пользуясь следующими соотношениями.
6970
\begin{itemize}
@@ -75,7 +76,7 @@ \section{Построение множеств $\first$ и $\follow$}
7576

7677
Поскольку определения взаимно рекурсивны (в правую часть могут входить нетерминалы, для которых $\first$ ещё не вычислен), на практике эти соотношения применяются итеративно до достижения неподвижной точки.
7778

78-
\fixit{Алгоритм вычисления follow}{Связать абзацы}
79+
Зная $\first$ для всех нетерминалов, можно вычислить и $\follow$.
7980

8081
Алгоритм для вычисления множества $\follow$ для нетерминалов грамматики состоит из следующих шагов.
8182
\begin{enumerate}
@@ -95,7 +96,7 @@ \section{Построение множеств $\first$ и $\follow$}
9596
\item Шаги 3 и 4 повторяются, пока в строящиеся множества добавляются новые элементы.
9697
\end{enumerate}
9798

98-
\fixit{Пример вычисления}{Связать абзацы}
99+
Проиллюстрируем работу обоих алгоритмов на примере.
99100

100101
\begin{example}
101102
\label{ex:first_follow}

0 commit comments

Comments
 (0)