Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция IV. Трансляция выражений.doc
Скачиваний:
12
Добавлен:
26.03.2015
Размер:
153.6 Кб
Скачать

3.2. Некоторые свойства грамматик.

Эквивалентность грамматик – это, когда различные грамматики порождают один и тот же язык, т. е. грамматики G1 и G2 будут эквивалентными, если L(G1) = L(G2).

Например, G1 = ({0,1}, {A,S}, S, P1) и G2 = ({0,1}, {S}, S, P2)

где P1: S → 0A1

P2: S → 0S1 | 01 ( | – знак или)

0A → 00A1

A → ε

эквивалентны, т. к. обе порождают язык L(G1) = L(G2) = {0n1n | n>0}

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

Определение грамматик не накладывает никаких ограничений на количество нетерминалов в левой части правил:

Грамматика G=({a,b,c},{S,B,C},S,P), где P содержит следующие правила:

P = {SaSBC, SabC, CBBC, bBbb, bCbc, cCcc}

порождает язык {anbncn, n≥1} (n>0)

В грамматике G=({0,1},{А,S},S,P), где P = {S → 0A, 0A → 00A1, S → ε}левая часть одного из правил содержит пару из терминального и нетерминального символа.

Эквивалентная ей грамматика G1 = ({0,1}, {A,S}, S, P1), где

P1: S → 0A1

0A → 00A1

A → ε

Соглашение – альтернатива правила вывода из цепочки: для записи правил вывода с одинаковыми левыми частями α → β1 α → β2 ... α → βn пользуются сокращенной записью через операцию или: α → β1 | β2 |...| βn; каждое βi (i= 1, 2, ... , n) называется альтернативой правила вывода из цепочки α.

4. Грамматики с ограничениями на правила

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

4.1. Классы грамматик в соответствии с классификацией Хомского.

Праволинейной (выровненной вправо) грамматикой называется грамматика G, если каждое правило из Р имеет вид

AxB или Ax

где A, B – нетерминалы, x – цепочка, состоящая из терминалов

Например, грамматика G2 = ({0,1}, {S}, S, P)

где P: S 0S;

S 1S;

S ,

определяет язык {0, 1}.

Контекстно-свободной (бесконтекстной) грамматикой (КС-грамматикой) называется грамматика G, если каждое правило из Р имеет вид:

A 

где A N, (T N)*, то есть является цепочкой, состоящей из множества терминалов и нетерминалов и может быть пустой.

Например, грамматика G3 = ({E, T, F}, {a, +, *, (,)}, P, E)

где P: E T

E E + T

T F

T T * F

F (E)

F a.

порождает простейшие арифметические выражения.

Согласно определению, каждая праволинейная грамматика является контекстно- свободной.

Нетерминал А контекстно-свободной грамматики G = (T, N, S, P) для некоторых и , если=ε, называется леворекурсивным, а если=ε, называется праворекурсивным.

Грамматика G называется леворекурсивной (соответственно праворекурсивной), если в G имеется хотя бы один леворекурсивный (соответственно праворекурсивный) нетерминал.

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

Контекстно-зависимой (неукорачивающей) грамматикой (КЗ-грамматикой) называется грамматика G, если каждое правило из P имеет вид:

  

где | || |, то есть вновь порождаемые цепочки не могут быть короче, чем исходные, а также пустыми (другие ограничения отсутствуют).

Например, грамматика G = ({a, b, c}, {B, C, S}, S, P)

где P: S aSBC;

S abc;

CB BC;

bB bb;

bC bc;

cC сc,

порождает язык { a n b n c n }, n 1 (n >0).

По определению КЗ-грамматика не допускает правил А , где – пустая цепочка, т. е. КС-грамматика с пустыми цепочками в правой части правил не является контекстно-зависимой.

Запрещение в контекстно-зависимой грамматике использования правил вида A→ε сделано для того, чтобы алгоритм, определяющий принадлежность цепочки языку, не зацикливался.

Наличие пустых цепочек ведет к грамматике без ограничений.

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

Если язык L порождается грамматикой типа G, то L называется языком типа G.

Например, L(G) – КС-язык типа G.

Наиболее широкое применение при разработке трансляторов нашли КС-грамматики и порождаемые ими КС-языки.

Эта классификация называется включающей, т. е. все контекстно-свободные грамматики являются контекстно-зависимыми, а все контекстно-зависимые грамматики являются грамматиками общего вида и т. д.

Существуют языки, принадлежащие к типу i, но не к типу i+1: например, язык грамматики Gi является контекстно-зависимым, но не контекстно-свободным, т. е. не существует контекстно-свободной грамматики, порождающий этот язык.