Что такое invokingState в реализациях класса RuleContext? - PullRequest
0 голосов
/ 04 июня 2018

Я вижу индексы правил в JavaParser.java, но есть другое целочисленное значение, то есть вызывающее состояние.Связано ли это вызывающее состояние с getStartToken или чем оно отличается от индексов правил?

1 Ответ

0 голосов
/ 05 июня 2018

Состояние вызова - это состояние ATN, которое использовалось для достижения правила, которое представлено этим контекстом правила.Комментарий в исходном коде объясняет это довольно хорошо:

/ ** В каком состоянии вызывается правило, связанное с этим контекстом?* «Адрес возврата» - followState объекта invokingState * Если parent равен null, это значение должно быть равно -1, этот объект контекста представляет * правило запуска.* /

Вот пример:

enter image description here

Это ATN для правила start: e EOF;, где eпредставляет собой подчиненное правило.Состояние 4 - это состояние вызова для e, а 5 - это состояние возврата (или отслеживания).Помните, что правило может быть вызвано из многих мест, поэтому вы не можете использовать переходы из конечного состояния правила для возврата к правилу вызова (отсюда и необходимость в followState члене).Это возвращаемое состояние сохраняется в переходе правила , который выходит из состояния вызова (в данном примере состояния 4) в начальное состояние правила e.

...