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

  • И. А. Волкова, А. А. Вылиток, Т. В. Руденко Формальные грамматики и языки. Элементы теории трансляции

  • ISBN 978-5-89407-395-8 ISBN 978-5-317-03085-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
    страница1 из 15
      1   2   3   4   5   6   7   8   9   ...   15

    Московский государственный университет им. М. В. Ломоносова
    Факультет вычислительной математики и кибернетики
    И.А. Волкова, А.А. Вылиток, Т.В. Руденко
    Формальные грамматики и языки.
    Элементы теории трансляции
    Учебное пособие для студентов II курса
    (издание третье, переработанное и дополненное)
    Москва
    2009

    УДК 519.682.1
    
    ББК 22.19я73
    В67
    Печатается по решению Редакционно-издательского совета факультета
    вычислительной математики и кибернетики
    МГУ им. М. В. Ломоносова
    Рецензенты: проф., д.ф.-м.н. Машечкин И. В. доцент, к.ф.-м.н. Терехин А.Н
    И. А. Волкова, А. А. Вылиток, Т. В. Руденко
    Формальные грамматики и языки. Элементы теории трансляции: Учебное посо- бие для студентов II курса ( издание третье, переработанное и дополненное). — М.:
    Издательский отдел факультета ВМиК МГУ им. М.В.Ломоносова (лицензия ИД № 05899 от 24.09.2001), 2009 — 115 с.
    ISBN 978-5-89407-395-8
    ISBN 978-5-317-03085-8
    Приводятся основные определения, понятия и алгоритмы теории формальных грам- матик и языков, некоторые методы трансляции, а также наборы задач по рассматрива- емым темам. Излагаемые методы трансляции проиллюстрированы на примере модель- ного языка.
    В третьем издании все примеры реализации методов и алгоритмов приводятся на языке Си


    , изменен и расширен набор задач по всем разделам.
    Для студентов факультета ВМК в поддержку основного лекционного курса «Систе- мы программирования» и для преподавателей, ведущих практические занятия по этому курсу.
    УДК 519.682.1
    
    ББК 22.19я73
    ISBN 978-5-89407-395-8
    ISBN 978-5-317-03085-8
    © Факультет вычислительной математики и киберне- тики МГУ им. М. В. Ломоносова, 2009
    © И. А. Волкова, А. А. Вылиток, Т. В. Руденко, 2009

    Элементы теории формальных языков и грамматик
    /
    Введение
    3
    Элементы
    теории
    формальных
    языков
    и
    грамматик
    Введение
    В этом разделе изложены некоторые аспекты теории формальных языков, существен- ные с точки зрения трансляции. Здесь введены базовые понятия и даны определения, связан- ные с одним из основных механизмов определения языков — грамматиками, приведена наиболее распространенная классификация грамматик (по Хомскому). Особое внимание уделяется контекстно-свободным и регулярным грамматикам. Грамматики этих классов ши- роко используются при трансляции языков программирования. В пособии не приводятся до- казательства корректности алгоритмов и большинства сформулированных фактов, свойств, утверждений – их можно найти в книгах, указанных в списке литературы.
    Основные
    понятия
    и
    определения
    Определение: алфавит — это конечное множество символов.
    Предполагается, что термин «символ» имеет достаточно ясный интуитивный смысл и не нуждается в дальнейшем уточнении.
    Определение: цепочкой символов в алфавите V называется любая конечная последо- вательность символов этого алфавита.
    Определение: цепочка, которая не содержит ни одного символа, называется пустой
    цепочкой. Для ее обозначения будем использовать греческую букву

    Предполагается, что сама буква

    в алфавит V не входит; она лишь помогает обозна- чить пустую последовательность символов.
    Определение: если

    и

    — цепочки, то цепочка
    
    (результат приписывания цепочки

    в конец цепочки

    ), называется конкатенацией ( или сцеплением ) цепочек

    и

    . Конкатенацию можно считать двуместной операцией над цепочками:




    
    Например, если


    ab и


    cd, то




    abcd.
    Для любой цепочки

    справедливы равенства:









    Для любых цепочек

    ,

    ,

    справедливо (



    )





    (



    )

    
    (свойство ассоциатив- ности операции конкатенации).
    Определение: обращением (или реверсом)цепочки

    называется цепочка, символы которой записаны в обратном порядке.
    Обращение цепочки

    будем обозначать

    R
    Например, если


    abcdef, то

    R

    fedcba.
    Для пустой цепочки:

    R


    Определение: n-ой степенью цепочки

    (будем обозначать

    n
    ) называется конкатена- ция n цепочек

    :

    n

    

    
    n
    Свойства степени:

    0


    ;

    n

    
    n

    1


    n

    1


    Элементы теории формальных языков и грамматик
    /
    Основные понятия и определения
    4
    Определение: длина цепочки — это число составляющих ее символов (или длина по- следовательности символов).
    Например, если


    abbcaad, то длина

    равна 7.
    Длину цепочки

    будем обозначать |

    |. Длина

    равна 0.
    Определение: через |

    |
    s
    обозначают число вхождений символа s в цепочку

    Например, | babb |
    a

    1, | babb |
    b

    3, | babb |
    c

    0.
    Определение: обозначим через V
    *
    множество, содержащее все цепочки в алфавите
    V, включая пустую цепочку

    Например, если V

    {0, 1}, то V
    *

    {

    , 0, 1, 00, 11, 01, 10, 000, 001, 011, ... }.
    Определение: обозначим через V

    множество, содержащее все цепочки в алфавите V, исключая пустую цепочку

    Следовательно, V
    *

    V


    {

    }.
    Определение: язык в алфавите V — это подмножество множества всех цепочек в этом алфавите. Для любого языка L справедливо L

    V
    *
    Известны различные способы описания языков [3]. Конечный язык можно описать простым перечислением его цепочек. Поскольку формальный язык может быть и бесконеч- ным, требуются механизмы, позволяющие конечным образом представлять бесконечные языки. Можно выделить два основных подхода для такого представления: механизм распо- знавания и механизм порождения (генерации).
    Механизм распознавания (распознаватель), по сути, является процедурой специаль- ного вида, которая по заданной цепочке определяет, принадлежит ли она языку. Если при- надлежит, то процедура останавливается с ответом «да», т. е. допускает цепочку; иначе — останавливается с ответом «нет» или зацикливается. Язык, определяемый распознавате- лем — это множество всех цепочек, которые он допускает.
    Примеры распознавателей:

    Машина Тьюринга (МТ). Язык, который можно задать с помощью МТ, называется
    рекурсивно перечислимым.
    1)
    Вместо МТ можно использовать эквивалентные алго- ритмические схемы: нормальный алгоритм Маркова (НАМ), машину Поста и др.

    Линейно ограниченный автомат (ЛОА). Представляет собой МТ, в которой лента не бесконечна, а ограничена длиной входного слова
    2 )
    . Определяет контекстно-
    зависимые языки.
    1)
    Термин «рекурсивно перечислимый» происходит из теории рекурсивных функций, являющейся, также как
    НАМ и МТ, одной из формализаций понятия вычислимости (алгоритма). Смысл остальных названий, харак- теризующих распознаваемые языки, будет пояснен ниже.
    2)
    ЛОА является недетерминированной машиной: в какой-то момент вычисления (во время работы ЛОА над заданной цепочкой) может возникнуть ситуация, когда есть две или более подходящие для исполнения ко- манды, то есть выбор исполняемой команды не детерминирован. С этого момента возникают две или более копии ЛОА, соответствующие каждому возможному выбору; эти копии продолжают вычисления независи- мо (параллельно). Ответ «да» ЛОА дает, если хотя бы одно из вычислений успешно завершается. Известен алгоритм, позволяющий по любой недетерминированной МТ построить эквивалентную детерминированную

    Элементы теории формальных языков и грамматик
    /
    Основные понятия и определения
    5

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

    Конечный автомат (КА). Отличается от МП-автомата отсутствием магазина. Опре- деляет регулярные языки.
    Основной способ реализации механизма порождения — использование порождающих грамматик, которые иногда называют грамматиками Хомского. На изучении порождающих грамматик мы и остановимся подробно, и именно этот способ описания языков чаще всего будем использовать в дальнейшем.
    Отметим, что не каждый формальный язык можно задать с помощью конечного опи- сания. Действительно, само описание можно рассматривать как цепочку в некотором расши- ренном алфавите. Следовательно, множество описаний языков счётно, так как множество всех цепочек в заданном алфавите счётно. Каждый формальный язык в алфавите V является подмножеством счётного множества V
    *
    . Из теории множеств известно, что множество всех подмножеств счётного множества является несчётным. Таким образом, мощность множества формальных языков больше мощности множества конечных описаний и, следовательно, не каждый язык представи м в виде конечного описания.
    Определение: декартовым произведением A

    B множеств A и B называется множе- ство { (a, b) | a

    A, b

    B }.
    Определение: порождающая грамматика G — это четверка

    T, N, P, S

    , где

    T — алфавит терминальных символов ( терминалов );

    N — алфавит нетерминальных символов (нетерминалов), T

    N
    
    ;

    P — конечное подмножество множества (T

    N)


    (T

    N)
    *
    ; элемент (

    ,

    ) множе- ства P называется правилом вывода и записывается в виде



    ;

    называется ле-
    вой частью правила,

    правой частью; левая часть любого правила из P обязана содержать хотя бы один нетерминал;

    S — начальный символ (цель) грамматики, S

    N.
    Для записи правил вывода с одинаковыми левыми частями



    1



    2



    n
    будем пользоваться сокращенной записью



    1
    |

    2
    |...|

    n
    Каждое

    i
    (i

    1, 2, ..., n) будем называть альтернативой правила вывода из цепочки

    Пример грамматики:
    G
    example


    {0, 1}, {A, S}, P, S

    , где P состоит из правил:
    МТ. Однако до сих пор открыт вопрос, существует ли для любого ЛОА эквивалентный ему детерминиро- ванный ЛОА.

    Элементы теории формальных языков и грамматик
    /
    Основные понятия и определения
    6
    S
    0A1 0A → 00A1
    A

     
    Определение: цепочка


    ( T

    N )
    *
    непосредственно выводима из цепочки


    ( T

    N )

    в грамматике G


    T, N, P, S

    (обозначается


    G

    ), если



    1
    
    2
    ,



    1
    
    2
    , где

    1
    ,

    2
    ,


    (T

    N )
    *
    ,


    (T

    N )

    и правило вывода



    содержится в P. Индекс G в обо- значении →
    G
    обычно опускают, если понятно, о какой грамматике идет речь.
    Например, цепочка 00A11 непосредственно выводима из 0A1 в грамматике G
    example
    :
    0A1 → 00A11. Здесь цепочка 0A, подчеркнутая двойной чертой, играет роль подцепочки

    из определения, цепочка 00A1 играет роль подцепочки

    ,

    1


    ,

    2

    1.
    Определение:
    цепочка


    (T

    N )
    *
    выводима
    из цепочки


    (T

    N)

    в грамматике G


    T, N, P, S

    (обозначается


    G

    ), если существуют цепоч- ки

    0
    ,

    1
    , ...,

    n
    (n

    0), такие, что



    0


    1
    → ... →

    n


    . Последовательность

    0
    ,

    1
    , ...,

    n
    называется выводом длины n. Индекс G в обозначении

    G
    опускают, если по- нятно, какая грамматика подразумевается.
    Например, S

    000A111 в грамматике G
    example
    (см. пример выше), т.к. существует вы- вод S → 0A1→ 00A11→ 000A111. Длина вывода равна 3.
    Определение: языком, порождаемым грамматикой G


    T, N, P, S

    , называется множество L(G)

    {


    T
    *
    | S


    }.
    Другими словами, L(G) — это все цепочки в алфавите T, которые выводимы из S с помощью правил P. Например, L(G
    example
    )

    {0
    n
    1
    n
    | n

    0}.
    Определение: цепочка


    (T

    N)
    *
    , для которой S


    , называется сентенциальной
    формой в грамматике G


    T, N, P, S

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

    L(G
    2
    ).
    Пример. Грамматики G
    1


    {0,1}, {A,S}, P
    1
    , S

    и G
    2


    {0,1}, {S}, P
    2
    , S

    с правилами
    P
    1
    :
    S
    0A1 0A → 00A1
    A
    
    P
    2
    :
    S
    0S1 | 01 эквивалентны, т. к. обе порождают язык L(G
    1
    )

    L(G
    2
    )

    {0
    n
    1
    n
    | n

    0}.
    Определение: грамматики
    G
    1
    и
    G
    2
    почти
    эквивалентны, если
    L(G
    1
    )

    {

    }

    L(G
    2
    )

    {

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

    Например, почти эквивалентны грамматики
    G
    1


    {0,1}, {A, S}, P
    1
    , S

    и G
    2


    {0, 1}, {S}, P
    2
    , S
    
    с правилами


    Элементы теории формальных языков и грамматик
    /
    Классификация грамматик и языков по Хомскому
    7
    P
    1
    :
    S 0A1 0A → 00A1
    A
    
    ,
    P
    2
    :
    S 0S1 |

    так как L(G
    1
    )

    {0
    n
    1
    n
    | n

    0}, а L(G
    2
    )

    {0
    n
    1
    n
    | n

    0}, т. е. L(G
    2
    ) состоит из всех цепочек язы- ка L(G
    1
    ) и пустой цепочки, которая в L(G
    1
    ) не входит.
    Классификация грамматик и языков по Хомскому
    Определим с помощью ограничений на вид правил вывода четыре типа грамматик: тип 0, тип 1, тип 2, тип 3. Каждому типу грамматик соответствует свой класс
    3)
    языков. Если язык порождается грамматикой типа i (для i

    0, 1, 2, 3), то он является языком типа i.
    Тип 0
    Любая порождающая грамматика является грамматикой типа 0. На вид правил грам- матик этого типа не накладывается никаких дополнительных ограничений. Класс языков ти- па 0 совпадает с классом рекурсивно перечислимых языков.
    Грамматики с ограничениями на вид правил вывода
    Тип 1
    Грамматика G


    T, N, P, S

    называется неукорачивающей, если правая часть каждого правила из P не короче левой части (т. е. для любого правила




    P выполняется нера- венство |

    |

    |

    | ). В виде исключения в неукорачивающей грамматике допускается нали- чие правила S

    , при условии, что S (начальный символ) не встречается в правых частях правил.
    Грамматикой типа 1 будем называть неукорачивающую грамматику.
    Тип 1 в некоторых источниках определяют с помощью так называемых контекстно- зависимых грамматик.
    Грамматика G


    T, N, P, S

    называется контекстно-зависимой (КЗ), если каждое правило из P имеет вид



    , где



    1
    A

    2
    ,



    1
    
    2
    , A

    N,


    (T

    N )

    ,

    1
    ,

    2

    (T

    N)
    *
    .
    В виде исключения в КЗ-грамматике допускается наличие правила с пустой правой частью
    S

    , при условии, что S (начальный символ) не встречается в правых частях правил.
    Цепочку

    1
    называют левым контекстом, цепочку

    2
    называют правым контек-
    стом. Язык, порождаемый контекстно-зависимой грамматикой, называется контекстно-
    зависимым языком.
      1   2   3   4   5   6   7   8   9   ...   15


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