Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Формальные языки и грамматики.doc
Скачиваний:
161
Добавлен:
01.05.2014
Размер:
1.51 Mб
Скачать

1.1.3. Построение компилятора

Для построения компилятора необходимо однозначное и точное задание входного и выходного языков. Такое задание предполагает определение правил построения допустимых конструкций (выражений) языка. Множество таких правил называют синтаксисом языка. Кроме того, задание должно включать описание назначения и смысла каждой конструкции языка. Такое описание называютсемантикойязыка.

Для построения точных и недвусмысленных описаний применяют метод абстракций, который предполагает выделение наиболее существенных свойств рассматриваемого объекта и опускание свойств, менее значимых для рассматриваемого случая. Например, при построении модели входных языков можно рассматривать входной текст как последовательность символов, построенную по определенным правилам, отвлекаясь от характера начертания символов и их расположения на листе. Математические модели, использующие представление текстов в виде цепочек символов, называют формальными языками и грамматиками.

1.2.2. Примеры, иллюстрирующие первичные понятия

Рассмотрим несколько примеров, иллюстрирующих введенные понятия:

а) Задана грамматика Г1. 0и требуется определить язык, порождаемый этой грамматикой:

Г1. 0:      Vт = {a, b, c}, Va = {<I>}, R = {<I> abc}.

Схема грамматики содержит одно правило, поэтому Г1. 0 порождает язык из одного слова

L(Г1. 0) = {abc}.

 b) Задана грамматика Г1. 1и требуется определить язык, порождаемый этой грамматикой .

Г1. 1 :      Vт = {a, b, c}, Va = {<I>, <B>, <C>}

R =  { <I> a<B>,

<B> <C>d,<B> dc,<C> $}.

Построим все выводы в этой грамматике:

<I>  a<B>  a<C>d  ad,<I>  a<B>  adc.

Следовательно язык L(Г1. 1) = {adc, ad}. в) Задана грамматика Г1. 2 и требуется определить язык, порождаемый этой грамматикой .

Г1. 2 :   Va = {<I>, <A>}, Vт = {0, 1},

R = {<I> 0<A>1,

0<A> 00<A>1,<A> $}.

Рассмотрим несколько выводов с помощью правил грамматики Г1. 2. Применяя первое и третье правила, получаем:

<I> 0<A>1 01.

Применяя два раза первое правило и третье, имеем

<I> 0<A>1 00<A>11 0011.

В общем случае, применяя K раз первое правило, получим в результате цепочку, содержащую K нулей и K единиц. Следовательно, язык, порождаемый грамматикой Г1. 2, содержит всевозможные цепочки, в которых число нулей равно числу единиц. г) Задана грамматика Г1. 3и требуется построить язык, порождаемый этой грамматикой.

Г1. 3 :       Vт = {a, b}, Va = {<I>, <A>},

R = { <I> a<A>,         <A> b<A>}.

Попытка построения вывода в этой грамматике приводит нас к цепочке:

<I> a<A> ab<A> abb<A> ... ,

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

1.2.3. Пустой язык

Определение.  Если язык, порождаемый грамматикойГ, не содержит ни одной конечной цепочки (конечного слова), то он называетсяпустым

Утверждение.  Для того, чтобы языкL( Г )не был пустым, в множествеRдолжно быть хотя бы одно правило вида r = , где Vт*и должен существовать вывод

<I> * .

1.2.4. Резюме

Для построения компилятора необходимо иметь точное и недвусмысленное описание входного и выходного языков, синтаксиса и семантики. Для задания синтаксиса языка используются формальные грамматики. Грамматика определяеется терминальным словарем, множеством правил и начальным символом. С помощью правил грамматики можно строить выводы цепочек, состоящих из терминальных символов. Множество таких цепочек, выводимых из начального символа грамматики, образует формальный язык, задаваемый грамматикой.

Соседние файлы в предмете Теория языков программирования