Главная страница
Навигация по странице:

  • Один из наиболее важных результатов теории конечных автоматов

  • Вход

  • Учебное пособие для студентов II курса (издание третье, переработанное и дополненное) Москва 2009 удк 519. 682. 1


    Скачать 2.2 Mb.
    НазваниеУчебное пособие для студентов II курса (издание третье, переработанное и дополненное) Москва 2009 удк 519. 682. 1
    Анкорformal.grammars.and.languages.2009.pdf
    Дата18.03.2019
    Размер2.2 Mb.
    Формат файлаpdf
    Имя файлаformal.grammars.and.languages.2009.pdf
    ТипУчебное пособие
    #26014
    страница5 из 15
    1   2   3   4   5   6   7   8   9   ...   15
    Abba


    Cba


    Ba


    C


    S
    Эта последовательность не что иное, как обращение (правого) вывода цепочки abba

    в грам- матике G. Она соответствует построению дерева снизу вверх (см. рис. 5).
    b
    b

    a
    a
    S

    S
    b
    b

    a
    a
    A

    S
    b
    b

    a
    a
    A
    C


    S
    b
    b

    a
    a
    A
    C
    B

    S
    b
    b

    a
    a
    A
    C
    B
    C

    S
    b
    b

    a
    a
    A
    C
    B
    C
    Рис. 5. Построение дерева вывода снизу вверх.
    Разбор по праволинейной грамматике
    По диаграмме состояний (см. рис. 4) построим праволинейную автоматную граммати- ку G
    right
    следующим способом:

    нетерминалами будут состояния из ДС (кроме S );

    каждой дуге из состояния V в заключительное состояние S (помеченной признаком конца

    ) будет соответствовать правило V

    ;

    каждой дуге из состояния V в состояние W, помеченной символом t, будет соответ- ствовать правило VtW;

    начальное состояние H объявляется начальным символом грамматики
    14)
    14)
    Нетрудно описать и обратный алгоритм для праволинейной автоматной грамматики, если все ее правила с односимвольной правой частью имеют вид V

    . Состояниями ДС будут нетерминалы грамматики и еще одно специальное заключительное состояние S, в которое для каждого правила вида V

    проводится дуга

    Элементы теории трансляции
    /
    Разбор по регулярным грамматикам
    28
    G
    right


    {a, b,

    }, {H, A, B, C}, P, H

    P:
    H → aA | bB
    A → bC
    C → bB | aA |

    B → aC
    Заметим, что L(G
    right
    )

    L(G
    left
    ), так как грамматики G
    right
    и G
    left
    соответствуют одной и той же ДС (см. рис. 4).
    Рассмотрим разбор цепочки abba

    по праволинейной грамматике G
    right
    . Последова- тельность переходов в ДС для этой цепочки такова:
    S
    C
    B
    C
    A
    H
    a
    b
    b
    a
    

    

    

    

    


    Каждый переход, за исключением последнего, означает теперь замену в сентенциальной форме нетерминала на пару «терминал-нетерминал» с помощью некоторого правила вывода грамматики G
    right
    . В результате получаем следующий (левый) вывод, который соответствует последовательности переходов в ДС:
    H

    aA

    abC

    abbB

    abbaC

    abba

    Такой вывод отражает построение дерева вывода сверху вниз (см. рис. 6).
    H
    b
    b

    a
    a

    H
    b
    b

    a
    a
    A

    H
    b
    b

    a
    a
    C
    A


    H
    b
    b

    a
    a
    B
    C
    A

    H
    b
    b

    a
    a
    C
    B
    C
    A

    H
    b
    b

    a
    a
    C
    B
    C
    A
    Рис. 6. Построение дерева вывода сверху вниз.
    О
    недетерминированном разборе
    При анализе по леволинейной грамматике может оказаться, что несколько нетермина- лов имеют одинаковые правые части, и поэтому неясно, к какому из них делать свертку (см. ситуацию 4 в описании алгоритма). При анализе по праволинейной грамматике может ока- из V, помеченная признаком конца

    . Для каждого правила вида Vt W проводится дуга из V в W, поме- ченная символом t. Начальнымсостоянием в ДС будет начальный символ H.

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


    {a, b,

    }, {S, A, B}, P, S

    , где
    P:
    S
    → A

    A → a | Bb
    B → b | Bb
    разбор будет недетерминированным (т.к. у нетерминалов A и B есть одинаковые правые ча- сти — Bb).
    Такой грамматике будет соответствовать недетерминированный конечный автомат.
    Определение: недетерминированный конечный автомат (НКА) — это пятерка

    K, T,

    , H, S

    , где
    K — конечное множество состояний;
    T — конечное множество допустимых входных символов;

    — отображение множества K

    T в множество подмножеств K;
    H

    K — конечное множество начальных состояний;
    S

    K — конечное множество заключительных состояний.

    (A, t)

    {B
    1
    , B
    2
    ,..., B
    n
    } означает, что из состояния A по входному символу t можно осуще- ствить переход в любое из состояний B
    i
    , i

    1, 2, ..., n. Также как и ДКА, любой НКА можно представить в виде таблицы (в одной ячейке такой таблицы можно указывать сразу несколь- ко состояний, в которые возможен переход из заданного состояния по текущему символу) или в виде диаграммы состояний (ДС). В ДС каждому состоянию из множества K соответ- ствует вершина; из вершины A в вершину B ведет дуга, помеченная символом t, если
    B


    (A, t). (В НКА из одной вершины могут исходить несколько дуг с одинаковой помет- кой). Успешный путь — это путь из начальной вершины в заключительную; пометка пути
    это последовательность пометок его дуг. Язык, допускаемый НКА, — это множество по- меток всех успешных путей.
    Если начальное состояние автомата (НКА или ДКА) одновременно является и заклю- чительным, то автомат допускает пустую цепочку

    Замечание
    Автомат, построенный по регулярной грамматике без пустых правых частей, не допускает

    Для построения разбора по регулярной грамматике в недетерминированном случае можно предложить алгоритм, который будет перебирать все возможные варианты сверток
    (переходов) один за другим; если цепочка принадлежит языку, то будет найден успешный путь; если каждый из просмотренных вариантов завершится неудачей, то цепочка языку не принадлежит. Однако такой алгоритм практически неприемлем, поскольку при переборе ва- риантов мы, скорее всего, снова окажемся перед проблемой выбора и, следовательно, будем иметь «дерево отложенных вариантов» и экспоненциальный рост сложности разбора.
    Один из наиболее важных результатов теории конечных автоматов состоит в том, что класс языков, определяемых недетерминированными конечными автоматами, совпадает с классом языков, определяемых детерминированными конечными автоматами.

    Элементы теории трансляции
    /
    Разбор по регулярным грамматикам
    30
    Утверждение 10. Пусть L — формальный язык. Следующие утверждения эквива- лентны:
    (1)
    L порождается регулярной грамматикой;
    (2)
    L допускается ДКА;
    (3)
    L допускается НКА.
    Эквивалентность пунктов (1) и (2) следует из рассмотренных выше алгоритмов по- строения конечного автомата по регулярной грамматике и обратно — грамматики по автома- ту. Очевидно, что из (2) следует (3): достаточно записать вместо каждого перехода ДКА

    (C, a)

    b эквивалентный ему переход в НКА

    (C, a)

    {b}, начальное состояние ДКА по- местить в множество начальных состояний НКА, а заключительное состояние ДКА поме- стить в множество заключительных состояний НКА. Приводимый ниже алгоритм построе- ния ДКА, эквивалентного НКА, обосновывает то, что из (3) следует (2).
    Алгоритм построения
    ДКА
    по
    НКА
    Вход: НКА M


    K, T,

    , H, S

    Выход: ДКА M
    1


    K
    1
    , T,

    1
    , H
    1
    , S
    1

    , допускающий тот же язык, что и автомат М :
    L(M)

    L(M
    1
    ).
    Метод:
    1. Элементами K
    1
    , т. е. состояниями в ДКА, будут некоторые подмножества множе- ства состояний НКА. Заметим, что в силу конечности множества K, множество K
    1
    также ко- нечно и имеет не более 2
    s
    элементов, где s — мощность K.
    Подмножество {А
    1
    , A
    2
    , …, A
    n
    } состояний из К будем для краткости записывать как
    A
    1
    A
    2
    ...A
    n
    . Множество K
    1 и переходы, определяющие функцию

    1
    , будем строить, начиная с состояния H
    1
    : H
    1
    
    A
    1
    A
    2
    ...A
    n
    , где А
    1
    , A
    2
    , …, A
    n

    H. Другими словами, все начальные состоя- ния НКА M объединяются в одно состояние H
    1
    для ДКА M
    1
    . Добавляем в множество K
    1 по- строенное начальное состояние H
    1 и пока считаем его нерассмотренным (на втором шаге оно рассматривается и строятся остальные состояния множества K
    1
    , а также переходы

    1
    .)
    2. Пока в K
    1 есть нерассмотренный элемент A
    1
    A
    2
    ...A
    m
    , «рассматриваем» его и выпол- няем для каждого t

    T следующие действия:

    Полагаем

    1
    ( A
    1
    A
    2
    ...A
    m
    , t )

    B
    1
    B
    2
    ...B
    k
    , где для 1

    j

    k в НКА

    (A
    i
    , t)

    B
    j для неко- торых 1

    i

    m. Другими словами, B
    1
    B
    2
    ...B
    k
    — это множество всех состояний в
    НКА, куда можно перейти по символу t из множества состояний A
    1
    A
    2
    ...A
    m
    . В ДКА
    M
    1
    получается детерминированный переход по символу t из состояния A
    1
    A
    2
    ...A
    m
    в состояние B
    1
    B
    2
    ...B
    k
    . (Если k

    0, то полагаем

    1
    ( A
    1
    A
    2
    ...A
    m
    , t )


    ).

    Добавляем в K
    1 новое состояние B
    1
    B
    2
    ...B
    k
    .
    Шаг 2 завершается, поскольку множество новых состояний K
    1
    конечно.
    3. Заключительными состояниями построенного ДКА M
    1
    объявляются все состояния, содержащие в себе хотя бы одно заключительное состояние НКА M: S
    1
    :

    {A
    1
    A
    2
    ...A
    m
    |
    A
    1
    A
    2
    ...A
    m

    K
    1
    , A
    i

    S для некоторых 1

    i

    m}.
    Замечание
    Множество S
    1 построенного ДКА может состоять более, чем из одного элемента. Не для всех ре- гулярных языков существует ДКА с единственным заключительным состоянием (пример: язык всех цепочек в алфавите {a, b}, содержащих не более двух символов b). Однако для реализации

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

    в конец каждой цепочки (на практике в роли маркера конца цепочки

    может выступать признак конца файла, символ конца строки или другие разделители). Вводится новое состояние S, и для каждого состояния Q из множества
    S
    1 добавляется переход по символу

    :

    1
    (Q,

    )

    S. Состояния из S
    1 больше не считаются заклю- чительными, а S объявляется единственным заключительным состоянием. Теперь по такому
    ДКА можно построить автоматную грамматику, допускающую детерминированный разбор.
    Проиллюстрируемработуалгоритманапримерах.
    Пример 1. Задан НКА M


    { H, A, B, S }, {0, 1},

    , {H }, {S }

    , где

    (H, 1)

    {B}

    (A, 1)

    {B, S}

    (B, 0)

    { A }
    L(M)

    { 1(01)
    n
    | n

    1 }.
    Диаграмма для M изображена на рис.7.
    Рис. 7. ДС для автомата M.
    Грамматика, соответствующая M:
    S
    → A1
    A → B0
    B → A1 | 1
    Построим ДКА по НКА, пользуясь предложенным алгоритмом. Начальным состояни- ем будет H.

    1
    (Н, 1)

    B

    1
    (B, 0)

    A

    1
    (A, 1)

    BS

    1
    (BS, 0)

    A
    Заключительным состоянием построенного ДКА является состояние BS.
    Таким образом, M
    1


    {H, B, A, BS }, {0, 1},

    1
    , H, BS

    . Для удобства переименуем со- стояния в M
    1
    : BS обозначается теперь как S
    1
    , а в однобуквенных именах состояний вместо подчеркивания используется индекс 1. Тогда M
    1


    {H
    1
    , B
    1
    , A
    1
    , S
    1
    }, {0, 1}, {

    1
    (Н
    1
    , 1)

    B
    1
    ;

    1
    (B
    1
    , 0)

    A
    1
    ;

    1
    (A
    1
    , 1)

    S
    1
    ;

    1
    (S
    1
    , 0)

    A
    1
    }, H
    1
    , S
    1

    Грамматика, соответствующая M
    1
    :
    S
    1
    A
    1 1
    A
    1
    S
    1 0 | B
    1 0
    B
    1
    1
    Построим диаграмму состояний (рис. 8).
    H
    B
    S
    A
    1 1
    0 1

    Элементы теории трансляции
    /
    Разбор по регулярным грамматикам
    32
    Рис. 8. Диаграмма состояний M
    1
    Пример 2. Дана регулярная грамматика G


    T, N, P, S

    P:
    S
    → Sb | Aa | a
    A → Aa | Sb | b,
    которой соответствует НКА. С помощью преобразования НКА в ДКА построить грамматику, по которой возможен детерминированный разбор.
    Решение
    Построим функцию переходов НКА:

    (H, a)

    {S}

    (H, b)

    {A}

    (A, a)

    {A, S}

    (S, b)

    {A, S}
    Процесс построения функции переходов ДКА удобно изобразить в виде таблицы, начав ее заполнение с начального состояния H, добавляя строки для вновь появляющихся состояний: символ состояние
    a
    b
    H
    S
    A
    S

    AS
    A
    AS

    AS
    AS
    AS
    Переходы ДКА:

    1
    (H, a)

    S

    1
    (H, b)

    A

    1
    (S, b)

    AS

    1
    (A, a)

    AS

    1
    (AS, a)

    AS

    1
    (AS, b)

    AS
    1 0
    1 0
    H
    1
    B
    1
    A
    1
    S
    1
    появились сото- яния S и A , они рассматри- ваются в следу- ющих строках таблицы

    Элементы теории трансляции
    /
    Разбор по регулярным грамматикам
    33
    Переобозначим сотояния: A
    
    A, H

    H, AS

    Y, S

    X. Два заключительных состояния X и Y сведем в одно заключительное состояние S, используя маркер конца цепоч- ки

    . После такой модификации получаем ДКА с единственным заключительным состояни- ем S и функцией переходов:

    1
    (H, a)

    X

    1
    (H, b)

    A

    1
    (X, b)

    Y

    1
    (X,

    )

    S

    1
    (A, a)

    Y

    1
    (Y, a)

    Y

    1
    (Y, b)

    Y

    1
    (Y,

    )

    S
    По ДКА строим грамматику G
    1
    , позволяющую воспользоваться алгоритмом детерми- нированного разбора:
    G
    1
    :
    S
    → X

    | Y

    Y
    → Ya | Yb | Aa | Xb
    X → a
    A → b
    В заключение раздела о регулярных языках приведем пример использования автома- тов в решении теоретических задач.
    1   2   3   4   5   6   7   8   9   ...   15


    написать администратору сайта