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

Вариант № 9

    1. Написать грамматику для цикла for языка Pascal.

<оператор_цикла_с_параметром> ::= for <условие> do <блок_опер> ;

<условие>:=<идентификатор> := < арифм_выр> <направл_измен_перемен_цикла> < арифм_выр>

<направл_измен_перемен_цикла> ::= to | downto

<арифм_выр>::= <арифм_выр> + <слагаемое>

<арифм_выр>::= <слагаемое>

<арифм_выр>::= <арифм_выр> - <слагаемое>

<слагаемое>::= <слагаемое> * <множитель>

<слагаемое>::= <множитель>

<слагаемое>::= <слагаемое> / <множитель>

<множитель>::= <идентификатор>

<множитель>::= <число>

<множитель>::= ( <арифм_выр> )

<блок_опер>::= <идентификатор> := <арифм_выр>

<блок_опер>::= begin <операторы> end

<блок_опер>::=

<операторы>::= <блок_опер> ; <операторы>

<операторы>::= <блок_опер>

<идентификатор>::= <буква> { <буква> | <цифра> }

<буква>::=A|B|C…Y|Z|a|b|c…z|

<цифра>::= 0|1|2|3|4|5|6|7|8|9

<число>::= [ +|-] <число_без_знака>

<число_без_знака>::= <цифра> { <цифра> }

1.2.Удалить правила с одинаковой правой частью.R={S->AaC, S->C, A->c, C->Bb, B->c}

Алгоритм:

R’={ S->AaC, S->caC, S->C, C->Bb, B->c }

Т.о. исключили правую рекурсию, но появился бесполезный (непроизводящий) символ А.

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

N0p ={B} N1p ={B, C} N2p ={B, C, S} N p ={B, C, S}

R’={ S–>caC, S–>C, C–>Bb, B–>c}

  1. Определить преобразователь, осуществляющий перевод целых и вещественных чисел с

фиксированной точкой со знаком или без знака в цепочки из нулей и единиц по принципу: целому

соответствует 0, действительному – 1.

S + E, S - E, Sch A, Ech A, Ach A, A . C, A , B,A#, B + E, B - E, B ch A, Cch D, Dch D, D , B, D#

Управляющая таблица: заключительные состояния:A, D

+

-

ch

.

,

#

Eps

S (q0)

E

E

A

E (q1)

A

A (q2)

A

C

B

A

B (q3)

E

E

A

C (q4)

D

D (q5)

D

B

D

Функции перехода:

(q0, +) {(q1, )}

(q0, – ) {(q1, )}

(q0, ch) {(q2, )}

(q1, ch) {(q2, )}

(q2, ch) {(q2, )}

(q2, . ) {(q4, )}

(q2, , ) {(q3, 0)}

(q2, # ) {(q2, 0)}

(q3,+) {(q1, )}

(q3, – ) {(q1, )}

(q3, ch) {(q2, )}

(q4, ch) {(q5, )}

(q5, ch) {(q5, )}

(q5, , ) {(q3, 1)}

(q5, #) {(q5, 1)}

4. R={S->begin D ; P end, D->d, D->D ; d, P->p, P->P ; P}

Требуется проверить, является ли это грамматикой прямого предшествования.

КС-грамматика G = < T, N, S, R > называется грамматикой предшествования, если она приведенная, не содержит правил с пустой правой частью и для любой пары символов из V выполняется не более одного отношения простого предшествования.

КС-грамматика, в которой нет пра­вил с одинаковой правой частью, называется обратимой.

Обратимая грамматика предшествования называется грамматикой простого предшествования.

S->begin D ; P end (1)

D->d (2)

D->D ; d (3)

P->p (4)

P->P ; P (5)

Алгоритм построения матрицы предшествования:

Существуют отношения 4 видов (одновременное сворачивание, раньше/позже или вообще отсутствие отношения).Для построения матрицы отношений действуем по этим группам:

  • Нахождение всех отношений одновременного сворачивания

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