Непосредственно в синтаксическом дереве (сид) мы конечно находим узлы соответствующие каждому оператору написанному программистом.
Введение отношения back, указывающего на подчиняющий оператор кажется по крайней мере понятным.
Но то что замыкание back дает поток управления кажется немного удивительным!;)
Впрочем основное наводящее рассуждение состояло в том, что:
- для ";"-цепи операторов, следующий за последним есть следующий за оператором группировки ("{");
- для оператора подчиненного If (на стрелке then) следующий для выполнения есть следующий для if.
Именно это тщательное обсуждение (и задание!) того кто есть следующий на выполнение и задает рекурсивное определение следующего!
А именно:
пусть дан S-узел У1.
- если он не последний в L-цепи, то его следующий-для-выполнения (СдВ) указывается стрелкой ";".
- если он последний в L-цепи, то его следующий-для-выполнения есть,
-- в случае если L-цепь подчинена "{"-узлу - СдВ этого узла, т.е. СдВ(У1+back);
-- в случае если L-цепь подчинена t-a-узлу - узел Stop, т.е. СдВ(У1+back).
- если У1 подчинён if-узлу - СдВ этого узла, т.е. СдВ(У1+back).
других варантов встроенности S-узла в программу нет.