Хелпикс

Главная

Контакты

Случайная статья





Инструкция switch. Синтаксис. Семантика



12.11 Инструкция switch

Синтаксис

ИнструкцияSwitch :

switch ( Выражение ) БлокCase

БлокCase :

{ ВетвиCaseопц }
{ ВетвиCaseопц ВетвьПоУмолчанию ВетвиCaseопц }

ВетвиCase :

ВетвьCase
ВетвиCase ВетвьCase

ВетвьCase :

case Выражение : СписокИнструкцийопц

ВетвьПоУмолчанию :

default : СписокИнструкцийопц

Семантика

Значение нетерминала ИнструкцияSwitch : switch ( Выражение ) БлокCase вычисляется по следующей схеме:

1. Вычислить значение Выражения.

2. Вызвать ПолучитьЗначение(Результат(1)).

3. Вычислить значение БлокаCase, передав Результат(2) в качестве параметра.

4. Если Результат(3). тип равен break и Результат(2). цель принадлежит текущему набору меток - вернуть (normal, Результат(3).значение, empty).

5. Вернуть Результат(3).

Значение нетерминала БлокCase : { ВетвиCaseопц } с учётом входного параметра input вычисляется следующим образом:

1. Пусть V = empty.
2. Пусть A равно списку ВетвейCase в порядке исходного текста.
3. Пусть C равно следующей ВетвиCase в A. Если такой ВетвиCase не нашлось - переход на шаг 16.
4. Вычислить значение C.
5. Если input не равен Результату(4) (согласно определению оператора !==) - переход на шаг 3.
6. Если у C нет СпискаИнструкций - переход на шаг 10.
7. Вычислить значение СпискаИнструкций C и приравнять R результат.
8. Если R - неожиданное завершение, вернуть R.
9. Пусть V = R.значение.
10. Пусть C - следующая ВетвиCase из A. Если такой ВетвиCase не нашлось - переход на шаг 16.
11. Если у C нет СпискаИнструкций - переход на шаг 10.
12. Вычислить значение СпискаИнструкций C, получив результат R.
13. Если R.значение не равно empty, приравнять V = R.значение.
14. Если R - неожиданное завершение, вернуть (R.тип, V, R.цель).
15. Переход на шаг 10.
16. Вернуть (normal, V, empty).

Значение нетерминала БлокCase : { ВетвиCaseопц ВетвьПоУмолчанию ВетвиCaseопц } с учётом входного параметра input вычисляется следующим образом:

1. Пусть V = empty.
2. Пусть A - список ВетвейCase в первом элементе ВетвиCase в порядке исходного текста.
3. Пусть C - следующая ВетвьCase в A. Если такой ВетвиCase не нашлось - переход на шаг 11.
4. Вычислить значение C.
5. Если input не равен Результату(4) (согласно определению оператора !==) - переход на шаг 3.
6. Если у C нет СпискаИнструкций - переход на шаг 20.
7. Вычислить значение СпискаИнструкций C, получив результат R.
8. Если R - неожиданное завершение, вернуть R.
9. Пусть V = R.значение.
10. Переход на шаг 20.
11. Пусть B - список ВетвейCase во втором элементе ВетвиCase в порядке исходного текста.
12. Пусть C - следующая ВетвьCase в B. Если такой ВетвиCase не нашлось - переход на шаг 26.
13. Вычислить значение C.
14. Если input не равен Результату(13) (согласно определению оператора !==) - переход на шаг 12.
15. Если у C нет СпискаИнструкций - переход на шаг 31.
16. Вычислить значение СпискаИнструкций C, получив результат R.
17. Если R - неожиданное завершение, вернуть R.
18. Пусть V = R.значение.
19. Переход на шаг 31.
20. Пусть C - следующая ВетвьCase в A. Если такой ВетвиCase не нашлось - переход на шаг 26.
21. Если у C нет СпискаИнструкций - переход на шаг 20.
22. Вычислить значение СпискаИнструкций C, получив результат R.
23. Если R.значение не равно пусто, приравнять V = R.значение.
24. Если R - неожиданное завершение, вернуть (R.тип, V, R.цель).
25. Переход на шаг 20.
26. Если у ВетвиПоУмолчанию нет СпискаИнструкций - переход на шаг 30.
27. Вычислить значение СпискаИнструкций ВетвиПоУмолчанию, получив результат R.
28. Если R.значение не равно пусто, приравнять V = R.значение.
29. Если R - неожиданное завершение, вернуть (R.тип, V, R.цель).
30. Пусть B равно списку ВетвейCase во втором элементе ВетвиCase в порядке исходного текста.
31. Пусть C - следующая ВетвьCase в B. Если такой ВетвиCase не нашлось - переход на шаг 37.
32. Если у C нет СпискаИнструкций - переход на шаг 31.
33. Вычислить значение СпискаИнструкций C, получив результат R.
34. Если R.значение не равно пусто, приравнять V = R.значение.
35. Если R - неожиданное завершение, вернуть (R.тип, V, R.цель).
36. Переход на шаг 31.
37. Вернуть (normal, V, empty).

Значение нетерминала ВетвьCase : case Выражение : СписокИнструкцийопц вычисляется по следующей схеме:

1. Вычислить значение Выражения.

2. Вызвать ПолучитьЗначение(Результат(1)).

3. Вернуть Результат(2).

ЗАМЕЧАНИЕ
При получении значения ВетвиCase соответствующий ей СписокИнструкций не выполняется. Просто вычисляется и возвращается значение Выражения, которое используется БлокомCase для выбора СпискаИнструкций, который следует начать исполнять
.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.