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); }
/// <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)); }