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); }
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()); }