Правки: добавил про модификацию грамматики
This commit is contained in:
@@ -157,7 +157,40 @@
|
||||
\item Назначить семантические действия части заданных продукций (например, генерация машинноориентированного кода).
|
||||
\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}
|
||||
\begin{verbatim}
|
||||
S -> B A b
|
||||
@@ -166,9 +199,8 @@
|
||||
C -> c A
|
||||
\end{verbatim}
|
||||
|
||||
Данная модификация устраняет неоднозначность и позволяет построить корректную таблицу синтаксического анализа для LL(1)-анализатора. Язык, порождаемый модифицированной грамматикой, остается достаточно выразительным для демонстрации принципов работы LL(1)-анализатора.
|
||||
|
||||
\newpage
|
||||
\section {Математическое описание}
|
||||
\subsection{Иерархия грамматик Хомского}
|
||||
Иерархия Хомского — классификация формальных языков и формальных грамматик, согласно которой они делятся на 4 типа по их условной сложности. На Рис.~\ref{fig:homsky} представлены все четыре типа грамматик (по типу продукций, из которых они состоят) и отношения между ними.
|
||||
|
||||
@@ -185,7 +217,7 @@
|
||||
|
||||
Контекстно-свободные грамматики являются частным случаем формальных грамматик, в которых левые части всех продукций содержат только один нетерминальный символ. Это означает, что все продукции имеют вид $A \rightarrow \beta$, где $A$ — нетерминальный символ, а $\beta$ — произвольная цепочка терминалов и нетерминалов.
|
||||
|
||||
Грамматика этого варианта лабораторной работы задаётся в виде следующего списка продукций:
|
||||
Модифицированная грамматика этого варианта лабораторной работы задаётся в виде следующего списка продукций:
|
||||
\begin{verbatim}
|
||||
S -> B A b
|
||||
A -> a A B C | b B
|
||||
|
||||
Reference in New Issue
Block a user