public object VisitRuleRightHandSide(KpLinguaParser.RuleRightHandSideContext context)
        {
            var rule = default(ConsumerRule);

            var ruleMultisetContexts   = context.ruleMultiset();
            var divisionContexts       = context.division();
            var dissolutionContext     = context.dissolution();
            var linkCreationContext    = context.linkCreation();
            var linkDestructionContext = context.linkDestruction();

            if (ruleMultisetContexts != null)
            {
                var rewritingRule = default(RewritingRule);

                if (ruleMultisetContexts.Any(rm => rm.targetedMultiset() != null))
                {
                    var rewriteCommunicationRule = new RewriteCommunicationRule();
                    var targetedMultisets        = ruleMultisetContexts.Where(rm => rm.targetedMultiset() != null).Select(rm => rm.targetedMultiset().Accept(this) as TargetedMultiset);
                    rewriteCommunicationRule.AddRhs(targetedMultisets.ToDictionary(tm => tm.Target));

                    rewritingRule = rewriteCommunicationRule;
                }
                else
                {
                    rewritingRule = new RewritingRule();
                }

                var multisets = ruleMultisetContexts.Where(rm => rm.nonEmptyMultiset() != null).Select(rm => rm.nonEmptyMultiset().Accept(this) as Multiset);
                foreach (var multiset in multisets)
                {
                    rewritingRule.AddRhs(multiset);
                }

                rule = rewritingRule;
            }
            else if (divisionContexts != null)
            {
                var divisionRule = new DivisionRule();

                foreach (var divisionContext in divisionContexts)
                {
                    divisionRule.Rhs.Add(divisionContext.Accept(this) as InstanceBlueprint);
                }

                rule = divisionRule;
            }
            else if (dissolutionContext != null)
            {
                rule = dissolutionContext.Accept(this) as DissolutionRule;
            }
            else if (linkCreationContext != null)
            {
            }
            else if (linkDestructionContext != null)
            {
            }

            return(rule);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="KpLinguaParser.ruleRightHandSide"/>.
 /// <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 VisitRuleRightHandSide([NotNull] KpLinguaParser.RuleRightHandSideContext context)
 {
     return(VisitChildren(context));
 }