Скачиваний:
10
Добавлен:
01.05.2014
Размер:
170 Кб
Скачать
☆

Для этого должны существовать правила исходной грамматики вида

AXВR , B+Y (т.е. в правиле за этим символом Х должен следовать нетерминал, из которого нетривиальным образом выводится цепочка, начинающаяся на Y).

Если из начального символа грамматики S+Y, то <•Y.

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

1-ое: E E or T, из Т возможы выводы: T  T and P  P and P  i and P

( E ) and P

  • not P and P

Получили: or <• T, or <• P, or <• i, or <• ( , or <• not

3-е: T  T and P, из P возможны выводы: P i , P ( E ), P not P

Получили отношения: and <• i, and <• (, and <• not

6-ое: P  ( E ), ищем все возможные символы, с которых начинаются цепочки,

выводимые из Е:

E  E or T  T or T  P or T  i or T

( E ) or T

not P or T

Отсюда отношения: (<• E, (<• T, (<•P, (<• i, (<• ), (<• not.

7-ое: P not P, в предыдущем правиле на промежуточном этапе мы уже нашли все

возможные символы, с которых начинаются цепочки, выводимые из P: i, (, not.

Отношения: not<• i, not<• (, not<• not

Из начального символа грамматики выводятся цепочки, начинающиеся с символов:

E  E or T  T or T  P or T  i or T

( E ) or T

not P or T

Отсюда отношения: <• E, <• T, <•P,  <• i, <• ), <• not.

  • Ищем отношения вида X •> Y (Х сворачивается раньше, чем У).

Для этого должны существовать правила исходной грамматики вида

AВYR , B+X (т.е. в правиле перед символом Y должен находиться нетерминал, из которого нетривиальным образом выводится цепочка, заканчивающаяся на X).

Если из начального символа грамматики S+X (вывод заканчивается на Х), то X•>.

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

1-ое : E  E or T , найдем все символы, на которые могут заканчиваться выводы

из Е  E or T  E or P  E or i

 E or ( E )

Можем занести в матрицу отношения: T•> or, P•> or, i•> or, ) •> or

3-е: T  T and P , в превыдущем правиле мы нашли символы, на которые

заканчиваются цепочки из T: P, i,)

Отношения: P•> and, i•> and, ) •> and

6-ое: P  ( E ), все возможные символы, заканчивающие цепочки из E, найдены:

T•> ), P•> ), i•> ), ) •> )

Так как E является начальным символом грамматики, то также можем добавить следующие отношения: T•> , P•> , i•> , ) •> 

Т.о. мы рассмотрели все возможные отношения между символами и занесли их в таблицу – матрицу предшествования.

E

T

P

or

and

i

not

(

)

Eps

E

T

•>

•>

•>

P

•>

•>

•>

•>

or

<•

<•

<•

<•

<•

and

<•

<•

<•

i

•>

•>

•>

•>

not

<•

<•

<•

(

<•

<•

<•

<•

<•

<•

)

•>

•>

•>

•>

<•

<•

<•

<•

<•

<•

В построенной матрице существуют ячейки, в которых два отношения пересекаются, следовательно, исходная грамматика не является грамматикой простого предшествования. В то же время отношение •> не пересекается с объединением отношений <• и  - грамматика операторного предшествования.

Построение функции переноса f.

Функция переноса f зависит только от верхнего символа магазина X и самого левого необработанного символа a входной це­почки. Поэтому f определяется на множестве (V  {  })  (T  {  }) :f(X, а) = ПЕРЕНОС, если Х <• а или Х  а ;

f(X, а) = СВЕРТКА, если Х •> а ;

f(S, ) = ДОПУСК;

f(X, а) = ОШИБКА в остальных случаях.

Построение функции свертки g.

Функция свертки g зависит от верхней части магазинной цепочки, включающей основу и еще один символ ниже нее. Необ­работанная часть входной цепочки на g не влияет, поэтому g задается только на (V  {  }): Функция свертки g определяется так, чтобы при свертке применялось самое длинное правило из списка альтернатив.

а) g(X,) = i, если B    R и имеет номер i и в R нет правила

вида A  X;

  1. g() = ОШИБКА во всех остальных случаях.

Цепочка  соответствует правой части правила исходной грамматики , а Х - пер­вый символ слева от основы, т.е. между этим символом и первым символом основы  должно выполняться отношение <• .

По матрице предшествования определяем множества символов, которые могут находится под каждой основой.

 (правая часть)

g()

X

(

E or T

1

E or T

1

(

T

2

T

2

or

T and P

3

(

T and P

3

T and P

3

or

P

4

(

P

4

P

4

or

i

5

and

i

5

not

i

5

(

i

5

i

5

or

( E )

6

and

( E )

6

not

( E )

6

(

( E )

6

( E )

6

or

not P

7

and

not P

7

not

not P

7

(

not P

7

not P

7

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