/** $x.y, x can be surrounding rule, token/rule/label ref. y is visible
* attr in that dictionary. Can't see args on rule refs.
*/
public virtual Attribute ResolveToAttribute(string x, string y, ActionAST node)
{
if (tokenRefs.ContainsKey(x) && tokenRefs[x] != null)
{
// token ref in this alt?
return(rule.GetPredefinedScope(LabelType.TOKEN_LABEL).Get(y));
}
if (ruleRefs.ContainsKey(x) && ruleRefs[x] != null)
{
// rule ref in this alt?
// look up rule, ask it to resolve y (must be retval or predefined)
return(rule.g.GetRule(x).ResolveRetvalOrProperty(y));
}
LabelElementPair anyLabelDef = GetAnyLabelDef(x);
if (anyLabelDef != null && anyLabelDef.type == LabelType.RULE_LABEL)
{
return(rule.g.GetRule(anyLabelDef.element.Text).ResolveRetvalOrProperty(y));
}
else if (anyLabelDef != null)
{
AttributeDict scope = rule.GetPredefinedScope(anyLabelDef.type);
if (scope == null)
{
return(null);
}
return(scope.Get(y));
}
return(null);
}