From 09da4c5c6215c6fb5b3000ae24c6b56fd55559f3 Mon Sep 17 00:00:00 2001 From: Arity-T Date: Sun, 25 May 2025 15:31:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8:=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BF=D1=80=D0=BE=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0=D1=82=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab5/report.tex | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/lab5/report.tex b/lab5/report.tex index 857e9ab..b81e803 100644 --- a/lab5/report.tex +++ b/lab5/report.tex @@ -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