public void Parse(ExpressionParserHelper parseHelper) { Token token = parseHelper.Current; if (token.Contents.Equals(AdditionalToken.Token)) { if (!parseHelper.AnyOnStack(ParsedTypes)) { throw ParseException.ExpectedToken(DistinctToken.Token, token.Contents, $"TernaryExpressionParser<{typeof(T).Name}>").Decorate(token); } parseHelper.Expect(AdditionalToken.Token); parseHelper.Reduce(typeof(T)); return; } if (ShouldReduce(parseHelper)) { parseHelper.Reduce(typeof(T)); } Expression first = parseHelper.Pop(); parseHelper.Expect(DistinctToken.Token); TernaryExpression subResult = Create(first); subResult.Token = token; subResult.FirstSign = DistinctToken.Token; subResult.SecondSign = AdditionalToken.Token; parseHelper.Push(subResult); parseHelper.ParseExpression(); }