public override Polynom VisitEquality(PolynomialParser.EqualityContext context) { var monomsBeforeEquality = context.children.TakeWhile(x => x.GetText() != Equal) .Select(Visit) .SelectMany(x => x.Monoms) .ToList(); var monomsAfterEquality = context.children.SkipWhile(x => x.GetText() != Equal) .Skip(1) .Select(Visit) .SelectMany(x => x.Monoms) .ToList(); foreach (var monom in monomsAfterEquality) { monom.Coefficient *= -1; } monomsBeforeEquality.AddRange(monomsAfterEquality); return(ConstructCanonicalPolynom(monomsBeforeEquality, true)); }
/// <summary> /// Exit a parse tree produced by the <c>equality</c> /// labeled alternative in <see cref="PolynomialParser.canonical"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitEquality([NotNull] PolynomialParser.EqualityContext context) { }
/// <summary> /// Visit a parse tree produced by the <c>equality</c> /// labeled alternative in <see cref="PolynomialParser.canonical"/>. /// <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 VisitEquality([NotNull] PolynomialParser.EqualityContext context) { return(VisitChildren(context)); }