Beispiel #1
0
        private static void ParseSimpleThingsThatShouldSucceed()
        {
            var p = new MyParserImpl();

            Program.PrintResult(p.Run(p.Char('c'), "c"));
            Program.PrintResult(p.Run(p.String("abc"), "abcdefg"));
            Program.PrintResult(p.Run(p.Slice(p.String("abc")), "abcdefg"));
            Program.PrintResult(p.Run(p.Regex(new Regex(@"\dabc\d")), "5abc6"));
            Program.PrintResult(p.Run(p.Double(), "12.4"));
            Program.PrintResult(p.Run(p.Eof(), ""));
            Program.PrintResult(p.Run(p.Whitespace(), "  "));
            Program.PrintResult(p.Run(p.SkipL(p.Whitespace(), () => p.String("abc")), "  abc"));
            Program.PrintResult(p.Run(p.SkipR(p.String("abc"), p.Whitespace), "abc  "));
            Program.PrintResult(p.Run(p.Surround(p.Char('['), p.Char(']'), () => p.String("abc")), "[abc]"));
            Program.PrintResult(p.Run(p.Root(p.String("abc")), "abc"));
            Program.PrintResult(p.Run(p.Quoted(), "\"abc\""));
            Program.PrintResult(p.Run(p.String("mouse ").Bind(s => p.NotFollowedBy(p.String("cat")).BindIgnoringLeft(p.Succeed(s))), "mouse dog"));
            Program.PrintResult(p.Run(p.String("mouse ").Bind(s => p.NotFollowedBy(p.String("cat")).BindIgnoringLeft(p.Succeed(s))), "mouse cat"));
            Program.PrintResult(p.Run(p.NoneOf("abc"), "x"));
            Program.PrintResult(p.Run(p.NoneOf("abc"), "b"));

            var intAndOptionalCommaParser = p.Int().SkipR(() => p.OptionMaybe(p.Token(p.String(","))));

            Program.PrintResult(p.Run(intAndOptionalCommaParser, "10, 11, 12"));
            Program.PrintResult(p.Run(intAndOptionalCommaParser, "10"));
        }
Beispiel #2
0
        private static void ParseJsonObjectWithANestedObject()
        {
            var p          = new MyParserImpl();
            var jsonObject = JsonObject(p);

            Program.PrintResult(p.Run(jsonObject, "{\"property1\":{\"age\":12}}"));
        }
Beispiel #3
0
        private static void ParseJsonRoot()
        {
            var p        = new MyParserImpl();
            var jsonRoot = JsonRoot(p);

            Program.PrintResult(p.Run(jsonRoot, @"
{
    ""property1"": {
        ""age"": 12
    },
    ""property2"": {
        ""name"": ""Henry""
    }
}
                "));

            Program.PrintResult(p.Run(jsonRoot, @"
{
    ""property1"": {
        ""age"": 14
    },
    ""property2"": {
        ""name"": ""Sally""
    },
    ""property3"": {
        ""numbers"": [
            1,
            2,
            3
        ]
    }
}
                "));
        }
Beispiel #4
0
        private static void ParseJsonKeyValueWithObjectValue()
        {
            var p            = new MyParserImpl();
            var jsonKeyValue = JsonKeyValue(p);

            Program.PrintResult(p.Run(jsonKeyValue, "\"property1\":{\"name\":null,\"age\":12}"));
        }
Beispiel #5
0
        private static void ParseJsonObjectWithAnArrayProperty()
        {
            var p          = new MyParserImpl();
            var jsonObject = JsonObject(p);

            Program.PrintResult(p.Run(jsonObject, "{\"property1\":[1,2,3]}"));
        }
Beispiel #6
0
        private static void ParseJsonArray()
        {
            var p         = new MyParserImpl();
            var jsonArray = JsonArray(p);

            Program.PrintResult(p.Run(jsonArray, "[1,true,null,\"fred\"]"));
        }
Beispiel #7
0
        private static void ParseJsonKeyValueWithArrayValue()
        {
            var p            = new MyParserImpl();
            var jsonKeyValue = JsonKeyValue(p);

            Program.PrintResult(p.Run(jsonKeyValue, "\"property1\":[1,2,3]"));
        }
Beispiel #8
0
        private static void ParseJsonObjectWithSimpleValues()
        {
            var p          = new MyParserImpl();
            var jsonObject = JsonObject(p);

            Program.PrintResult(p.Run(jsonObject, "{\"property1\":1,\"property2\":null,\"property3\":12.4,\"property4\":true}"));
            Program.PrintResult(p.Run(jsonObject, "{\"property1\":1,\"property2\":null,\"property3\":true,\"property4\":12.4}"));
        }
Beispiel #9
0
        private static void ParseCsvDynamically(string input)
        {
            var p          = new MyParserImpl();
            var rowsParser = HeaderParser(p).Bind(rowParser => rowParser.SepEndBy(p.Eol()));
            var result     = p.Run(rowsParser, input);

            Program.PrintResult(result, rows => string.Join(Environment.NewLine, rows.Select(row => row.ToString())));
        }
Beispiel #10
0
        private static void ParseSimpleThingsThatShouldFail()
        {
            var p = new MyParserImpl();

            Program.PrintResult(p.Run(p.Char('c'), "d"));
            Program.PrintResult(p.Run(p.String("abc"), "defg"));
            Program.PrintResult(p.Run(p.Eof(), "abc"));
            Program.PrintResult(p.Run(p.Root(p.String("abc")), "abcblah"));
        }
Beispiel #11
0
        private static void ParseJsonLiteral()
        {
            var p           = new MyParserImpl();
            var jsonLiteral = JsonLiteral(p);

            Program.PrintResult(p.Run(jsonLiteral, "null"));
            Program.PrintResult(p.Run(jsonLiteral, "12.4"));
            Program.PrintResult(p.Run(jsonLiteral, "\"fred\""));
            Program.PrintResult(p.Run(jsonLiteral, "true"));
            Program.PrintResult(p.Run(jsonLiteral, "false"));
            Program.PrintResult(p.Run(jsonLiteral, "bogus"));
        }
Beispiel #12
0
        private static void ParseContextSensitive()
        {
            var p      = new MyParserImpl();
            var parser = p.Double().Bind(n => p.ListOfN(Convert.ToInt32(n), p.Char('a')));
            Func <IEnumerable <char>, string> f = xs => string.Join("", xs);

            Program.PrintResult(p.Run(parser, "0"), f);
            Program.PrintResult(p.Run(parser, "1a"), f);
            Program.PrintResult(p.Run(parser, "2aa"), f);
            Program.PrintResult(p.Run(parser, "3aaa"), f);
            Program.PrintResult(p.Run(parser, "7aaaaaaa"), f);
        }
Beispiel #13
0
        private static void ParseJsonKeyValueWithSimpleValues()
        {
            var p            = new MyParserImpl();
            var jsonKeyValue = JsonKeyValue(p);

            Program.PrintResult(p.Run(jsonKeyValue, "\"employee\":null"));
            Program.PrintResult(p.Run(jsonKeyValue, "\"amount\":12.4"));
            Program.PrintResult(p.Run(jsonKeyValue, "\"name\":\"Jon\""));
            Program.PrintResult(p.Run(jsonKeyValue, "\"enabled\":true"));
            Program.PrintResult(p.Run(jsonKeyValue, "\"enabled\":false"));
            Program.PrintResult(p.Run(jsonKeyValue, "\"amount2\": 12.4"));
            Program.PrintResult(p.Run(jsonKeyValue, "\"amount2\": bogus"));
        }
Beispiel #14
0
        private static void ParseCsvFixedColumnOrder()
        {
            var p                 = new MyParserImpl();
            var dateParser        = DateParser(p, false);
            var temperatureParser = TemperatureParser(p, true);
            var rowParser         = p.Map2(dateParser, () => temperatureParser, Row.MakeRowFunc);
            var rowsParser        = p.Whitespace().SkipL(() => rowParser.SepEndBy(p.Eol()));

            const string input = @"
1/1/2010, 25
2/1/2010, 28
3/1/2010, 42
4/1/2010, 53
";

            var result = p.Run(rowsParser, input);

            Program.PrintResult(result, rows => string.Join(Environment.NewLine, rows.Select(row => row.ToString())));
        }
Beispiel #15
0
        private static Either <ParseError, TA> Parse <TA>(Parser <TA> p, string s)
        {
            var parserImpl = new MyParserImpl();

            return(parserImpl.Run(p, s));
        }