Exemple #1
0
        static void Main(string[] args)
        {
            string       input      = "1 + 2 * 3";
            SourceReader sr         = new SourceReader(new StringReader(input));
            var          startPoint = sr.CreateRevertPoint();

            Console.WriteLine("Input String: ");
            Console.WriteLine(input);
            Console.WriteLine();

            SimpleCombinatorsTest test1 = new SimpleCombinatorsTest();

            test1.Test(sr);
            sr.Revert(startPoint);

            CpsCombinatorsTest test2 = new CpsCombinatorsTest();

            test2.Test(sr);
            sr.Revert(startPoint);

            ErrorRecoveryCombinatorsTest test3 = new ErrorRecoveryCombinatorsTest();

            test3.Test(sr);
            sr.Revert(startPoint);

            GLRCombinatorsTest test4 = new GLRCombinatorsTest();

            test4.Test(sr);
            sr.Revert(startPoint);
        }
Exemple #2
0
        public void SourceCodeTest()
        {
            string       code   = @"class ABCDEFG
{
    public int c;
}";
            StringReader sr     = new StringReader(code);
            SourceReader source = new SourceReader(sr);

            Assert.AreEqual('c', (char)source.PeekChar());
            Assert.AreEqual('c', (char)source.ReadChar());
            Assert.AreEqual(0, source.Location.CharIndex);

            //create a revert point
            var rp1 = source.CreateRevertPoint();

            Assert.AreEqual('l', (char)source.PeekChar());
            Assert.AreEqual('l', (char)source.ReadChar());
            Assert.AreEqual('a', (char)source.ReadChar());
            Assert.AreEqual(2, source.Location.CharIndex);

            //revert
            source.Revert(rp1);
            Assert.AreEqual('l', (char)source.PeekChar());
            Assert.AreEqual('l', (char)source.ReadChar());
            Assert.AreEqual('a', (char)source.ReadChar());
            Assert.AreEqual(2, source.Location.CharIndex);
            Assert.AreEqual('s', (char)source.ReadChar());
            Assert.AreEqual(3, source.Location.CharIndex);

            source.Revert(rp1);
            source.RemoveRevertPoint(rp1);
            Assert.AreEqual('l', (char)source.ReadChar());
            Assert.AreEqual('a', (char)source.ReadChar());
            Assert.AreEqual(2, source.Location.CharIndex);
            Assert.AreEqual('s', (char)source.ReadChar());
            Assert.AreEqual(3, source.Location.CharIndex);
            Assert.AreEqual('s', (char)source.ReadChar());

            Assert.Catch <ArgumentException>(() => source.Revert(rp1));

            //peek and then revert
            Assert.AreEqual(' ', (char)source.PeekChar());
            var rp2 = source.CreateRevertPoint();

            Assert.AreEqual(' ', (char)source.PeekChar());
            Assert.AreEqual(' ', (char)source.ReadChar());
            Assert.AreEqual('A', (char)source.ReadChar());

            source.Revert(rp2);
            Assert.AreEqual(' ', (char)source.PeekChar());
            Assert.AreEqual(' ', (char)source.ReadChar());
            Assert.AreEqual('A', (char)source.ReadChar());

            //multiple revert point
            var rp3 = source.CreateRevertPoint();

            Assert.AreEqual('B', (char)source.ReadChar());
            Assert.AreEqual('C', (char)source.ReadChar());
            Assert.AreEqual('D', (char)source.ReadChar());
            Assert.AreEqual('E', (char)source.PeekChar());

            source.Revert(rp2);
            Assert.AreEqual(' ', (char)source.PeekChar());
            Assert.AreEqual(' ', (char)source.ReadChar());
            Assert.AreEqual('A', (char)source.ReadChar());

            source.Revert(rp3);
            Assert.AreEqual('B', (char)source.ReadChar());
            Assert.AreEqual('C', (char)source.ReadChar());
            Assert.AreEqual('D', (char)source.ReadChar());
            Assert.AreEqual('E', (char)source.PeekChar());

            source.Revert(rp2);
            Assert.AreEqual(' ', (char)source.PeekChar());
            Assert.AreEqual(' ', (char)source.ReadChar());
            Assert.AreEqual('A', (char)source.ReadChar());

            source.RemoveRevertPoint(rp2);
            source.RemoveRevertPoint(rp3);

            Assert.AreEqual('B', (char)source.ReadChar());
            Assert.AreEqual('C', (char)source.ReadChar());
            Assert.AreEqual('D', (char)source.ReadChar());
            Assert.AreEqual('E', (char)source.ReadChar());
            Assert.AreEqual('F', (char)source.PeekChar());
        }