Множества выбора. Процедурная реализация рекурсивного спуска, страница 2

return TRUE;        // применяем это правило, т. е. не делаем ничего и возвращаемся

return FALSE;                // очередной терминал не входит ни в одно множество выбора, поэтому останов по ошибке

}


bool V() {

switch (CurrentLexem) {                             // здесь использована другая техника проверки очередного терминала

case ‘(‘ :                                                      // в этом случае должно применяться правило V : ( S )

CurrentLexem = GetLexem();    // прочитаем следующий терминал

if ( S() == FALSE )                    // вызовем S(), и если она обнаружит ошибку,

return FALSE;                    // остановимся

if ( CurrentLexem != ‘)’ )           // если ошибки не было, то очередным терминалом должна быть скобка )

return FALSE;                    // если нет – остановимся

// если да, действуем так же, как в случае правил V : i и V : c

case ‘i’ :                                                      // это правило V : i

case ‘c’ :                                                     // это правило V : c

CurrentLexem = GetLexem();    // прочитаем следующий терминал

break;                                         // и на выход

default :                                                       // очередной терминал не входит ни в одно множество выбора

return FALSE;                            // остановимся по ошибке

}

return TRUE;                                              // возвратимся для продолжения разбора

}


( x + y ) * z u

Такт

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

Вход

(

(

(

(

x

x

x

+

+

+

+

+

y

y

y

)

)

)

)

)

)

)

*

*

z

z

u

u

u

u

u

Функция

Z

S

U

V

S

U

V

U

W

U

S

R

S

U

V

U

W

U

S

R

S

V

U

W

U

V

U

W

U

S

Z

Стек

Z

S

U

V

S

U

S

U

S

V

S

R

S

U

S

U

S

R

S

V

U

S

U

W

U

W

U

S

Z

Z

S

U

V

S

V

S

V

U

V

S

R

S

R

S

R

S

V

U

S

Z

S

U

W

U

S

Z

Z

S

U

V

U

V

U

S

U

V

S

R

S

R

S

V

U

S

Z

Z

S

U

S

Z

Z

S

U

S

U

S

Z

S

U

V

S

V

S

V

U

S

Z

Z

S

Z

Z

S

Z

S

Z

Z

S

U

V

U

V

U

S

Z

Z

Z

Z

Z

S

U

S

U

S

Z

Z

S

Z

S

Z

Z

Z