Правки: добавил про модификацию грамматики

This commit is contained in:
2025-05-25 15:31:50 +03:00
parent cc5fbb2163
commit 09da4c5c62

View File

@@ -157,7 +157,40 @@
\item Назначить семантические действия части заданных продукций (например, генерация машинноориентированного кода). \item Назначить семантические действия части заданных продукций (например, генерация машинноориентированного кода).
\end{itemize} \end{itemize}
\textit{Грамматика в варианте 15 состоит из следующих продукций}: \textit{Исходная грамматика в варианте 15 состояла из следующих продукций}:
\vspace{-0.3cm}
\begin{verbatim}
S -> B A b
A -> a A B C | b B | a
B -> b
C -> c A
\end{verbatim}
Однако, как будет показано в разделе математического описания, данная грамматика не является LL(1)-грамматикой из-за неоднозначности в выборе продукций для нетерминала $A$. Поэтому в работе используется модифицированная версия грамматики с удаленной продукцией $A \rightarrow a$.
\newpage
\section {Математическое описание}
\subsection{Анализ исходной грамматики и её модификация}
Исходная грамматика варианта 15 содержала следующие продукции:
\vspace{-0.3cm}
\begin{verbatim}
S -> B A b
A -> a A B C | b B | a
B -> b
C -> c A
\end{verbatim}
При попытке построения LL(1)-анализатора для данной грамматики обнаруживается неоднозначность в таблице синтаксического анализа. Конкретно, при рассмотрении нетерминала $A$ и входного терминала $a$ возникает конфликт между двумя продукциями:
\begin{itemize}
\item $A \rightarrow a$
\item $A \rightarrow a A B C$
\end{itemize}
Обе продукции начинаются с терминала $a$, что означает, что $a \in \texttt{FIRST}(a)$ и $a \in \texttt{FIRST}(a A B C)$. Следовательно, анализатор не может однозначно определить, какую продукцию применить при встрече символа $a$ на входе и нетерминала $A$ на вершине стека.
Для получения корректной LL(1)-грамматики была выполнена модификация: удалена продукция $A \rightarrow a$. Таким образом, итоговая грамматика, используемая в данной работе, имеет вид:
\vspace{-0.3cm} \vspace{-0.3cm}
\begin{verbatim} \begin{verbatim}
S -> B A b S -> B A b
@@ -166,9 +199,8 @@
C -> c A C -> c A
\end{verbatim} \end{verbatim}
Данная модификация устраняет неоднозначность и позволяет построить корректную таблицу синтаксического анализа для LL(1)-анализатора. Язык, порождаемый модифицированной грамматикой, остается достаточно выразительным для демонстрации принципов работы LL(1)-анализатора.
\newpage
\section {Математическое описание}
\subsection{Иерархия грамматик Хомского} \subsection{Иерархия грамматик Хомского}
Иерархия Хомского — классификация формальных языков и формальных грамматик, согласно которой они делятся на 4 типа по их условной сложности. На Рис.~\ref{fig:homsky} представлены все четыре типа грамматик (по типу продукций, из которых они состоят) и отношения между ними. Иерархия Хомского — классификация формальных языков и формальных грамматик, согласно которой они делятся на 4 типа по их условной сложности. На Рис.~\ref{fig:homsky} представлены все четыре типа грамматик (по типу продукций, из которых они состоят) и отношения между ними.
@@ -185,7 +217,7 @@
Контекстно-свободные грамматики являются частным случаем формальных грамматик, в которых левые части всех продукций содержат только один нетерминальный символ. Это означает, что все продукции имеют вид $A \rightarrow \beta$, где $A$ — нетерминальный символ, а $\beta$ — произвольная цепочка терминалов и нетерминалов. Контекстно-свободные грамматики являются частным случаем формальных грамматик, в которых левые части всех продукций содержат только один нетерминальный символ. Это означает, что все продукции имеют вид $A \rightarrow \beta$, где $A$ — нетерминальный символ, а $\beta$ — произвольная цепочка терминалов и нетерминалов.
Грамматика этого варианта лабораторной работы задаётся в виде следующего списка продукций: Модифицированная грамматика этого варианта лабораторной работы задаётся в виде следующего списка продукций:
\begin{verbatim} \begin{verbatim}
S -> B A b S -> B A b
A -> a A B C | b B A -> a A B C | b B