Esempio n. 1
0
        private static void Main()
        {
            Parser <char> aParser = Parse.Char('A');

            Console.WriteLine(aParser("ABC"));
            Console.WriteLine(aParser("ZBC"));
            Console.WriteLine(aParser(string.Empty));

            Parser <char> bParser     = Parse.Char('B');
            var           aAndBParser = aParser.AndThen(bParser);

            Console.WriteLine(aAndBParser("ABC"));
            Console.WriteLine(aAndBParser("ZBC"));
            Console.WriteLine(aAndBParser("AZC"));

            var aOrBParser = aParser.OrElse(bParser);

            Console.WriteLine(aOrBParser("AZZ"));
            Console.WriteLine(aOrBParser("BZZ"));
            Console.WriteLine(aOrBParser("CZZ"));

            Parser <char> cParser  = Parse.Char('C');
            var           aAndBOrC = aParser.AndThen(bParser.OrElse(cParser));

            Console.WriteLine(aAndBOrC("ABZ"));
            Console.WriteLine(aAndBOrC("ACZ"));
            Console.WriteLine(aAndBOrC("QBZ"));
            Console.WriteLine(aAndBOrC("AQZ"));

            var parseLowercase = Parse.AnyOf("abcdefghijklmnopqrstuvwxyz");

            Console.WriteLine(parseLowercase("aBC"));
            Console.WriteLine(parseLowercase("ABC"));

            var parseDigit       = Parse.AnyOf("0123456789");
            var parseThreeDigits = parseDigit.AndThen(parseDigit).AndThen(parseDigit);

            Console.WriteLine(parseThreeDigits("135Z"));

            var threeDigitsStringParser = parseThreeDigits.Select(CharTupleToString);

            Console.WriteLine(threeDigitsStringParser("135Z"));

            var threeDigitsIntParser = threeDigitsStringParser.Select(int.Parse);

            Console.WriteLine(threeDigitsIntParser("135Z"));

            var parseThenAdd = Parse.Lift2((x, y) => x + y, threeDigitsIntParser, threeDigitsIntParser);

            Console.WriteLine(parseThenAdd("100456"));

            string CharTupleToString(((char c1, char c2)t1, char c3) p)
            {
                return(new String(new[] { p.t1.c1, p.t1.c2, p.c3 }));
            }
        }