void IRuleExpressionVisitor.VisitSequence(RuleExpression.Sequence sequence) { if (_currContext.invocationCount < sequence.Childs.Count) { _currContext = _currContext.ForChildExpression(sequence.Childs[_currContext.invocationCount]); } else if (_currContext.invocationCount == sequence.Childs.Count) { var childs = _currContext.GetChildNodes(); if (childs.Length != sequence.Childs.Count) { throw new InvalidOperationException(); } _currContext = _currContext.ForParentExpression(new ParserNode.Sequence( _currContext.rule, _currContext.expression, childs )); } else { throw new InvalidOperationException(); } }