Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
avtomaty.doc
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
1.59 Mб
Скачать

5.4. Классы языков и грамматик

Грамматики и соответственно им и языки делятся на классы в зависимости от ограничений, которые определяются для правил. Среди множества классов выделим классы, рассмотренные Ноамом Хомским. Запишем правило в виде p:  .

Если для правил никаких ограничений нет, кроме одного – в слове  должен быть хотя бы один нетерминальный символ, то такие грамматики (так же как и языки) отнесём к классу 0 и назовём грамматиками (языками) с фразовой структурой.

Если слова имеют вид:  = 1 2 3, =11 3, т.е. замена 2 на 1 произойдет только в том случае, если перед ним стоит 1, а после 3, т.е. зависит от контекста. Цепочки 1 и 3 образуют контексты (1 –левый контекст, 3 – правый контекст). В частности, 2 может быть нетерминальным символом, а 1 – произвольным словом. Такие грамматики называются неукорачивающими. В них каждое следующее слово в цепочке не меньше предыдущего. Такие грамматики называются контекстными или грамматиками класса 1.

Если в правилах  – нетерминальный символ, а  – произвольное слово, то грамматика называется контекстно-свободной (КС-грамматикой) или грамматикой класса 2.

КС-грамматики широко используются при описании конструкций языков программирования. Синтаксис большинства известных языков программирования основан именно на КС-грамматиках.

И, наконец, грамматики, в правилах которых всегда  – нетерминальный символ, а  — или терминальный символ или пара символов, первый из которых нетерминальный, а второй — терминальный, называют леволинейными. Если в правилах  — или терминальный символ или пара символов, первый из которых терминальный, а второй — нетерминальный, то грамматики называются праволинейными. Показано, что оба эти класса грамматик эквивалентны, т.е. образуют один и тот же класс языков. Такие грамматики называют регулярными или автоматными или грамматиками класса 3.

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

5.5. Язык, понимаемый устройством

Рассмотрим программу, которую вы составили и ввели в ЭВМ. В каком случае можно считать, что ЭВМ понимает введённую программу?

Во-первых, тогда, когда программа проработала до конца и выдала какой-то результат. Этот результат может не совпадать с тем, который вы хотели получить, но это только означает, что вы написали программу, которая решает другую задачу.

Во-вторых, если ЭВМ нашла в программе грамматические ошибки и сообщила о них.

В каждом из этих случаев ЭВМ в заключение вышла в одно из штатных состояний. Если рассматривать программу (или другой текст, который вводится в ЭВМ) как слово в некотором алфавите, то можно считать, что это слово является словом языка, который понимает ЭВМ, если в результате обработки этого слова ЭВМ выходит в одно из состояний, определённое как заключительное.

Можно рассматривать как некоторый частный случай язык программирования, например, ПАСКАЛЬ. Тогда заключительным можно определить состояние, соответствующее правильному решению задачи, а описание ЭВМ с программным обеспечением, предназначенным для решения задач на ПАСКАЛе, можно считать одним из способов задания этого формального языка.

Аналогично можно определить язык, понимаемый некоторым конечным автоматом S с начальным состоянием a0. Входной алфавит автомата определен как V, множество состояний как A и задано A*A, которое назовем множеством допустимых заключительных состояний. Слово в алфавите V будем считать словом языка, если оно переводит автомат из состояния a0 в одно из состояний из множества A*. В этом случае автомат можно считать строгим описанием формального языка. Так как выходы автомата нас не интересуют, рассматривают автоматы без выходов, т.е. автомат описывается как S=( V, A, a0, A*, ), где –функция переходов. Такой язык принято называть автоматным.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]