Связь грамматик и автоматов

      Комментарии к записи Связь грамматик и автоматов отключены

Существует полное соответствие между регулярными выражениями (а поэтому и грамматиками типа 3) и конечными автоматами, которые определяются следующим образом: Конечный автомат – это устройство для распознавания строк какого- либо языка. У него есть конечное множество состояний, отдельные из которых называются последними. По мере считывания каждой литеры строки контроль передается от состояния к состоянию в соответствии с заданным множеством переходов. Если после считывания последней литеры строки автомат будет находиться в одном из последних состояний, о строке говорят, что она принадлежит языку, принимаемому автоматом. В ином случае строка не принадлежит языку, принимаемому автоматом.

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

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

Если какой-либо язык программирования нельзя генерировать с помощью КС-грамматики, всегда можно найти такую КС-грамматику, которая генерирует надмножество языка, т.е. язык, включающий в себя заданный язык программирования.

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

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

Из определения КС-грамматики ясно, что класс КС-грамматик более мощный (т.е. может генерировать больше языков), чем класс регулярных грамматик, но менее мощный, чем класс контекстно-зависимых (КЗ- грамматик). Язык

{ an bn | n ? 0 }

является контекстно-свободным, но не регулярным. Он генерируется

грамматикой с порождающими правилами

SaSb | ?

С другой стороны, язык

{ an bn cn | n ? 0 }

является контекстно-зависимым, а не контекстно-свободным. Контекстно-свободные грамматики имеют ряд характеристик, для которых справедливы следующие положения.

1) Каноническая форма

а) Каждая КС-грамматика эквивалентна (т.е. генерирует тот же язык) грамматике в нормальной форме Хомского, т.е. со всеми порождающими правилами вида

ABC | a

при обычных условиях, касающихся терминалов и нетерминалов.

б) Каждая КС-грамматика эквивалентна грамматике в нормальной форме Грейбаха, т.е. со всеми порождающими правилами вида

Ab?

где ? – строка нетерминалов (возможно, пустая).

2) Самовложение

Если в грамматике G есть нетерминал A, для которого

A ? ?1 A ?2

(здесь ?1 и ?2 являются непустыми строками терминалов и/или нетерминалов), то о такой грамматике говорят, что она содержит самовложение. Например, две приведенные ниже грамматики содержат самовложение:

1) G1 = ({S}, {a, b}, P, S), где элементы P:

SaSb

S?

2) G2 = ({S, A}, {begin, end,[,]}, P, S), где элементы P:

Sbegin A end

S?

A[S]

В последнем случае об A и S говорят, что они проявляют свойство самовложения. Теоретически любая КС-грамматика, не содержащая самовложения, эквивалентна регулярной грамматике и генерирует регулярный язык. С другой стороны, регулярная грамматика не может содержать самовложения. Именно самовложение позволяет эффективно различать КС (нерегулярные) и регулярные языки. Как видно из второго примера, согласование скобок и т.п. требует самовложения, поэтому его нельзя специфицировать посредством регулярной грамматики. С точки зрения разбора важно, что КС язык в состоянии распознавать автомат магазинного типа, эквивалентный конечному автомату, к которому добавлена память магазинного типа (стек).

Статьи к прочтению:

Mod-03 Lec-05 Syntax Analysis: Context-free Grammars, Pushdown Automata and Parsing Part — 1


Похожие статьи: