Example #1
0
        IMaybe <int> getTerm(Block block, int index)
        {
            index = ignoreReturns(index);

            if (ifExpressionParser.Scan(source, index))
            {
                block.Add(ifExpressionParser.Verb);
                return(ifExpressionParser.Position.Some());
            }

            while (prefixOperatorParser.Scan(source, index))
            {
                block.Add(prefixOperatorParser.Verb);
                index = prefixOperatorParser.Position;
            }

            index = ignoreReturns(index);

            if (valueParser.Scan(source, index))
            {
                block.Add(valueParser.Verb);
                index = valueParser.Position;
            }
            else
            {
                return(none <int>());
            }

            index = ignoreReturns(index);

            while (postfixOperatorParser.Scan(source, index))
            {
                block.Add(postfixOperatorParser.Verb);
                index = postfixOperatorParser.Position;
                index = ignoreReturns(index);
            }

            return(index.Some());
        }