Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_одм_4.doc
Скачиваний:
8
Добавлен:
28.03.2016
Размер:
140.8 Кб
Скачать

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

КС - языки являются наиболее изученными классом. Это объясняется тем, что с одной стороны, КС-грамматики оказались весьма подходящим аппаратом для описания строения естественных языков и особенно языков программирования. С другой стороны, благодаря относительной простоте и содержательности структуры КС-языков и наличию удобных средств её описания исследование КС-языков представляет значительный практический интерес.

Появление понятия КС-грамматики практически совпало с разработкой мета языка Бэкуса (или нормальной формы Бэкуса), который был впервые использован при описании языка программирования АДГОЛ - 60 и быстро стал общепринятым средством формального описания языков программирования. Описание языка с помощью нормальных форм Бэкуса представляет собой совокупность так называемых "металингвистических формул" - выражений вида Х::=Y1Y2... Yn, где Х - некоторый текст, заключенный в угловые скобки и называемый металингвистической переменной, а Y1, ... , Yn - последовательность металингвистических переменных и основных символов языка (букв, цифр, разделителей, неделимых слов типа "begin" и т. п.). Знак ::= называется металингвистической связкой и читается как "есть" или "это". Знак - это металингвистическая связка "или". Металингвистическая переменная представляет собой имя конструкции языка.

Металингвистическая формула в целом - это описание различных синтаксических вариантов построения конструкций Х, стоящей в левой части, через другие конструкции и символы языка, указанные в правой части. Перечисление вариантов представления производится с использованием связки "или".

Пример 1. Множество идентификаторов Паскаль - это множество цепочек из букв и цифр, начинающихся с буквы. Тогда понятие идентификатора может быть описано с помощью следующих нормальных форм Бэкуса (металингвистических формул), в которых цепочка из букв и цифр сокращенно называется БЦ-цепочкой:

идентификатор ::= буквабукваБЦ-цепочка

БЦ-цепочка::= буквацифрабуквабукваБЦ-цепочкацифра

БЦ-цепочка

буква::= a b c ... z

цифра::=0 1 2 ... 9

Основные символы языка - это 26 букв латинского алфавита и десять цифр.

Пример 2. Язык арифметических выражений (без констант и с фиксированным множеством переменных a, b, c) в метаязыке Бэкуса описывается следующим образом:

арифметическое выражение :: = терм арифметическое выражение+терм арифметическое выражение - терм

терм::= множитель терм* множитель терм / множитель

множитель ::= арифметическое выражение переменная

переменная :: = a b c

Уже из этих примеров ясно, что нормальные формы Бекуса нетрудно преобразовать в выражения КС-грамматики. При этом основные символы соответствуют терминальным символам грамматики, металингвистические переменные - нетерминальным символам, связка ::= соответствует знаку , а без связки можно обойтись, если формулу Х::=Y1Y2... Yn заменить системой формул Х::=Y1, ... , Х::=Yn. Если указанные преобразования провести для последнего примера заменив арифметическое выражение на символ I, терм на Т, множитель - на М, переменную - на L, то получим следующую КС-грамматику:

I T;

I I - T;

I M;

I T * M;

I T / M;

M I;

M L;

L a; L b; L c.

Указанное соответствие является взаимно однозначным и всякая КС - грамматика преобразуется в нормальную форму Бэкуса. Такое простое соответствие между двумя видами описаний одного и того же класса языков является свидетельством близости теоретических и практических целей исследования порождающих грамматик и их использования для формализации алгоритмических языков программирования.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]