Состояние вызова - это состояние ATN, которое использовалось для достижения правила, которое представлено этим контекстом правила.Комментарий в исходном коде объясняет это довольно хорошо:
/ ** В каком состоянии вызывается правило, связанное с этим контекстом?* «Адрес возврата» - followState объекта invokingState * Если parent равен null, это значение должно быть равно -1, этот объект контекста представляет * правило запуска.* /
Вот пример:
Это ATN для правила start: e EOF;
, где e
представляет собой подчиненное правило.Состояние 4 - это состояние вызова для e
, а 5 - это состояние возврата (или отслеживания).Помните, что правило может быть вызвано из многих мест, поэтому вы не можете использовать переходы из конечного состояния правила для возврата к правилу вызова (отсюда и необходимость в followState
члене).Это возвращаемое состояние сохраняется в переходе правила , который выходит из состояния вызова (в данном примере состояния 4) в начальное состояние правила e
.