private IReadOnlyList <MInstance> GetInstances(KpLinguaParser.LinkOperandContext context)
        {
            var instances = new List <MInstance>();

            var instanceContext   = context.instance();
            var identifierContext = context.Identifier();
            var wildcardContext   = context.linkWildcardOperand();

            if (instanceContext != null)
            {
                instances.Add(instanceContext.Accept(this) as MInstance);
            }

            if (identifierContext != null)
            {
                var instance     = default(MInstance);
                var instanceName = GetIdentifier(identifierContext);

                if (_instancesByName.TryGetValue(instanceName, out instance))
                {
                    instances.Add(instance);
                }
            }

            if (wildcardContext != null)
            {
                var typeName        = wildcardContext.Accept(this) as string;
                var instancesOfType = default(List <MInstance>);

                if (_instancesByType.TryGetValue(typeName, out instancesOfType))
                {
                    instances.AddRange(instancesOfType);
                }
            }

            return(instances);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="KpLinguaParser.linkOperand"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitLinkOperand([NotNull] KpLinguaParser.LinkOperandContext context)
 {
     return(VisitChildren(context));
 }
 public object VisitLinkOperand(KpLinguaParser.LinkOperandContext context)
 {
     throw new NotImplementedException();
 }