Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
госы 2013.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
4.38 Mб
Скачать

47. Понятие автоматной грамматики. Построение и формальное описание конечного автомата.

Одним из частных классов КС-грамматик являются автоматные или регулярные грамматики (А-грамматики). Аппарат А-грамматик наиболее широко используется при проектировании лексических анализаторов (сканеров). Объектом анализа блока лексического анализа являются лексемы, в качестве которых для языка программирования обычно выступают идентификаторы переменных, числовые константы, ключевые слова.

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

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

Пример. Грамматика идентификаторов, определяющая лексему "идентификатор" (которой в грамматике соответствует нетерминальный символ <ид>) как последовательность символов, первый из которых – буква, а остальные – буквы или цифры в произвольном порядке:

Gид = ({<ид>}, {буква,цифра}, Pид, <ид>)

Pид: <ид>  буква | <ид> буква | <ид> цифра

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

<буква>  a | b | c | … | z

<цифра>  0 | 1 | 2 | 3 | … | 9

Все правила продукции этих грамматик имеют вид U  Va | a, где U,V  N, a  T. Такие грамматики называются автоматными, или регулярными. для А-грамматик нет проблемы в выявлении места основы в текущей СФ.

Построение и формальное описание конечного автомата

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

Алгоритм построения КА по заданной А-грамматике

Вход: А-грамматика G = (N, T, P, S).

Выход: Граф состояний КА.

Процесс:

1. Если в множестве правил продукции есть хотя бы одно правило вида U  a (где а – терминальный символ), то ввести дополнительный нетерминальный символ (например, Q), все правила указанного вида преобразовать в U  Qa.

2. Изобразить множество вершин графа состояний, обозначив каждую вершину одним нетерминальным символом. Вершина Q соответствует начальному состоянию автомата, а вершина S – заключительному (S – начальный символ грамматики).

3. Для каждого правила продукций U  Va провести дугу от вершины V к вершине U и пометить ее символом a.

В зависимости от правил поведения КА могут быть как детерминированными, так и недетерминированными.

Детерминированный КА (ДКА) может быть представлен в виде формальной системы:

ДКА = (K, T, M, S, Z)

где K - алфавит состояний КА;

T - входной алфавит;

M - отображение декартова произведения множеств K и T (множества KT) на множество K;

S - начальное состояние KA (S  K);

Z - непустое множество конечных состояний (Z  K).

В начале процесса анализа входной цепочки автомат находится в начальном состоянии. Дальнейший процесс функционирования КА определяются отображением М:

M(Q,e) = Q – пустая цепочка не изменяет состояние КА,

M(Q,ax) = M(M(Q,a),x), где a  T, x  T* - символ а анализируемой цепочки ax переводит автомат из состояния Q, в котором он находился, в новое состояние, определяемое значением M(Q,a), после чего анализу подлежит оставшаяся цепочка х.

КА допускает цепочку x, если M(S,x)  Z, т.е. если цепочка x переводит автомат из начального состояния в одно из заключительных состояний. Множество всех допускаемых КА цепочек составляет язык, допускаемый этим КА. Цепочка считается не допущенной, если автомат зафиксировал ошибку, что бывает в двух случаях:

обработан последний символ входной цепочки, а автомат не находится в одном из заключительных состояний;

для текущей пары (Q,a), где Q - состояние, a - входной символ, не определено отображение M(Q,a) (M(Q,a)=).

Недетерминированность автомата возникает в том случае, когда из некоторого состояния под воздействием некоторого входного символа возможны переходы в несколько состояний. Такая ситуация возникает в тех случаях, когда автомат строится для А-грамматики, имеющей одинаковые правые части в нескольких продукциях, например: V  Ua; W  Ua.

Автомат также будет недетерминирован, если он имеет несколько начальных состояний.

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

Теорема 2. Для любой А-грамматики может быть построен либо НКА, либо ДКА, допускающий любые цепочки, порождаемые в исходной грамматике, и не допускающий никаких других цепочек.

Теорема 3. Любой НКА может быть приведен к ДКА, допускающему те и только те цепочки, которые допускаются НКА.

Следствие: Классы языков, порождаемых А-грамматиками и допускаемых КА, эквивалентны.

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