public void Parse(ExpressionParserHelper parseHelper) { if (parseHelper.At(BRACKETS_OPEN)) { var token = parseHelper.Current; parseHelper.Expect(BRACKETS_OPEN); var brackets = new Brackets(_functionArgument, _arguments, _paramsArgument) { Token = token }; parseHelper.Push(brackets); parseHelper.ParseExpression(); } else { Brackets brackets; if (!parseHelper.PreviousWas(BRACKETS_OPEN)) { parseHelper.Reduce(TYPE); var nested = parseHelper.Pop(); parseHelper.Expect(nameof(BracketsParser), SIGNS); brackets = ((Brackets)parseHelper.Top); brackets.FillNext(nested); } else { brackets = ((Brackets)parseHelper.Top); } if (parseHelper.At(BRACKETS_CLOSE) && brackets.PartOfFunction) { FunctionParser.FillArguments(parseHelper); } } }