Пример #1
0
        private static Parser <Parser <Row> > HeaderParser(ParsersBase p)
        {
            var dateParser1        = DateParser(p, false);
            var temperatureParser1 = TemperatureParser(p, true);
            var rowParser1         = p.Map2(dateParser1, () => temperatureParser1, Row.MakeRowFunc);

            var temperatureParser2 = TemperatureParser(p, false);
            var dateParser2        = DateParser(p, true);
            var rowParser2         = p.Map2(temperatureParser2, () => dateParser2, Flip(Row.MakeRowFunc));

            var columnTitlesParser = ColumnTitlesParser(p);

            return(columnTitlesParser.Map(cols =>
            {
                var colsList1 = cols.ToList();
                if (colsList1.SequenceEqual(new[] { "Date", "Temperature" }))
                {
                    return rowParser1;
                }
                if (colsList1.SequenceEqual(new[] { "Temperature", "Date" }))
                {
                    return rowParser2;
                }
                return p.Fail <Row>("");
            }));
        }
Пример #2
0
 private static Parser <Json> JsonRoot(ParsersBase p)
 {
     return(p.Whitespace().SkipL(
                () => JsonObject(p) |
                (() => JsonArray(p)) |
                (() => p.Fail <Json>("expected an object or an array"))));
 }
Пример #3
0
 private static Parser <Json> JsonValue(ParsersBase p)
 {
     return
         (JsonLiteral(p) |
          (() => JsonArray(p)) |
          (() => JsonObject(p)) |
          (() => p.Fail <Json>("expected a literal or an array or an object")));
 }
Пример #4
0
 private static Parser <Json> JsonObject(ParsersBase p)
 {
     return(p.Surround(
                p.Token(p.String("{")),
                p.Token(p.String("}")),
                () => JsonKeyValue(p).SepBy(p.Token(p.String(",")))
                .Map(kvs => new JObject(kvs.ToDictionary(kv => kv.Item1, kv => kv.Item2)) as Json))
            .Scope("object"));
 }
Пример #5
0
 private static Parser <Json> JsonArray(ParsersBase p)
 {
     return(p.Surround(
                p.Token(p.String("[")),
                p.Token(p.String("]")),
                () => JsonValue(p).SepBy(p.Token(p.String(","))))
            .Map(vs => new JArray(vs) as Json)
            .Scope("array"));
 }
Пример #6
0
 private static Parser <Json> JsonLiteral(ParsersBase p)
 {
     return(p.Scope(
                "literal",
                p.Token(p.String("null")).As(new JNull() as Json) |
                (() => p.Double().Map(n => new JNumber(n) as Json)) |
                (() => p.Token(p.Quoted()).Map(s => new JString(s) as Json)) |
                (() => p.Token(p.String("true")).As(new JBool(true) as Json)) |
                (() => p.Token(p.String("false")).As(new JBool(false) as Json))) |
            (() => p.Fail <Json>("expected a literal")));
 }
Пример #7
0
        private static Parser <IEnumerable <string> > ColumnTitlesParser(ParsersBase p)
        {
            var beginLineCommentParser = p.Token(p.String("#"));
            var commaParser            = p.Token(p.String(","));
            var columnTitleParser      = p.Token(p.Quoted() | (() => p.R(@"(\w+)")));

            return(p.Whitespace()
                   .SkipL(
                       () => beginLineCommentParser.SkipL(
                           () => columnTitleParser.SepBy(commaParser))));
        }
Пример #8
0
 public TemplateParser(ParsersBase p)
 {
     _p = p;
 }
Пример #9
0
 private static Parser <Tuple <string, Json> > JsonKeyValue(ParsersBase p)
 {
     return(p.Quoted().Product(() => p.SkipL(p.Token(p.String(":")), () => JsonValue(p))));
 }
Пример #10
0
        private static Parser <int> TemperatureParser(ParsersBase p, bool lastColumn)
        {
            var temperatureParser = p.Int();

            return(lastColumn ? temperatureParser : AddOptionalCommaTokenSuffix(p, temperatureParser));
        }
Пример #11
0
        private static Parser <DateTime> DateParser(ParsersBase p, bool lastColumn)
        {
            var dateParser = p.R(@"\d{1,2}/\d{1,2}/\d{4}").Map(DateTime.Parse);

            return(lastColumn ? dateParser : AddOptionalCommaTokenSuffix(p, dateParser));
        }
Пример #12
0
 private static Parser <TA> AddOptionalCommaTokenSuffix <TA>(ParsersBase p, Parser <TA> thingParser)
 {
     return(thingParser.SkipR(() => p.OptionMaybe(p.Token(p.String(",")))));
 }