コード例 #1
0
ファイル: SyntacticItem.cs プロジェクト: shuruev/NutaParser
        /// <summary>
        /// Tries to parse a batch of similar syntactic items with specified delimiter.
        /// </summary>
        private bool ParseManyInternal(SyntacticState state, SyntacticItem part, SyntacticItem delimiter)
        {
            int innerIndex = state.InnerPosition;
            int outerIndex = state.OuterPosition;

            if (!part.Parse(state))
            {
                return(false);
            }

            while (true)
            {
                int lastInnerIndex = state.InnerPosition;
                int lastOuterIndex = state.OuterPosition;

                if (delimiter != null)
                {
                    if (!delimiter.Parse(state))
                    {
                        break;
                    }
                }

                if (!part.Parse(state))
                {
                    state.Reset(lastInnerIndex, lastOuterIndex);
                    break;
                }
            }

            state.AddBack(Key, innerIndex, outerIndex);
            return(true);
        }
コード例 #2
0
ファイル: SyntacticItem.cs プロジェクト: shuruev/NutaParser
        /// <summary>
        /// Tries to parse a consequent number of specified syntactic items.
        /// </summary>
        private bool ParseAllInternal(SyntacticState state, params SyntacticItem[] parts)
        {
            int innerIndex = state.InnerPosition;
            int outerIndex = state.OuterPosition;

            bool parsed = true;

            foreach (SyntacticItem part in parts)
            {
                if (!part.Parse(state))
                {
                    parsed = false;
                    break;
                }
            }

            if (!parsed)
            {
                state.Reset(innerIndex, outerIndex);
                return(false);
            }

            state.AddBack(Key, innerIndex, outerIndex);
            return(true);
        }