Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
68
Добавлен:
16.04.2013
Размер:
977 Кб
Скачать

7.4. Распознающие автоматы

Распознающим называется автомат Мура с множеством выделенных состояний, называемых конечными. Говорят, что автомат распознает входное слово, если, начав свою работу в одном из начальных состояний, он заканчивает ее в одном из конечных.

Пример: Автомат, распознающий слова содержащие попарное вхождение букв а

и b, вроде aabbbbaa. f1, f2 - конечные состояния

2 a

a

b f1

a,b a a

4 1

b

a b

b f2

3

b

.

Распознающий автомат – это, как правило, недетерминированный частичный автомат. То есть по одному и тому же сигналу можно перейти в различные состояния, а в некоторых состояниях нет перехода для ряда входных сигналов.

B

a,b b

A b F

a a

C

0

0

0

1

A

B

C

F

a

B,C

F

b

B

С,F

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

Представление этого автомата с помощью автоматной грамматики:

A  aB | bB | aC

B  bC | b

C  a

Это праворекурсивная автоматная грамматика.

7.5. Понятие транслятора

Транслятор - программа или устройство, переводящее входную строку а языка А во выходную строку b языка B с сохранением смысла.

Это нестрогое определение, поскольку «сохранение смысла» можно понимать весьма различно.

аА bB

Т

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

а = a0 а1 а2 а3 аn = b

T1 T2 T3 . . . Tn

По типу трансляции трансляторы подразделяются на компиляторы и интерпретаторы.

Компиляторы осуществляет перевод всего текста до начала выполнения (вычисления).

Интерпретатор транслирует исходный текст порциями. Он позволяет получать первые результаты уже на самых первых шагах обработки.

Интерпретатор обычно проще компилятора с аналогичного языка раз 10 – 100, но

примерно во столько же раз дольше идет обработка и требуются большие машинные ресурсы на этапе выполнения.

Компилятор и интерпретатор дополняют друг друга и каждый хорош на своем месте.

Самыми широко известными примерами интерпретаторов, кроме интерпретаторов Бейсика, служат операционные системы. Особенно это наглядно и многообразно представлено в ОС UNIX.

По уровню транслируемого языка интерпретаторы подразделяются на собственно интерпретаторы и ассемблеры.

Ассемблеры – это машинно-зависимые языки (низкого уровня). Исходный текст ассемблера, а более строго – макроассемблера - состоит из команд и макрокоманд. Макрокомандам соответствуют настраиваемые заготовки на языке ассемблера - макроописания, которые после необходимых настроек вставляются в текст программы.

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

Ассемблеры позволяют использовать преимущества и особенности конкретной архитектуры. С другой стороны ассемблеры привязаны к архитектуре.