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


  • 2.1 Расширенные Формы Бэкуса – Наура

  • Разработка компилятора модельного языка. Отчет. Пояснительная записка гоу огу 230105. 60. 11. 06 O руководитель работы Ишакова Е. Н. " " 2011г. Исполнитель


    Скачать 1.59 Mb.
    НазваниеПояснительная записка гоу огу 230105. 60. 11. 06 O руководитель работы Ишакова Е. Н. " " 2011г. Исполнитель
    АнкорРазработка компилятора модельного языка
    Дата04.10.2020
    Размер1.59 Mb.
    Формат файлаdoc
    Имя файлаОтчет.doc
    ТипПояснительная записка
    #140979
    страница2 из 8
    1   2   3   4   5   6   7   8

    Цепочка, которая не содержит ни одного символа, называется пустой цепочкой и обозначается .


    Формальное определение цепочки символов в алфавите V:

    1.  - цепочка в алфавите V;

    2. если - цепочка в алфавитеV и а – символ этого алфавита, то а – цепочка в алфавите V;

    3.  - цепочка в алфавите V тогда и только тогда, когда она является таковой в силу утверждений 1) и 2).

    Длиной цепочки называется число составляющих ее символов (обозначается ||).

    Конкатенацией (сцеплением) цепочек и называется цепочка =, в которой символы данных цепочек записаны друг за другом.

    Для любой цепочки справедливо утверждение =.

    Степенью n цепочки называется конкатенация n цепочек (обозначается: n).

    Для любой цепочки справедливы утверждения 0= иn=n-1=n-1 для n1.

    Реверсом (обращением) цепочки называется цепочка R,составленная из символов цепочки , записанных в обратном порядке.

    Пример 1. Пусть алфавит V={a, b, c, d}, тогда для цепочек этого алфавита =abи =bcdбудет справедливо ||=2, ||=3, =abbcd, 2=abab, R=dcb.

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

    Формальным языком L в алфавите V называют некоторое подмножество множества V*.

    Пример 2. Пусть задан алфавит двоичных цифр , тогда , а .

    Задать язык L в алфавите V можно тремя способами:

    1. перечислением всех допустимых цепочек языка (на языке множеств);

    2. указанием способа порождения (генерации) цепочек языка (грамматики, формы Бэкуса-Наура и диаграммы Вирта);

    3. определением метода распознавания цепочек языка (распознаватели).

    Пример 3. Язык Lв алфавите , состоящий из пустой строки и всевозможных строк, каждая из которых содержит строку нулей и последующую строку единиц той же длины, можно описать с помощью формальной системы определения множеств как L={0n1n | n0}.

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

    Формальной грамматикой называется четверка вида:
    ,
    где VN- конечное множество нетерминальных символов грамматики (обычно прописные латинские буквы);

    VT - множество терминальных символов грамматики (обычно строчные латинские буквы, цифры и т.п.),VTVN =;

    Р - множество правил вывода грамматики, являющееся конечным подмножеством множества (VT VN)+ (VT VN)*; элемент (, ) множества Р называется правилом вывода и записывается в виде (читается: «из цепочки выводится цепочка »);

    S - начальный символ грамматики, S VN.

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

    Грамматика G1=({0, 1}, {A,S}, P1, S), где множество Р состоит из правил вида: 1) S0A1; 2)0A00A1;3)A.

    Цепочка (VTVN)* непосредственно выводима из цепочки в грамматике (обозначается: ), если и , где , и правило вывода содержится во множестве Р.

    Цепочка (VTVN)* выводима из цепочки в грамматике (обозначается *), если существует последовательность цепочек (n0) такая, что .

    В грамматике G1 S*000111, т.к. существует вывод S0A100A11000A111000111.

    Языком, порожденным грамматикой , называется множество всех цепочек в алфавите VT, которые выводимы из начального символа грамматики S c помощью правил множества Р, т.е. множество .

    Для грамматики G1 язык L(G1)={0n1n | n>0}.

    Цепочка , для которой существует вывод S*, называется сентенциальной формой или сентенцией в грамматике .


    Языком, порожденным грамматикой G называется множество терминальных сентенциальных форм грамматики.

    Классификация грамматик в иерархии американского математика Хомского осуществляется по структуре правил вывода. В расширенной иерархии Хомского выделяется четыре типа грамматик.

    Тип 0. Грамматика называется грамматикой типа 0 (грамматикой без ограничений или грамматикой с фразовой структурой), если на ее правила вывода не наложено никаких ограничений, кроме тех, которые указаны в определении грамматики.


    Тип 1. Грамматика называется контекстно-зависимой грамматикой (КЗ-грамматикой), если каждое правило вывода из множества Р имеет вид , где  (VT VN)+,  (VT VN)* и ||  ||. Расширение допускает не более одного -правила, т.е. правила вида А, АVN.

    Тип 2. Грамматика называется контекстно-свободной грамматикой (КС-грамматикой), если ее правила вывода имеют вид: , где и

    Тип 3. Грамматика называется регулярной грамматикой (Р-грамматикой) выровненной вправо, если ее правила вывода имеют вид , где .

    Грамматика называется регулярной грамматикой (Р-грамматикой) выровненной влево, если ее правила вывода имеют вид , где .
    Расширение допускает единственное -правило вида S, но в этом случае начальный символ грамматики S не должен встречаться в правых частях правил.

    Язык L(G) называется языком типа k, если его можно описать грамматикой типа k, где k – максимально возможный номер типа грамматики.

    Язык вида L={0n1n | n>0} порождается КЗ-грамматикой (тип 1) G1 (пример 1.4) и КС-грамматикой (тип 2) G2= ({0, 1}, {S}, P2, S), где

    множество правил вывода P2 содержит правила вида S 0S1|01.

    Так как не существует регулярной грамматики (тип 3), порождающей данный язык, то язык L является языком типа 2 или КС-языком.
    Примеры различных типов формальных языков и грамматик по классификации Хомского. Терминалы будем обозначать строчными символами, нетерминалы – прописными буквами, начальный символ грамматики – S.

    а) Язык типа 0 L(G)= определяется грамматикой с правилами вывода:

    1) S aaCFD; 2) AD D;

    3) F AFB | AB;4) Cb bC;

    5) AB bBA;6) CB C;

    7) Ab bA;8) bCD .

    б) Контекстно-зависимый язык L(G)={anbncn | n1} определяется грамматикой с правилами вывода:

    1) S aSBC | aBC;2) CB BC;
    3) aB ab; 4) bB bb;

    5) bC bc;6) cC cc.

    в) Контекстно-свободный язык L(G)={(aс)n(cb)n | n>0} определяется грамматикой с правилами вывода:

    1) S aQb | accb;

    2) Q cSc.

    г) Регулярный язык L(G)={ | {a, b}+, где нет двух рядом стоящих а} определяется грамматикой с правилами вывода:

    1) S A | B;

    2) A a | Ba;

    3) B b | Bb | Ab.

    Грамматики G1 и G2 называются эквивалентными, если они определяют один и тот же язык, т.е. .

    Грамматики G1 и G2 называются почти эквивалентными, если заданные ими языки различаются не более чем на пустую цепочку символов, т.е. .

    Для грамматики G1 эквивалентной будет грамматика G2 = ({0, 1}, {S}, P3, S), где P2: S 0S1|01, т.к. L(G1)=L(G2)={0n1n | n>0} (пример 1.7).

    Почти эквивалентной для грамматики G1 будет грамматика G3 = ({0, 1}, {S}, P3, S), где множество правил вывода P3 содержит правила вида S 0S1 | , т.к. L(G3)= {0n1n | n0}.


    Цепочки языка могут содержать метасимволы, имеющие особое назначение. Метаязык, предложенный Бэкусом и Науром (БНФ) использует следующие обозначения:

    • символ «::=» отделяет левую часть правила от правой (читается: «определяется как»);

    • нетерминалы обозначаются произвольной символьной строкой, заключенной в угловые скобки «<» и «>»;

    • терминалы - это символы, используемые в описываемом языке;

    • правило может определять порождение нескольких альтернативных цепочек, отделяемых друг от друга символом вертикальной черты «|» (читается: «или»).

    Для повышения удобства и компактности описаний, в расширенных БНФ вводятся следующие дополнительные конструкции (метасимволы):

    • квадратные скобки «[» и «]» означают, что заключенная в них синтаксическая конструкция может отсутствовать;

    • фигурные скобки «{» и «}» означают повторение заключенной в них синтаксической конструкции ноль или более раз;

    • сочетание фигурных скобок и косой черты «{/» и «/}» используется для обозначения повторения один и более раз;

    • круглые скобки «(» и «)» используются для ограничения альтернативных конструкций;

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

    В метаязыке диаграмм Вирта используются графические примитивы.

    При построении диаграмм учитывают следующие правила:

    • каждый графический элемент, соответствующий терминалу или нетерминалу, имеет по одному входу и выходу, которые обычно изображаются на противоположных сторонах;

    • каждому правилу соответствует своя графическая диаграмма, на которой терминалы и нетерминалы соединяются посредством дуг;

    • альтернативы в правилах задаются ветвлением дуг, а итерации - их слиянием;

    • должна быть одна входная дуга (располагается обычно слева или сверху), задающая начало правила и помеченная именем определяемого нетерминала, и одна выходная, задающая его конец (обычно располагается справа или снизу);

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

    2.1 Расширенные Формы Бэкуса – Наура
    Пусть синтаксис модельного языка программирования М задан с помощью РБНФ следующим образом.

    1   2   3   4   5   6   7   8


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