예제 #1
0
        public void TokenizedStreamTest()
        {
            // 任意のパーサを繰り返し適用した結果をソースストリームとして利用可能にします。
            // 字句解析等の前段処理を可能にします。

            // 空白に挟まれた文字列を1要素として返すパーサ。
            var token = Many1(LetterOrDigit()).Between(Spaces()).AsString();

            var source = "The quick brown fox jumps over the lazy dog";

            using var stream    = StringStream.Create(source);
            using var tokenized = ParsecState.Tokenize(stream, token);

            // 任意のトークンにマッチし、その長さを返すパーサ。
            var parser = Many(Any <string>().Map(x => x.Length));

            parser.Parse(tokenized).WillSucceed(value => value.Is(source.Split(' ').Select(x => x.Length)));
        }