Преимущества формальных грамматик:
Более строго, грамматика \(G=(N, \Sigma, P, S)\):
Рассмотрим грамматику. Бинарный оператор \(+\) над лексическими единицами \(n\)
\(S \overset{*}\Rightarrow n+n+n\):
\(S \phantom{\Rightarrow P \Rightarrow P + n \Rightarrow P +n+n \Rightarrow n+n+n}\)
\(S \Rightarrow P \phantom{\Rightarrow P + n \Rightarrow P +n+n \Rightarrow n+n+n}\)
\(S \Rightarrow P \Rightarrow P + n \phantom{\Rightarrow P +n+n \Rightarrow n+n+n}\)
\(S \Rightarrow P \Rightarrow P + n \Rightarrow P +n+n \phantom{\Rightarrow n+n+n}\)
\(S \Rightarrow P \Rightarrow P + n \Rightarrow P +n+n {\Rightarrow n+n+n}\)
\(S \underset{lm}\Rightarrow P \underset{lm}\Rightarrow P + n \underset{lm}\Rightarrow P +n+n \underset{lm}\Rightarrow n+n+n\)
\(S \underset{lm}\Rightarrow P \underset{lm}\Rightarrow P + n \underset{lm}\Rightarrow P +n+n \underset{lm}\Rightarrow n+n+n\)
Тип-3. Регулярные грамматики.
""
::=
|
\(\begin{align} S \to\,& P \\ P \to\,& P + P \\ P \to\,& n \\ \end{align}\)
<S> ::= <P>
<P> ::= <P> "+" "n" | "n"
|
Подходы к синтаксическому анализу:
Проверка совпадения префиксов тривиальна
Для выбора продукции два подхода:
Систематический алгоритм:
Упорядочить нетерминальные символы в произвольном порядке;
for(∀ нетерминалов A) {
for(∀ нетерминалов B < A) {
for(∀ A -> B α) {
for(∀ B -> β) {
Добавить A -> β α;
}
Удалить A -> B α;
}
}
Устранить прямую левую рекурсию в продукциях для A;
}
Алгоритм удаления пустых продукций:
После устранения пустых продукций, удаление циклов простым устранением “единичных” правил вида \(A \to B\):
Пример:
\[\begin{align} S \to\; & P \\ P \to\; & P + n | n \\ \end{align}\]
\[\begin{align} S \to\; & P \\ P \to\; & n P' \\ P' \to\; & + n P' | \varepsilon \end{align}\]