Example #1
0
        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();
            }
        }