Классификация формальных грамматик

Хомский предложил классификацию формальных грамматик по типу выражения правил и предложил выделить 4 основных типа, называемые в целом Иерархией Хомского:

|--------------------------------|
|                                           |
|Гр. 0                                    |
|                                           |
|--------------------------|      |
|Гр. 1                           |     |
|                                  |     |
|     |--------------------|     |
|     |Гр. 2                    |     |
|     |                           |     |
|     |  |--------------|    |     |
|     |  |Гр. 3            |   |     |
|     |  |                   |   |     |
|     |  |--------------|    |     |
|     |                           |     |
|     |--------------------|     |
|                                  |     |
|--------------------------|     |
|                                          |
|--------------------------------|


Грамматика типа 0 - генеративная, самая сложная, никаких ограничений на вид ее правил не накладывается. Грамматика типа 0, порождающая (generative grammar), - в классической записи это четверка G=(N,∑, P, S), где N, ∑ - алфавит (N - нетерминальные символы, ∑ - терминальные символы метаязыка); S - начальный символ нетерминального множества, Р - правила репродукции (rewriting rules).

Для распознавания языков, порождаемых этими грамматиками, используются машины Тьюринга - мощные, абстрактные, и следовательно неприменимые на практике математические модели, которые используются в теории информатики.

Грамматика типа 1 - называют контекстно-зависимыми грамматиками, и в них возможность замены цепочки символов может определяться контекстом. Используются для генерации элементов естественных языков и подъязыков.

Грамматика типа 2 - контекстно-свободные, причем в левой части нетерминала могут быть всем, чем угодно. Они распознаются в информатике так называемыми автоматами с магазинной памятью (стековые автоматы). Используются для генерации элементов языков программирования (выражений, команд).

Грамматика типа 3 - называют регулярными, самые простые и ограниченные грамматики, распознаются конечными автоматами. Используется для простых элементов языков (числа, константы, переменные).

Рисунок показывает «вхождение» одного типа грамматики в другой.

Язык называется контекстным языком, если он порождается некоторой контекстной грамматикой. Контекстно-свободные языки также называют алгебраическими языками, ими занимается математическая лингвистика (ныне раздел компьютерной лингвистики. В компьютерной лингвистике выделяют раздел - лингвистические основы информатики, который занимается проблематикой формальных языков и грамматик).

Исходная иерархия Хомского была впоследствии развита многими исследователями формального синтаксиса.


Порождение и распознавание

Рассмотрим многие понятия формальных грамматик на простых примерах. Набор правил синтаксиса любого языка, как искусственного, так и естественного, может описывать либо
1. процедуры получения правильных предложений (т.е. порождение языка),
2. процедуру распознавания правильного предложения, т.е. процедуру распознавания принадлежности предложений этому языку.

В первом случае грамматику называют порождающей, во втором – распознающей, в любом случае принцип построения такой грамматики один и тот же.

Задача вывода

Например, пусть дана формальная грамматика:
Б={(<Пр>, <П>, <с>, <ис>, <М>, <ГФ>), (кот, пес, он, идет, лежит), P, S = <Пр>}
Р={<Пр>→<П> <с>                           Пр - предложение
                 <П>→<ис>                                     П - подлежащее
       <П>→<М>                                    с = сказуемое
                 <ис>→кот                                    ис – имя существительное
                 <ис>→пес                                    М - местоимение
                 <М>→он                                      ГФ – глагольная форма
                 <с>→<ГФ>
       <ГФ>→идет
      <ГФ>→лежит
это можно представить или в БНФ-записи:
<Пр>: : = <П><с>
<П> : : = <ис>/<М>
<ис> : : = кот/пес
<М> : : = он
<с> : : = <ГФ>
<ГФ> : : = идет/лежит
Формальную грамматику можно представить в виде ориентированного графа для наглядности, причем, если в правую часть правил входит несколько символов, то их объединяют знаком +, для изображения правил с одинаковыми левыми частями используют узел, отмеченный знаком «или» (v).


                  <Пр>
                      ↑
                      +
                      
<П>                                        <с> 
   ↑                                              ↑
                                      
  V                                           <ГФ> 
                                
<ис>           <М>                           V
   ↑                  ↑
  кот               пес                      ↑                      ↑
                                              идет               лежит
     
Любое представление формальной грамматики, получающееся на базе правил, называется сентенциальными формами.
Наша грамматика порождает 6 правильных предложений или сентенциальных форм:
Кот идет
Кот лежит
Пес идет
Пес лежит
Он идет
Он лежит

Причем, фразу «Кот лежит» можно вывести двумя способами:
1. <Пр>  <П> <с> <ис><с> кот<с> кот<ГФ> кот лежит
2. <Пр>  <П> <с> <П><ГФ> <П>лежит <ис>лежит кот лежит

По определению каждой сентенциальной форме должен соответствовать один вывод, однако на практике это редко бывает, разные выводы приводят к разным деревьям вывода, особенно для сложных фраз и конструкций языков (их также вызывают неоднозначности), и вывод любой фразы можно представить так называемым синтаксическим деревом (дерево вывода или разбора).

Дерево вывода.

Выводам контекстно-свободной грамматики соответствуют деревья разбора (derivation tree, parse tree) – это некоторые упорядоченные деревья, вершины которых помечены символами алфавита или нетерминального, или терминального множества, корень дерева – начальный символ. Каждому символу, на который заменяется начальный символ на первом шаге вывода, ставится в соответствие вершина дерева, и к ней приводится дуга из корня. Полученные таким образом потомки корня упорядочены.


Например:                            
                                      <Пр> 
                              <П>                  <с>
                                 |                        |
                              <ис>                <ГФ>
                                 |                        | 
                               кот                  лежит

 Если хотя бы одна сентенциальная форма имеет более одного синтаксического дерева, то грамматику называют неоднозначной.


Задача разбора

 Это задача, обратная задаче вывода. Преобразование строки языка обратное порождению, в терминологии формальной грамматики называют приведением (сведение или редукция строки).

Например: В грамматике строка «кот лежит» прямо приводима к строке <ис>лежит……  и т.п. и в конце концов она приводима к  <Пр>.

Основная задача разбора – это вывод, но прослеженный в обратном порядке, на базе готовой формальной грамматики.
Таким образом, основная задача синтаксического анализа (Parsing) состоит в отыскании разбора или вывода для заданного предложения входного языка. Если разбор или вывод существует, то предложение синтаксически правильное и является сентенциальной формой, его разбор выдает специфическую структуру – синтаксическое дерево, и в прикладной лингвистике используют два основных вид дерева: дерево непосредственно составляющих и дерево зависимостей.

По существу, термины «синтаксический анализ», «задача разбора» и «задача распознавания входной строки» это синонимы, а алгоритмы, решающие такие задачи, называются анализатором или распознавателем.