Antlr4.Codegen.ActionTranslator.Attr C# (CSharp) Method

Attr() public method

public Attr ( string expr, Antlr.Runtime.IToken x ) : void
expr string
x Antlr.Runtime.IToken
return void
        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
            }
        }