예제 #1
0
 public void TestBind()
 {
     {
         // any two equal characters
         var parser = Any.Then(c => Token(c.Equals));
         AssertSuccess(parser.Parse("aa"), 'a', true);
         AssertFailure(parser.Parse("ab"), new Expected <char>[] { }, new SourcePos(1, 2), true);
     }
     {
         var parser = Any.Bind(c => Token(c.Equals), (x, y) => new { x, y });
         AssertSuccess(parser.Parse("aa"), new { x = 'a', y = 'a' }, true);
         AssertFailure(parser.Parse("ab"), new Expected <char>[] { }, new SourcePos(1, 2), true);
     }
     {
         var parser = Any.Then(c => Token(c.Equals), (x, y) => new { x, y });
         AssertSuccess(parser.Parse("aa"), new { x = 'a', y = 'a' }, true);
         AssertFailure(parser.Parse("ab"), new Expected <char>[] { }, new SourcePos(1, 2), true);
     }
     {
         var parser =
             from x in Any
             from y in Token(x.Equals)
             select new { x, y };
         AssertSuccess(parser.Parse("aa"), new { x = 'a', y = 'a' }, true);
         AssertFailure(parser.Parse("ab"), new Expected <char>[] { }, new SourcePos(1, 2), true);
     }
     {
         var parser = Char('x').Then(c => Char('y'));
         AssertSuccess(parser.Parse("xy"), 'y', true);
         AssertFailure(parser.Parse("yy"), new[] { new Expected <char>(new[] { 'x' }) }, new SourcePos(1, 1), false);
         AssertFailure(parser.Parse("xx"), new[] { new Expected <char>(new[] { 'y' }) }, new SourcePos(1, 2), true);
     }
 }