Анимация
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

while n = 0 or n = 1

do геad (n) do;

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

3.7. ргос fixed point = void :

begin char in; read (in);

bool dig: = false;

if in = " + " or in = " - "

then read (in)

if digit (in) then dig: = true;

read (in)

while digit (in)

do read (in) od;

if in = ". " then error else read(in)

if digit (in)

then dig : = true ; read (in)

while digit (in) do read (in) od;

if not dig then error fi

3.8. Процедуры digit и error предполагаются. ргос train = void : begin rollingstock in;

read (in); if in = engine then read (in) else error ti;

if in = engine then read(in)

if in = truck else error



white in = truck do read(in) od;

if in =/= guards van

then error

3.9. Единственно возможным является массив строк.

3.10. Для обозначения этих двух видов можно использовать логическую переменную. Преимущество - исключаются переполнения от рекурсии, недостаток - всякий раз, когда действия компилятора для этих двух видов отличаются, переменную необходимо проверять.

Глава 4

4.1. а) Детерминированный, так как с обозначает середину строки, а вторую половину можно согласовать с первой с помощью стека.

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

в) Детерминированный по причинам, аналогичным изложенным в п. (а).

г) Детерминированный {см. п. (в)).

д) Недетерминированный, поскольку нельзя узнать, снимать ли «0» из стека для каждой считанной «1» или только для каждой второй считанной «1».

4.2. а) Воспользуйтесь леммой подкачки и предположите, что язык контекстно-свободный. Для достаточно большого k строку

akbkck

можно записать в виде

uvwxy

где \vwx\<k, \vx\ # 0 и для i>0 строка

uvwxy

также находится в языке. Допустим, что i=0, тогда uwy

находится в языке. Но uwy образуется из uvwxy путем исключения v и х, и так как \vwx\<k, v и х вместе не могут содержать множества а, b и с (т. е. vwx не может простираться по kb). Поэтому uwy должна все же содержать ka или kc, но не может содержать ka. b и с, поскольку \vx\# 0. Поэтому она не может включать равное число a, b и с и не находится в языке. Таким образом, возникает противоречие, и язык оказывается не контекстно-свободным.

б) Воспользуйтесь леммой подкачки и предположите, что язык контекстно-свободный Для достаточно большого простого числа k p = ak

можно выразить как uvwxy где \uwx\ <k, \vx\# 0 и для i>0

uvwxy

находится в языке. Такие строки имеют длину р + где р - длина uwy, a / - длина vx, которая не является нулем. Не все эти длины представляют собой простые числа. Например,

P + Pl

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

4.3. ргос Е-void : begin t;



end;

ргос Т= void: begin F;

ргос F= void: begin if in = "(" then read (in); E; if in =

then read (in) else error и elif identifier (in) then read (in) else error fi end;

ргос U = void : begin if in = " x "

then read (in); F U

end;

ргос G = void : begin if in = + then read (in); Т; G

4.4. а) Это следует из 2. . .

б) Любая s-грамматика удовлетворяет 1 и 2.

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

4.5. S есть начальный символ в каждом случае:

S->OS11

S->OS

S->1T

S->e

T->0S

T->e

3. S->1T S->0U T->0X

U->1X

T->1UU

U->0TT

X->S X->e

4.6. Правила для Е и Т не позволяют грамматике стать LL( 1)-грамматикой

Е->ТХ Х-> + ТХ Х->Е T->FY Y->xFY

4.7. Нет, так как х является направляющим символом в этих двух правилах для S.

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

4.9. См. табл. У.1. 4.10.См. табл. У.2.



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