Правки и программа в одном файле
This commit is contained in:
112
lab3/report.tex
112
lab3/report.tex
@@ -153,6 +153,104 @@
|
||||
|
||||
Простое прошедшее время в немецком языке называется \textit{Претерит} или \textit{Претеритум} (нем. \textit{Präteritum} или нем. \textit{Imperfekt}). Это время не требует образования сложных конструкций, что позволяет относить его к простым формам.
|
||||
|
||||
\newpage
|
||||
\section{Грамматика немецкого претеритума}
|
||||
|
||||
\subsection{Общая характеристика претеритума}
|
||||
Претеритум (Präteritum, Imperfekt) является одной из двух основных форм прошедшего времени в немецком языке, наряду с перфектом (Perfekt). В отличие от перфекта, претеритум представляет собой простую (синтетическую) форму, образуемую без вспомогательных глаголов, путём изменения основной формы глагола.
|
||||
|
||||
Претеритум используется преимущественно в письменной речи, особенно в художественной литературе, исторических текстах и формальных документах. В разговорной речи он встречается редко, за исключением глаголов \textit{sein} (быть), \textit{haben} (иметь), модальных глаголов, а также в некоторых диалектах северной Германии.
|
||||
|
||||
\subsection{Структура предложений в претеритуме}
|
||||
Структура предложений в претеритуме соответствует общим правилам построения немецких предложений. Основные типы структур:
|
||||
|
||||
\begin{enumerate}
|
||||
\item \textbf{Прямой порядок слов} (главное предложение):
|
||||
\begin{center}
|
||||
\textit{Подлежащее} + \textit{глагол в претеритуме} + \textit{дополнения и обстоятельства}
|
||||
\end{center}
|
||||
Например: \textit{Der Mann las ein Buch.} (Мужчина читал книгу.)
|
||||
|
||||
\item \textbf{Обратный порядок слов} (инверсия):
|
||||
\begin{center}
|
||||
\textit{Обстоятельство} + \textit{глагол в претеритуме} + \textit{подлежащее} + \textit{другие члены предложения}
|
||||
\end{center}
|
||||
Например: \textit{Gestern las der Mann ein Buch.} (Вчера мужчина читал книгу.)
|
||||
|
||||
\item \textbf{Придаточное предложение}:
|
||||
\begin{center}
|
||||
\textit{..., союз} + \textit{подлежащее} + \textit{второстепенные члены} + \textit{глагол в претеритуме}
|
||||
\end{center}
|
||||
Например: \textit{Ich wusste, dass der Mann ein Buch las.} (Я знал, что мужчина читал книгу.)
|
||||
\end{enumerate}
|
||||
|
||||
\subsection{Образование форм претеритума}
|
||||
|
||||
\subsubsection{Слабые (правильные) глаголы}
|
||||
Образуются по формуле: основа глагола + суффикс \textit{-te} + личное окончание:
|
||||
\begin{center}
|
||||
\begin{tabular}{|l|l|}
|
||||
\hline
|
||||
\textbf{Лицо} & \textbf{Окончание (machen - делать)} \\
|
||||
\hline
|
||||
ich & mach\textbf{te} \\
|
||||
du & mach\textbf{test} \\
|
||||
er/sie/es & mach\textbf{te} \\
|
||||
wir & mach\textbf{ten} \\
|
||||
ihr & mach\textbf{tet} \\
|
||||
sie/Sie & mach\textbf{ten} \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\subsubsection{Сильные (неправильные) глаголы}
|
||||
Образуются путём изменения корневой гласной без добавления суффикса \textit{-te}:
|
||||
\begin{center}
|
||||
\begin{tabular}{|l|l|}
|
||||
\hline
|
||||
\textbf{Лицо} & \textbf{Окончание (lesen - читать)} \\
|
||||
\hline
|
||||
ich & \textbf{las} \\
|
||||
du & \textbf{las}st \\
|
||||
er/sie/es & \textbf{las} \\
|
||||
wir & \textbf{las}en \\
|
||||
ihr & \textbf{las}t \\
|
||||
sie/Sie & \textbf{las}en \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\subsubsection{Смешанные глаголы}
|
||||
Сочетают особенности сильных и слабых глаголов: меняют корневую гласную и получают суффикс \textit{-te}.
|
||||
Например: \textit{bringen} (приносить) – \textit{brachte}, \textit{kennen} (знать) – \textit{kannte}.
|
||||
|
||||
\subsection{Отрицание в претеритуме}
|
||||
Отрицание в предложениях с претеритом образуется с помощью отрицательной частицы \textit{nicht}, которая обычно ставится после глагола и перед дополнениями:
|
||||
|
||||
\textit{Der Mann las nicht ein Buch.} (Мужчина не читал книгу.)
|
||||
|
||||
При отрицании всего предложения \textit{nicht} ставится в конце:
|
||||
|
||||
\textit{Der Mann las ein Buch nicht.} (Мужчина не читал книгу [а что-то другое].)
|
||||
|
||||
Размещение \textit{nicht} в конце предложения также часто используется в разговорной речи и может указывать на отрицание всего действия или ситуации в целом:
|
||||
|
||||
\textit{Er kam gestern nicht.} (Он вчера не приходил.)
|
||||
|
||||
\textit{Das Kind spielte draußen nicht.} (Ребенок не играл на улице.)
|
||||
|
||||
\subsection{Особенности использования претеритума}
|
||||
В немецком языке выбор между претеритумом и перфектом часто определяется:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Стилем повествования:} претеритум более характерен для литературного стиля
|
||||
\item \textbf{Типом текста:} в биографиях, исторических текстах, сказках преимущественно используется претеритум
|
||||
\item \textbf{Региональными особенностями:} в Северной Германии претеритум используется чаще
|
||||
\item \textbf{Типом глагола:} для глаголов \textit{sein}, \textit{haben} и модальных глаголов претеритум используется даже в разговорной речи
|
||||
\end{itemize}
|
||||
|
||||
В рамках данной работы мы рассматриваем формализованную грамматику, учитывающую основные структурные особенности предложений в претеритуме, без полного описания всех лексических и морфологических особенностей немецкого языка.
|
||||
|
||||
|
||||
\newpage
|
||||
\section {Математическое описание}
|
||||
@@ -167,10 +265,10 @@
|
||||
\item Рассматриваются три вида обстоятельств: обстоятельства времени, места и образа действия. В реальных предложениях языка могут встречаться и другие виды, но перечисленные являются наиболее часто встречающимися.
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Грамматика в виде списка продукций}
|
||||
\subsection{Пораждающая грамматика Хомского}
|
||||
\label{subsec:grammar}
|
||||
|
||||
Формально можно описать грамматику в виде списка продукций:
|
||||
Формально пораждающую грамматику Хомского можно задать списком продукций:
|
||||
|
||||
\begin{verbatim}
|
||||
Предложение -> Повествовательное "."
|
||||
@@ -415,7 +513,7 @@ class Grammar:
|
||||
|
||||
Метод принимает ссылку на объект класса Grammar и строку text типа str, содержащую текстовое представление грамматики.
|
||||
|
||||
Метод не возвращает значений, но заполняет словарь productions и устанавливает переменную start\_symbol в объекте класса.
|
||||
Метод не возвращает значений явно, но заполняет словарь productions и устанавливает переменную start\_symbol в объекте класса.
|
||||
|
||||
\begin{lstlisting}[caption={Код метода \texttt{\_parse\_productions}.}, label={lst:parse_productions}]
|
||||
def _parse_productions(self, text: str):
|
||||
@@ -450,7 +548,7 @@ def _parse_productions(self, text: str):
|
||||
|
||||
Метод принимает ссылку на объект класса Grammar.
|
||||
|
||||
Метод не возвращает значений, но заполняет словарь first\_sets в объекте класса.
|
||||
Метод не возвращает значений явно, но заполняет словарь first\_sets в объекте класса.
|
||||
|
||||
\begin{lstlisting}[caption={Код метода \texttt{\_calculate\_first\_sets}.}, label={lst:calculate_first_sets}]
|
||||
def _calculate_first_sets(self):
|
||||
@@ -503,7 +601,7 @@ def _calculate_first_sets(self):
|
||||
|
||||
Метод принимает ссылку на объект класса Grammar.
|
||||
|
||||
Метод не возвращает значений, но заполняет словарь follow\_sets в объекте класса.
|
||||
Метод не возвращает значений явно, но заполняет словарь follow\_sets в объекте класса.
|
||||
|
||||
\begin{lstlisting}[caption={Код метода \texttt{\_calculate\_follow\_sets}.}, label={lst:calculate_follow_sets}]
|
||||
def _calculate_follow_sets(self):
|
||||
@@ -602,7 +700,7 @@ def _first_of_sequence(self, sequence):
|
||||
|
||||
Метод принимает ссылку на объект класса Grammar.
|
||||
|
||||
Метод не возвращает значений, но заполняет словарь lookup\_table в объекте класса или вызывает исключение, если грамматика не является LL(1).
|
||||
Метод не возвращает значений явно, но заполняет словарь lookup\_table в объекте класса или вызывает исключение, если грамматика не является LL(1).
|
||||
|
||||
\begin{lstlisting}[caption={Код метода \texttt{\_fill\_lookup\_table}.}, label={lst:fill_lookup_table}]
|
||||
def _fill_lookup_table(self):
|
||||
@@ -976,7 +1074,7 @@ def main():
|
||||
\addcontentsline{toc}{section}{Заключение}
|
||||
В ходе выполнения лабораторной работы была построена контекстно-свободная грамматика для подмножества немецкого языка, описывающая простое прошедшее время Претерит. На основе разработанной грамматики была реализована программа, которая проверяет принадлежность входной строки заданному языку и генерирует случайные корректные предложения. Для анализа предложений использовался алгоритм LL(1)-разбора, основанный на построении множеств FIRST и FOLLOW для всех нетерминалов грамматики и создании таблицы синтаксического анализа.
|
||||
|
||||
Из достоинств выполнения лабораторной работы можно выделить возможность задания грамматики в отдельном текстовом файле, что позволяет легко изменять и расширять её без модификации программного кода. Использование объектно-ориентированного подхода в реализации обеспечило хорошую структуру кода. Вся логика работы с грамматикой реализована в классе Grammar, а обработка пользовательского ввода вынесена в функцию main.
|
||||
Из достоинств выполнения лабораторной работы можно выделить возможность задания грамматики в отдельном текстовом файле, что позволяет легко изменять и расширять её без модификации программного кода. Также программа автоматически проверяет, что введенная грамматика является LL(1)-грамматикой. В противном случае, программа выводит сообщение об ошибке, в указывается на конкретные правила грамматики, между выбором которых возникает неоднозначность.
|
||||
|
||||
К недостаткам текущей реализации можно отнести ограниченность словарного запаса, что сужает разнообразие генерируемых предложений. Также алгоритм генерации не контролирует длину предложений, что может приводить к избыточно длинным или коротким конструкциям. В текущей версии система не учитывает некоторые грамматические особенности немецкого языка, например, склонение прилагательных и согласование артиклей с родом существительных.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user