Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ParseUnit / MCADoc.doc
Скачиваний:
29
Добавлен:
31.05.2015
Размер:
1.53 Mб
Скачать

2.1. Кс-грамматики. Дерево синтаксического разбора

Обозначим V – конечное множество символов, V+ - множество непустых цепочек символов из V, V* - множество все возможных цепочек (включая цепочку нулевой длины) из V.

Определение. Грамматика G = <N, T, P, S>, где N, T – множества нетерминальных и терминальных символов соответственно (NT=), P – множество правил вида A->  (AN, (NT)*), S - аксиома (SN), называется КС-грамматикой.

Пример КС-грамматики.

G=<N, T, P, S>, где

N={A,B,C,D,E}

T={+,*,(,),i}

S=A

P={ 1. A->CB

2. B->+CB

3. B->

4. C->ED

5. D->*ED

6.D->

7. E->(A)

8. E->i}

Выводом цепочки n в грамматике G называется последовательность цепочек 1=>…=>i-1 =>i=>…=>n, если [3, с.77]:

  1. 1, …i-1, …, n  (NT)*,

  2. 1=S,

  3. i=2, …, n цепочка i получена из цепочки i-1 заменой одного нетерминального символа A цепочкой  согласно правила грамматики A->

Для цепочки i+i*i+i выводом в грамматике G является последовательность цепочек2

A=>1CB=>4EDB=>8iDB=>6iB=>2i+CB=>4i+EDB=>8i+iDB=>5i+i*EDB=>8i+i*iDB=>6=>i+i*iB=>2i+i*i+CB=>4i+i*i+EDB=>8i+i*i+iDB=>6 i+i*i+iB=>3 i+i*i+i

Вывод цепочки часто описывают деревом синтаксического разбора. Одно и тоже дерево синтаксического разбора может соответствовать различным выводам цепочки.

Деревом синтаксического разбора (ДСР) цепочки =1, …, m в KC-грамматике G называется дерево, у которого:

  1. Корень дерева помечен символом S.

  2. Терминальные узлы дерева помечены символами 1, …, m , .

  3. Промежуточные узлы дерева помечены нетерминальными символами грамматики 1, …, m N.

  4. Для всякого нетерминального узла A дерева синтаксического разбора, непосредственно связанного с узлами 1, …, n, в грамматике G имеет место правило A -> 1…n.

ДСР цепочки i+i*i+i в грамматике G представлено на рис.1.

Упражнение. Сопоставьте каждому элементу вывода цепочки i+i*i+i в грамматике G элементы ДСР.

Рис. 1. Дерево синтаксического разбора цепочки i+i*i+i. Верхний индекс в метке нетерминального узла – номер правила грамматики

2.2. Множества направляющих символов.Ll(1)-грамматики

Множество направляющих символов DS(P->) правила P-> КС-грамматики G определим как DS(P->)=S()F(P), где S()={a| a  T, (NT)+, =>*a, (NT)*}3, а F(P)={a| a  T{#}, =>*, S#=>* xPay; S – аксиома КС-грамматики, P  N; x,y  (NT)*} [3, c.104]. Таким образом, множество направляющих символов правила грамматики это символы входной строки, при обработке которых можно применить данное правило.

Построим множества направляющих символов для правил грамматики G:

DS(A->CB) = {(, i }

DS(B->+CB) = { + }

DS(B->) = {#, )}

DS(C->ED) = {(, i}

DS(D->*ED)={*}

DS(D->) = {+, #, )}

DS(E->(A)) = { ( }

DS(E->i) = { i }

LL(1)-грамматикой называется такая КС-грамматика G=<N, T, P, S>, у которой:

  1. Нет подмножеств правил вида A->A11, …, An-1->A n n, A n->A, где A, A1, …, An N, 1, …,  n  (NT)*

  2. xNT S=>*x  P, где ,   (NT)*

  3. p1, p2 | p1, p2  P, p1=A->, p2=A-> DS(A->)DS(A->)=

Приведенная выше КС-грамматика G является LL(1)-грамматикой.

LL(1)-грамматики используют в качестве моделей синтаксиса языков программирования. Свойства LL(1)-грамматики позволяют строить из нее автоматный синтаксический анализатор, обеспечивающий контроль принадлежности входной цепочки языку, заданному этой грамматикой.

Соседние файлы в папке ParseUnit