18
Иерархия языков по Хомскому включающая, т.е. все грамматики
типа 3 являются грамматиками типа 2, все грамматики типа 1
являются грамматиками типа О и т.д. Иерархия грамматик
соответствует иерархии языков. Например, если язык можно
генерировать с помощью грамматики типа 2, то его называют языком
типа 2. Эта иерархия опять включающая. Включения так же
справедливы
в том, что существуют языки, которые относятся к типу
i, но не к типу (i+1)(0<=i=>2).
Иерархия Хомского важна с точки зрения языков
программирования. Чем меньше ограничений в грамматике, тем
сложнее ограничения, которые можно наложить на генерируемый
язык. Таким образом, оказывается, что чем более универсален язык
используемой грамматики, тем больше средств
типичных языков
программирования можно описать.
Однако чем универсальнее грамматика тем сложнее должна быть
машина (или программа), которая применяется для распознавания
строк соответствующего языка.
С грамматикой типа 3 ассоциируется класс распознавателей,
известный как конечный автомат, или машина с конечным числом
состояний, между которыми происходит передача управления по
мере считывания символов строки, причем строка
принимается или
нет в зависимости от того, какого состояния машина достигает в
итоге. Для языка, генерируемого с помощью КС -грамматики,
необходим (вообще) автомат магазинного типа, т.е. конечный
автомат плюс стек, а для контекстно-зависимых языков - линейный
автомат с ограничениями, т.е. машина Тьюринга с конечным
объемом ленты. Наконец, языку
типа 0 требуется машина Тьюринга
в качестве распознавателя.
Синтаксические деревья помогают понять синтаксис
предложения.
Рассмотрим пример:
Грамматика в G1[<число>] содержит правила
< число> ::= < чс >
<чс> ::= <чс> <цифра> / <цифра>
<цифра> ::= 0 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9
Приведем пример вывода числа 22:
<число>
⇒ <чс> ⇒ <чс> <цифра> ⇒ <цифра><цифра> ⇒
2<цифра>
⇒ 22