public virtual void Attr(string expr, IToken x)
{
gen.g.tool.Log("action-translator", "attr " + x);
Attribute a = node.resolver.ResolveToAttribute(x.Text, node);
if (a != null)
{
switch (a.dict.type)
{
case AttributeDict.DictType.ARG:
chunks.Add(new ArgRef(nodeContext, x.Text));
break;
case AttributeDict.DictType.RET:
chunks.Add(new RetValueRef(rf.ruleCtx, x.Text));
break;
case AttributeDict.DictType.LOCAL:
chunks.Add(new LocalRef(nodeContext, x.Text));
break;
case AttributeDict.DictType.PREDEFINED_RULE:
chunks.Add(GetRulePropertyRef(x));
break;
}
}
if (node.resolver.ResolvesToToken(x.Text, node))
{
chunks.Add(new TokenRef(nodeContext, GetTokenLabel(x.Text))); // $label
return;
}
if (node.resolver.ResolvesToLabel(x.Text, node))
{
chunks.Add(new LabelRef(nodeContext, GetTokenLabel(x.Text))); // $x for x=ID etc...
return;
}
if (node.resolver.ResolvesToListLabel(x.Text, node))
{
chunks.Add(new ListLabelRef(nodeContext, x.Text)); // $ids for ids+=ID etc...
return;
}
Rule r = factory.GetGrammar().GetRule(x.Text);
if (r != null)
{
chunks.Add(new LabelRef(nodeContext, GetRuleLabel(x.Text))); // $r for r rule ref
}
}