Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 [ 63 ] 64 65 66 67 68 69

Глава 5

(S - начальный символ)

начальный символ)

5.1. а) S->aYc Y->Ybb Y->b

б) Е->Е+Т Е->Т Т ->TxF Т -> F F->X

F->(E)(E -

в) P->D = S P->S D->*S D->x

S->D (Р - начальный символ)

5.2. а) Признак LR(1) отсутствует, так как грамматика неоднозначна. Ее можно заменить на E->E + i

E->i

б) Это - не LR(1)-грамматика, так как язык нельзя разобрать детерминированно. Соответствующей LR(1)-грамматики не существует.

в) Построив таблицу разбора, можно показать, что грамматика обладает признаком LR(0), а поэтому и признаком LR(1).

5.5. См. табл. У.З. Это- SLR(l)-грамматика.

5.4. Грамматика не обладает признаком LR(1), так как при чтении d с semi в качестве предварительно просматриваемого символа неизвестно, нужно ли приводить к DEC-LIST или нет. Эквивалентной SLR(l)-грамматикой является следующая:

PROGRAM->begin d semi X end X->d semi X Y->semi s Y

Y->E См. табл. У.4.

5.5. См. табл. У.5.

5.6. Грамматика не обладает признаком LR(1), так как язык нельзя разобрать детерминированно. Невозможно, например, на основании проделанного анализа и одного последующего символа определить, требуется ли 01 приводить к S.

5.7. а) Нет. б) Нет.

5.8. Это - не LR(l)-грамматика, так как при чтении «1» с последующим символом «:» 1(1)-анализатор не знает, выполнять приведение с помощью правила (4) или нет. Этой проблемы можно избежать, если во время лексического анализа заменить последовательность «: = » одним символом.

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

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

5.11. Каждый регулярный язык соответствует детерминированному конечному автомат), из которого можно получить lr(1)-таблицу разбора.

Таблица У.1

terminals

jump

accept

stack

return

error

1 {begin}

false

false

false

true

2 {begin}

true

false

fake

true



true

false

fake

true

{semi}

true

false

fake

true

{d,s}

false

true

fake

true

{end}

true

false

true

true

false

false

fake

fake

false

false

fake

fake

true

false

fake

true

{semi}

true

false

fake

true

{d,s}

false

false

fake

true

true

false

fake

true

{end, semi}

false

false

fake

true

{end}

false

false

false

false

{semi}

false

false

false

true

{end}

false

false

true

true

{semi}

true

false

false

true

true

false

fake

true

{end, semi}

false

false

false

true

Табл ица У.2

terminals

jump

accept

stack

return

error

i(,x,y}

false

false

fake

true

{(,x,y}

false

true

fake

true

{+, ,)}

false

false

fake

true

{(,x,y}

false

false

fake

true

{(,x,y}

false

true

fake

true

{x, + !,)}

false

fake

fake

true

{ + }

false

fake

fake

fake

false

fake

fake

true

true

fake

fake

true

false

true

fake

true

{+,!,)}

false

fake

fake

true

{ .)}

false

fake

true

true

false

fake

fake

fake

{ + , ,)}

false

fake

fake

true

true

fake

fake

true

{(,x,y}

false

true

fake

true

{x, + , ,)}

false

fake

fake

true

{+,,)}

false

fake

true

true

false

fake

fake

fake

false

fake

fake

fake

false

fake

fake

true

true

fake

fake

true

{(,x,y]

fake

true

fake

true

{)} .

true

fake

true

tree

true

fake

true

true

true

fake

true

true



Таблица У.3

6 7 8 9 10 11 12 13 14

PROGRAM X Y begin semi d s end HALT S2

S7 S10 S7 SI0 S13

R2 R5

R5 R4

S E

Т F ( )

х х

\

HALT S2

S3 S4 S5

S11 S3

S4 S5

R7/8

R7/8

R7/8

R7/8

S8 S4

S10 S5

Таблица У.5

F ITEM ,

t \

HALT S3

S6 S7

7 R2

8 S9

S8 S10

R3 R3

9 R4 R4 10 I R5 R5

Глава 6

6.1. После идентификатора следует печать. Однако каждый знак операции следует помещать в стек и удалять из него и печатать после TERM или FACT

6.2. Е->Е+Т

Е-><А1>Е - Т

6.3. Нет.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 [ 63 ] 64 65 66 67 68 69