private RuleRelations ExtractRuleRelations(INamedTypeSymbol recognizerType)
        {
            string serializedATN = GetSerializedATN(recognizerType);
            if (serializedATN == null)
                return null;

            ATN atn = new ATNDeserializer().Deserialize(serializedATN.ToCharArray());
            RuleRelations relations = new RuleRelations(atn.ruleToStartState.Length);
            foreach (ATNState state in atn.states)
            {
                if (!state.epsilonOnlyTransitions)
                    continue;

                foreach (Transition transition in state.Transitions)
                {
                    RuleTransition ruleTransition = transition as RuleTransition;
                    if (ruleTransition == null)
                        continue;

                    relations.AddRuleInvocation(state.ruleIndex, ruleTransition.target.ruleIndex);
                }
            }

            return relations;
        }