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

  • контекст- но-свободным грамматикам.

  • Утверждение 8.

  • Преобразования грамматик

  • Учебное пособие для студентов 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
    страница3 из 15
    1   2   3   4   5   6   7   8   9   ...   15
    Задача.
    Доказать, что грамматика G с правилами вывода:
    (1, 2)
    S
    aSBC | abC
    (3)
    CB → BC
    (4)
    bB → bb
    (5)
    bC → bc
    (6)
    cC → cc
    порождает язык L(G)

    { a
    n
    b
    n
    c
    n
    | n

    1}.
    (В скобках слева приведена нумерация для удобства ссылок на правила).
    Решение
    I ) Приведем схемы порождения цепочек вида a
    n
    b
    n
    c
    n
    , n

    1 c указанием номера пра- вила на каждом шаге вывода.
    Для n

    1: S
    (2)
    abC
    (5)
    abc.
    Для n

    1: S
    (1)
    aSBC
    (1)
    aaSBCBC → … →
    (1)
    a
    n
    − 1
    S(BC)
    n
    − 1

    (2)
    a
    n
    bC(BC )
    n
    − 1

    (3)
    … →
    (3)
    a
    n
    bB
    n
    − 1
    C
    n

    (4)
    a
    n
    bbB
    n
    − 2
    C
    n

    … →
    (4)
    a
    n
    b
    n
    C
    n

    (5)
    a
    n
    b
    n
    cC
    n
    − 1

    (6)
    a
    n
    b
    n
    ccC
    n
    − 2
    → … →
    (6)
    a
    n
    b
    n
    c
    n

    Элементы теории формальных языков и грамматик
    /
    Разбор цепочек
    15
    II) Из правил следует:
    1.
    Новые символы а, [b | B] и C появляются только при применении правил (1), (2) в равных количествах, т. е. в любой сентенциальной форме всегда
    равное количество а, [b | B] и [с | С].
    2.
    Символ В заменяется только на b, а С — только на с.
    3.
    Появившись, терминальные символы уже не меняют своей позиции, т. е. в любой сентенциальной форме символ а всегда левее любых [b | B] и [c | C].
    4.
    Первый символ b появляется только после применения правила (2).
    5.
    Символ В заменяется на b, только если слева от В стоит b, т. е. второй символ b появляется только непосредственно справа от первого b, третий
    b — непосредственно справа от второго b и т. д. Правило (5) применяется только после того, как исчерпана возможность применять (3), иначе вывод не будет завершен из-за наличия подцепочки
    cB в сентенциальной форме.
    Из пунктов 3, 4 и 5 следует, что любой символ b расположен всегда левее любого [c |
    C]. Следовательно, в любой выводимой цепочке равное количество а, b и с; а всегда стоит левее, чем b и с, b всегда стоит левее, чем с, т. е. любая цепочка имеет вид a
    n
    b
    n
    c
    n
    ,
    что и тре- бовалось доказать.
    Разбор цепочек
    Цепочка в алфавите T принадлежит языку, порождаемому грамматикой

    T, N, P, S

    , только в том случае, если существует ее вывод из начального символа S этой грамматики.
    Процесс построения такого вывода (а, следовательно, и определения принадлежности цепоч- ки языку) называется разбором
    8)
    .Построение вывода можно осуществлять и в обратном по- рядке: в исходной цепочке ищем вхождение правой части некоторого правила и заменяем его на левую часть (это называется сверткой), в результате исходная цепочка «сворачивается» к некоторой сентенциальной форме, затем идет следующая свертка и т. д., пока не придем к цели грамматики — S . Процесс разбора называют также анализом.
    С практической точки зрения наибольший интерес представляет разбор по контекст-
    но-свободным грамматикам. Их порождающей мощности достаточно для описания боль- шей части синтаксической структуры языков программирования, для различных подклассов
    КС-грамматик имеются хорошо разработанные практически приемлемые способы решения задачи разбора.
    Рассмотрим основные понятия и определения, связанные с разбором по КС- грамматике.
    Определение: вывод цепочки


    T
    *
    из
    S

    N в
    КС-грамматике
    G


    T, N, P, S

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

    Элементы теории формальных языков и грамматик
    /
    Разбор цепочек
    16
    Определение: вывод цепочки


    T
    *
    из
    S

    N в
    КС-грамматике
    G


    T, N, P, S

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

    b

    a в грамматике:
    G
    expr


    {a, b,

    }, {S, T}, {ST | T

    S ; Ta | b}, S

    можно построить выводы:
    (1) S T

    S T

    T

    S T

    T

    T a

    T

    T a

    b

    Ta

    b

    a
    (2) ST

    Sa

    S a

    T

    Sa

    b

    Sa

    b

    Ta

    b

    a
    (3) ST

    S T

    T

    ST

    T

    T T

    T

    aT

    b

    aa

    b

    a
    Здесь (2) — левосторонний вывод, (3) — правосторонний, а (1) не является ни лево- сторонним, ни правосторонним, но все эти выводы являются эквивалентными в указанном выше смысле.
    Для КС-грамматик можно ввести удобное графическое представление вывода, назы- ваемое деревом вывода, причем для всех эквивалентных выводов деревья вывода совпадают.
    Определение: ориентированное упорядоченное
    9)
    дерево называется деревом вывода
    (или деревом разбора) в КС-грамматике G


    T, N, P, S

    , если выполнены следующие усло- вия:
    (1)
    каждая вершина дерева помечена символом из множества N

    T

    {

    }, при этом корень дерева помечен символом S; листья — символами из T

    {

    };
    (2)
    если вершина дерева помечена символом A, а ее непосредственные потомки — символами a
    1
    , a
    2
    , ..., a
    n
    , где каждое a
    i

    T

    N, то Aa
    1
    a
    2
    ...a
    n
    — правило вывода в этой грамматике;
    (3)
    если вершина дерева помечена символом A, а ее непосредственный потомок по- мечен символом

    , то этот потомок единственный и A

    — правило вывода в этой грамматике.
    На рисунке 2 изображен пример дерева для цепочки a

    b

    a в грамматике G
    expr
    Определение: КС-грамматика G называется неоднозначной, если существует хотя бы одна цепочка


    L(G), для которой может быть построено два или более различных деревь- ев вывода.
    В противном случае грамматика называется однозначной.
    9)
    Упорядоченность означает, что порядок расположения потомков вершины существен. Например, деревья
    A
    a
    b
    и
    A
    b
    a
    считаются различными.

    Элементы теории формальных языков и грамматик
    /
    Разбор цепочек
    17
    Наличие двух или более деревьев вывода эквивалентно тому, что цепочка

    имеет два или более разных левосторонних (или правосторонних) выводов.
    S
    T
    S
    +
    a
    T
    S
    +
    b
    a
    T
    Рис. 2. Пример дерева вывода в грамматике G
    expr
    Определение: язык, порождаемый грамматикой, называется неоднозначным, если он не может быть порожден никакой однозначной грамматикой.
    Пример неоднозначной грамматики:
    G
    if-then


    {if, then, else, a, b}, {S}, P, S

    , где P

    {Sif b then S else S | if b then S | a}.
    В этой грамматике для цепочки if b then if b then a else a можно построить два раз- личных дерева вывода, изображенных на рисунке 3 (а, б).
    Однако это не означает, что язык L(G
    if-then
    ) обязательно неоднозначный. Обнаружен- ная в G
    if-then
    неоднозначность — это свойство грамматики, а не языка. Для некоторых неод- нозначных грамматик существуют эквивалентные им однозначные грамматики.
    Если грамматика используется для определения языка программирования, то она должна быть однозначной.
    В приведенном выше примере разные деревья вывода предполагают соответствие else разным then. Если договориться, что else должно соответствовать ближайшему к нему then, и подправить грамматику G
    if-then
    , то неоднозначность будет устранена:
    S
    if b then S | if b then S' else S | a
    S' → if b then S' else S' | a
    S
    if
    b
    then
    if
    b
    then
    a
    else
    a
    S
    S
    S
    S
    if
    b
    then
    if
    b
    then
    a
    else
    a
    S
    S
    S
    а) б)
    Рис. 3. Деревья вывода для «if b then if b then a else a» в грамматике G
    if-then

    Элементы теории формальных языков и грамматик
    /
    Разбор цепочек
    18
    Утверждение 8. Проблема, порождает ли данная КС-грамматика однозначный язык
    (т.е. существует ли эквивалентная ей однозначная грамматика), является алгоритмически не- разрешимой.
    Более того, справедливо следующее.
    Утверждение 9. Проблема, является ли данная КС-грамматика однозначной, алго- ритмически неразрешима.
    Поиск ответа на вопрос, неоднозначна или однозначна заданная грамматика — это искусство поиска цепочки с двумя различными деревьями вывода, или доказательство того, что таких цепочек не существует. Универсального способа решения этой задачи, к сожале- нию, нет.
    Однако можно указать некоторые виды правил вывода, которые приводят к неодно- значности (при условии, что эти правила не являются тупиковыми
    10)
    , т. е. действительно ис- пользуются на каком-нибудь шаге вывода терминальной цепочки из начального символа): в приводимых схемах

    ,

    ,


    (T

    N )
    *
    (1)
    AAA |

    (2)
    AA

    A |

    (3)
    A

    A | A

    |

    (здесь хотя бы одна из цепочек

    или

    не пуста)
    (4)
    A

    A |

    A

    A |

    Отметим, что это всего лишь некоторые шаблоны. Все ситуации, приводящие к неод- нозначности, перечислить невозможно в силу утверждения 9.
    Пример неоднозначного КС-языка:
    L

    {a
    i
    b
    j
    c
    k
    | i, j, k

    0, i

    j или j

    k}.
    Интуитивно неоднозначность L объясняется тем, что цепочки с i

    j должны порож- даться группой правил вывода, отличных от правил, порождающих цепочки с j

    k. Но тогда, по крайней мере, некоторые из цепочек с i

    j

    k будут порождаться обеими группами пра- вил и, следовательно, будут иметь по два разных дерева вывода. Доказательство того, что
    КС-язык L неоднозначный, приведено в [3, т.1, стр. 235–236].
    Одна из грамматик, порождающих L, такова:
    S
    AB | DC
    A → aA |

    B → bBc |

    C → cC |

    D → aDb |

    Она неоднозначна; однозначных грамматик для L не существует.
    Дерево вывода можно строить нисходящим либо восходящим способом.
    При нисходящем разборе дерево вывода формируется от корня к листьям; на каждом шаге для вершины, помеченной нетерминальным символом, пытаются найти такое правило
    10)
    Как избавиться от правил, не участвующих в построении выводов, показано в разделе «Преобразования грамматик».

    Элементы теории формальных языков и грамматик
    /
    Преобразования грамматик
    19 вывода, чтобы имеющиеся в нем терминальные символы проецировались на символы исход- ной (анализируемой) цепочки.
    Метод восходящего разбора основан на обратном построении вывода с помощью сверток от исходной цепочки к цели грамматики S. При этом дерево растет снизу вверх — от листьев (символов анализируемой цепочки) к корню S. Если грамматика однозначная, то при любом способе построения будет получено одно и то же дерево разбора.
    Преобразования грамматик
    В некоторых случаях КС-грамматика может содержать бесполезные символы, кото- рые не участвуют в порождении цепочек языка и поэтому могут быть удалены из граммати- ки.
    Определение: символ x

    T

    N называется недостижимым в грамматике
    G


    T, N, P, S

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


    T, N, P, S

    ,
    Выход: КС-грамматика G'


    T', N', P', S

    , не содержащая недостижимых символов, для которой L(G)

    L(G').
    Метод:
    1. V
    0
    :

    {S }; i :

    1.
    2. V
    i
    :

    V
    i
    1

    {x | x

    T

    N, A →

    x


    P, A

    V
    i
    1
    ,

    ,


    ( T

    N )

    } .
    Если V
    i

    V
    i
    1
    , то i :

    i

    1 и переходим к шагу 2, иначе N' :

    V
    i

    N ; T' :

    V
    i

    T ;
    P' состоит из правил множества P, содержащих только символы из V
    i
    ;
    G' :


    T', N', P', S

    Определение: символ
    A

    N называется
    бесплодным в грамматике
    G


    T, N, P, S

    , если множество {


    T
    *
    | A


    } пусто.
    Алгоритм удаления бесплодных символов
    Вход: КС-грамматика G


    T, N, P, S

    Выход: КС-грамматика G'


    T, N', P', S

    , не содержащая бесплодных символов, для которой L(G)

    L(G' ).
    Метод:
    Строим множества N
    0
    , N
    1
    , ...
    1. N
    0
    

    , i
    
    1.
    2. N
    i
    
    N
    i
    1

    {A | A


    P и


    (N
    i
    − 1

    T)
    *
    }.
    Если N
    i

    N
    i
    1
    , то i :

    i

    1 и переходим к шагу 2, иначе N' :

    N
    i
    ; P' состоит из правил множества P, содержащих только символы из N'

    T ; G'
    

    T, N', P', S

    Определение: КС-грамматика G называется приведенной, если в ней нет недости- жимых и бесплодных символов.

    Элементы теории формальных языков и грамматик
    /
    Преобразования грамматик
    20
    Алгоритм приведения грамматики
    1. Обнаруживаются и удаляются все бесплодные нетерминалы.
    2. Обнаруживаются и удаляются все недостижимые символы.
    Удаление символов сопровождается удалением правил вывода, содержащих эти сим- волы.
    11)
    1   2   3   4   5   6   7   8   9   ...   15


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