|
11 | 11 | Таким образом, теория формальных языков выступает в качестве основы для многих прикладных областей, а алгоритмы синтаксического анализа применимы не только для обработки естественных языков или языков программирования.
|
12 | 12 | Нас же в данной работе будет интересовать применение теории формальных языков и алгоритмов синтаксического анализа для анализа графовых баз данных и для статического анализа кода.
|
13 | 13 |
|
14 |
| -Одна из классических задач, связанных с анализом графов --- это поиск путей в графе. |
| 14 | +Одна из классических задач, связанных с анализом графов~--- это поиск путей в графе. |
15 | 15 | Возможны различные формулировки этой задачи.
|
16 | 16 | В некоторых случаях необходимо выяснить, существует ли путь с определёнными свойствами между двумя выбранными вершинами.
|
17 | 17 | В других же ситуациях необходимо найти все пути в графе, удовлетворяющие некоторым свойствам или ограничениям.
|
18 | 18 | Например, в качестве ограничений можно указать, что искомый путь должен быть простым, кратчайшим, гамильтоновым и так далее.
|
19 | 19 |
|
20 | 20 | Один из способов задавать ограничения на пути в графе основан на использовании формальных языков.
|
21 |
| -Базовое определение языка говорит нам, что язык --- это множество слов над некоторым алфавитом. |
| 21 | +Базовое определение языка говорит нам, что язык~--- это множество слов над некоторым алфавитом. |
22 | 22 | Если рассмотреть граф, рёбра которого помечены символами из алфавита, то путь в таком графе будет задавать слово: достаточно соединить последовательно символы, лежащие на рёбрах пути.
|
23 | 23 | Множество же таких путей будет задавать множество слов или язык.
|
24 | 24 | Таким образом, если мы хотим найти некоторое множество путей в графе, то в качестве ограничения можно описать язык, который должно задавать это множество.
|
|
37 | 37 | Основной акцент будет сделан на контекстно-свободных языках, однако будут затронуты и другие классы: регулярные, многокомпонентные контекстно-свободные (Multiple Context-Free Languages, MCFL~\sidecite{SEKI1991191}) и конъюнктивные языки.
|
38 | 38 | Будет показано, что теория формальных языков и алгоритмы синтаксического анализа применимы не только для анализа языков программирования или естественных языков, а также для анализа графовых баз данных и статического анализа кода, что приводит к возникновению новых задач и переосмыслению старых.
|
39 | 39 |
|
40 |
| - |
41 | 40 | Структура данной работы такова.
|
42 |
| -В начале (в части~\ref{chpt:GraphTheoryIntro}) мы рассмотрим основные понятия из теории графов, необходимые в данной работе. Данные разделы являются подготовительными и не обязательны к прочтению, если такие понятия как \textit{ориентированный граф} и \textit{матрица смежности} уже известны читателю. Более того, они лишь вводят определения, подразумевая, что более детальное изучение соответствующих разделов науки остается за рамками этой работы и скорее всего уже проделано читателем. |
| 41 | +В начале (в части~\ref{chpt:GraphTheoryIntro}) мы рассмотрим основные понятия из теории графов, необходимые в данной работе. Данные разделы являются подготовительными и не обязательны к прочтению, если такие понятия как \textit{ориентированный граф} и \textit{матрица смежности} уже известны читателю. |
| 42 | +Более того, они лишь вводят определения, подразумевая, что более детальное изучение соответствующих разделов науки остается за рамками этой работы и скорее всего уже проделано читателем. |
43 | 43 | Затем, в главе~\ref{chpt:FormalLanguageTheoryIntro} мы введём основные понятия из теории формальных языков.
|
44 | 44 | Далее, в главе~\ref{chpt:FLPQ} рассмотрим различные варианты постановки задачи поиска путей с ограничениями в терминах формальных языков, обсудим базовые свойства задач, её разрешимость в различных постановках и т.д..
|
45 | 45 | И в итоге зафиксируем постановку, которую будем изучать далее.
|
46 | 46 | После этого, в главах~\ref{chpt:CFPQ_CYK}--\ref{chpt:GLR} мы будем подробно рассматривать различные алгоритмы решения этой задачи, попутно вводя специфичные для рассматриваемого алгоритма структуры данных.
|
47 | 47 | Большинство алгоритмов будут основаны на классических алгоритмах синтаксического анализа, таких как CYK или LR.
|
48 | 48 | %Все главы, начиная с~\ref{chpt:GraphTheoryIntro}, снабжены списком вопросов и задач для самостоятельного решения и закрепления материала.
|
49 | 49 |
|
50 |
| -\begin{center} |
51 |
| - \begin{tikzpicture}[shorten >=1pt,on grid,auto] |
52 |
| - \node (q_linal) [text width=4cm] {Некоторые понятия линейной алгебры}; |
53 |
| - \node (q_graphtheory) [below of=q_linal, text width=4cm] {Некоторые сведения из теории графов}; |
54 |
| - \node (q_fortmallang) [right of=q_graphtheory, text width=4cm] {Общие сведения теории формальных языков}; |
55 |
| - \node (q_reglang) [below of=q_fortmallang, text width=4cm] {Регулярные языки}; |
56 |
| - \node (q_cflang) [right of=q_reglang, text width=4cm] {Контекстно-свободные языки и грамматики}; |
57 |
| - \node (q_mcfl) [right of=q_cflang, text width=4cm] {Многокомпонентные контекстно-свободные языки}; |
58 |
| - \node (q_flpq) [below of=q_graphtheory, text width=4cm] {Пути с ограничениями в терминах формальных языков}; |
| 50 | +\begin{figure*} |
| 51 | + \begin{center} |
| 52 | + \begin{tikzpicture}[shorten >= 1pt, |
| 53 | + auto, |
| 54 | + node distance=0.5cm, |
| 55 | + every node/.style = {shape=rectangle, draw, rounded corners}, |
| 56 | + align = center] |
| 57 | + \node (q_linal) {Некоторые понятия \\ линейной алгебры}; |
| 58 | + |
| 59 | + \node (q_graphtheory) [below = of q_linal, ] {Некоторые сведения \\ из теории графов}; |
| 60 | + \node (q_fortmallang) [right = 2 of q_graphtheory] {Общие сведения теории \\ формальных языков}; |
| 61 | + |
| 62 | + \node (q_flpq) [below = of q_graphtheory] {Пути с ограничениями \\ в терминах формальных \\ языков}; |
| 63 | + \node (q_reglang) [right = of q_flpq] {Регулярные \\ языки}; |
| 64 | + \node (q_cflang) [right = of q_reglang] {Контекстно-свободные \\ языки и грамматики}; |
| 65 | + \node (q_mcfl) [right = of q_cflang] {Многокомпонентные \\ контекстно-свободные \\ языки}; |
| 66 | + |
| 67 | + \node (q_rpq) [below = 2 of q_flpq] {Поиск путей \\ с регулярными \\ ограничениями}; |
| 68 | + \node (q_cfpq) [below = 2 of q_reglang] {Пути с ограничениями \\ в терминах \\ контекстно-свободных \\ языков}; |
| 69 | + \node (q_mcfpq) [right = of q_cfpq] {Пути с ограничениями \\ в терминах \\ многокомпонентных \\ контекстно-свободных \\ языков}; |
59 | 70 |
|
60 |
| - \node (q_rpq) [below of=q_reglang, text width=4cm] {Поиск путей с регулярными ограничениями}; |
61 |
| - \node (q_cfpq) [below of=q_cflang, text width=4cm] {Пути с ограничениями в терминах контекстно-свободных языков}; |
62 |
| - \node (q_mcfpq) [below of=q_mcfl, text width=4cm] {Пути с ограничениями в терминах многокомпонентных контекстно-свободных языков}; |
63 |
| - \path[->] |
64 |
| - (q_linal) edge node {} (q_graphtheory) |
65 |
| - (q_graphtheory) edge node {} (q_flpq) |
66 |
| - (q_fortmallang) edge node {} (q_flpq) |
67 |
| - (q_fortmallang) edge node {} (q_reglang) |
68 |
| - (q_fortmallang) edge node {} (q_cflang) |
69 |
| - (q_fortmallang) edge node {} (q_mcfl) |
70 |
| - (q_reglang) edge node {} (q_rpq) |
71 |
| - (q_cflang) edge node {} (q_cfpq) |
72 |
| - (q_mcfl) edge node {} (q_mcfpq) |
73 |
| - (q_flpq) edge node {} (q_rpq) |
74 |
| - (q_flpq) edge node {} (q_cfpq) |
75 |
| - (q_flpq) edge node {} (q_mcfpq) |
76 |
| - ; |
77 |
| - \end{tikzpicture} |
78 |
| -\end{center} |
| 71 | + \path[->] |
| 72 | + (q_linal) edge (q_graphtheory) |
| 73 | + (q_graphtheory) edge (q_flpq) |
| 74 | + (q_fortmallang) edge (q_flpq) |
| 75 | + (q_fortmallang) edge (q_reglang) |
| 76 | + (q_fortmallang) edge (q_cflang) |
| 77 | + (q_fortmallang) edge (q_mcfl) |
| 78 | + (q_reglang) edge (q_rpq) |
| 79 | + (q_cflang) edge (q_cfpq) |
| 80 | + (q_mcfl) edge (q_mcfpq) |
| 81 | + (q_flpq) edge (q_rpq) |
| 82 | + (q_flpq) edge (q_cfpq) |
| 83 | + (q_flpq) edge (q_mcfpq); |
| 84 | + \end{tikzpicture} |
| 85 | + \end{center} |
| 86 | +\end{figure*} |
0 commit comments