
- •Курсовая работа
- •Содержание
- •Введение
- •1 Постановка задачи
- •2 Формальная модель задачи
- •Цепочка, которая не содержит ни одного символа, называется пустой цепочкой и обозначается .
- •Цепочка , для которой существует выводS*, называется сентенциальной формой или сентенцией в грамматике .
- •Расширение допускает единственное -правило вида s, но в этом случае начальный символ грамматики s не должен встречаться в правых частях правил.
- •2.1 Расширенные Формы Бэкуса – Наура
- •Операции языка:
- •Правила, определяющие идентификатор, букву и цифру:
- •Правило, определяющее оператор программы (пятая цифра варианта).
- •2.2 Формальные грамматики
- •2.3 Диаграммы Вирта
- •3 Спецификация основных процедур и функций
- •3.1 Лексический анализатор
- •3.2 Синтаксический анализатор
- •3.3 Семантический анализатор
- •3.4 Генерации внутреннего представления программы
- •Перевод в полиз операторов. Каждый оператор языка программирования может быть представлен как n-местная операция с семантикой, соответствующей семантике оператора.
- •Составной оператор {s1; s2;...; Sn } в полиЗе записывается как s1 s2... Sn.
- •3.5 Интерпретатор программы
- •4 Структурная организация данных
- •4.1 Спецификация входной информации
- •4.2 Спецификация выходной информации
- •5 Разработка алгоритма решения задачи
- •6 Установка и эксплуатация программного средства
- •7 Работа с программным средством
- •Заключение
- •Список использованных источников
- •Приложение а
- •Приложение б Примеры программ на модельном языке
- •Приложение в Цепочка вывода и дерево разбора
- •Приложение г Примеры таблиц идентификаторов и двуместных операций
- •Приложение д полиз и интерпретация программы
- •Здесь используются следующие обозначения:
- •Приложение е Контрольный пример
- •Приложение ж Список ошибок, выводимых программой
- •Приложение з Текст программы
Цепочка , для которой существует вывод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 | n1} определяется грамматикой с правилами вывода:
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}.
Цепочки языка могут содержать метасимволы, имеющие особое назначение. Метаязык, предложенный Бэкусом и Науром (БНФ) использует следующие обозначения:
символ «::=» отделяет левую часть правила от правой (читается: «определяется как»);
нетерминалы обозначаются произвольной символьной строкой, заключенной в угловые скобки «<» и «>»;
терминалы - это символы, используемые в описываемом языке;
правило может определять порождение нескольких альтернативных цепочек, отделяемых друг от друга символом вертикальной черты «|» (читается: «или»).
Для повышения удобства и компактности описаний, в расширенных БНФ вводятся следующие дополнительные конструкции (метасимволы):
квадратные скобки «[» и «]» означают, что заключенная в них синтаксическая конструкция может отсутствовать;
фигурные скобки «{» и «}» означают повторение заключенной в них синтаксической конструкции ноль или более раз;
сочетание фигурных скобок и косой черты «{/» и «/}» используется для обозначения повторения один и более раз;
круглые скобки «(» и «)» используются для ограничения альтернативных конструкций;
кавычки используются в тех случаях, когда один из метасимволов нужно включить в цепочку обычным образом.
В метаязыке диаграмм Вирта используются графические примитивы.
При построении диаграмм учитывают следующие правила:
каждый графический элемент, соответствующий терминалу или нетерминалу, имеет по одному входу и выходу, которые обычно изображаются на противоположных сторонах;
каждому правилу соответствует своя графическая диаграмма, на которой терминалы и нетерминалы соединяются посредством дуг;
альтернативы в правилах задаются ветвлением дуг, а итерации - их слиянием;
должна быть одна входная дуга (располагается обычно слева или сверху), задающая начало правила и помеченная именем определяемого нетерминала, и одна выходная, задающая его конец (обычно располагается справа или снизу);
стрелки на дугах диаграмм обычно не ставятся, а направления связей отслеживаются движением от начальной дуги в соответствии с плавными изгибами промежуточных дуг и ветвлений.