public virtual Rule IsolatedRuleRef(string x)
{
if (node.resolver is Grammar)
return null;
if (x.Equals(r.name))
return r;
IList<LabelElementPair> labels = null;
if (node.resolver is Rule)
{
r.GetElementLabelDefs().TryGetValue(x, out labels);
}
else if (node.resolver is Alternative)
{
((Alternative)node.resolver).labelDefs.TryGetValue(x, out labels);
}
if (labels != null)
{ // it's a label ref. is it a rule label?
LabelElementPair anyLabelDef = labels[0];
if (anyLabelDef.type == LabelType.RULE_LABEL)
{
return g.GetRule(anyLabelDef.element.Text);
}
}
if (node.resolver is Alternative)
{
IList<GrammarAST> value;
if (((Alternative)node.resolver).ruleRefs.TryGetValue(x, out value) && value != null)
{
return g.GetRule(x);
}
}
return null;
}
}