public void TestMarkRewindInMiddle() /*throws Exception*/ { // ^(101 ^(102 103 ^(106 107) ) 104 105) // stream has 7 real + 6 nav nodes // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF ITree r0 = new CommonTree(new CommonToken(101)); ITree r1 = new CommonTree(new CommonToken(102)); r0.AddChild(r1); r1.AddChild(new CommonTree(new CommonToken(103))); ITree r2 = new CommonTree(new CommonToken(106)); r2.AddChild(new CommonTree(new CommonToken(107))); r1.AddChild(r2); r0.AddChild(new CommonTree(new CommonToken(104))); r0.AddChild(new CommonTree(new CommonToken(105))); ITreeNodeStream stream = newStream(r0); for (int k = 1; k <= 7; k++) { // consume til middle //System.out.println(((Tree)stream.LT(1)).getType()); stream.Consume(); } assertEquals(107, ((ITree)stream.LT(1)).Type); stream.Mark(); // MARK stream.Consume(); // consume 107 stream.Consume(); // consume UP stream.Consume(); // consume UP stream.Consume(); // consume 104 stream.Rewind(); // REWIND stream.Mark(); // keep saving nodes though assertEquals(107, ((ITree)stream.LT(1)).Type); stream.Consume(); assertEquals(TokenTypes.Up, ((ITree)stream.LT(1)).Type); stream.Consume(); assertEquals(TokenTypes.Up, ((ITree)stream.LT(1)).Type); stream.Consume(); assertEquals(104, ((ITree)stream.LT(1)).Type); stream.Consume(); // now we're past rewind position assertEquals(105, ((ITree)stream.LT(1)).Type); stream.Consume(); assertEquals(TokenTypes.Up, ((ITree)stream.LT(1)).Type); stream.Consume(); assertEquals(TokenTypes.EndOfFile, ((ITree)stream.LT(1)).Type); assertEquals(TokenTypes.Up, ((ITree)stream.LT(-1)).Type); }
public void TestMarkRewindNested() /*throws Exception*/ { // ^(101 ^(102 103 ^(106 107) ) 104 105) // stream has 7 real + 6 nav nodes // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF ITree r0 = new CommonTree(new CommonToken(101)); ITree r1 = new CommonTree(new CommonToken(102)); r0.AddChild(r1); r1.AddChild(new CommonTree(new CommonToken(103))); ITree r2 = new CommonTree(new CommonToken(106)); r2.AddChild(new CommonTree(new CommonToken(107))); r1.AddChild(r2); r0.AddChild(new CommonTree(new CommonToken(104))); r0.AddChild(new CommonTree(new CommonToken(105))); ITreeNodeStream stream = newStream(r0); int m = stream.Mark(); // MARK at start stream.Consume(); // consume 101 stream.Consume(); // consume DN int m2 = stream.Mark(); // MARK on 102 stream.Consume(); // consume 102 stream.Consume(); // consume DN stream.Consume(); // consume 103 stream.Consume(); // consume 106 stream.Rewind(m2); // REWIND to 102 assertEquals(102, ((ITree)stream.LT(1)).Type); stream.Consume(); assertEquals(TokenTypes.Down, ((ITree)stream.LT(1)).Type); stream.Consume(); // stop at 103 and rewind to start stream.Rewind(m); // REWIND to 101 assertEquals(101, ((ITree)stream.LT(1)).Type); stream.Consume(); assertEquals(TokenTypes.Down, ((ITree)stream.LT(1)).Type); stream.Consume(); assertEquals(102, ((ITree)stream.LT(1)).Type); stream.Consume(); assertEquals(TokenTypes.Down, ((ITree)stream.LT(1)).Type); }
protected virtual void ExtractInformationFromTreeNodeStream(ITreeNodeStream input, int k) { int mark = input.Mark(); try { for (int i = 0; i < k - 1; i++) { input.Consume(); } ExtractInformationFromTreeNodeStream(input); } finally { input.Rewind(mark); } }
public void TestMarkRewindEntire() /*throws Exception*/ { // ^(101 ^(102 103 ^(106 107) ) 104 105) // stream has 7 real + 6 nav nodes // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF ITree r0 = new CommonTree(new CommonToken(101)); ITree r1 = new CommonTree(new CommonToken(102)); r0.AddChild(r1); r1.AddChild(new CommonTree(new CommonToken(103))); ITree r2 = new CommonTree(new CommonToken(106)); r2.AddChild(new CommonTree(new CommonToken(107))); r1.AddChild(r2); r0.AddChild(new CommonTree(new CommonToken(104))); r0.AddChild(new CommonTree(new CommonToken(105))); ITreeNodeStream stream = newStream(r0); int m = stream.Mark(); // MARK for (int k = 1; k <= 13; k++) { // consume til end stream.LT(1); stream.Consume(); } assertEquals(TokenTypes.EndOfFile, ((ITree)stream.LT(1)).Type); stream.Rewind(m); // REWIND // consume til end again :) for (int k = 1; k <= 13; k++) { // consume til end stream.LT(1); stream.Consume(); } assertEquals(TokenTypes.EndOfFile, ((ITree)stream.LT(1)).Type); }
protected virtual void ExtractInformationFromTreeNodeStream(ITreeNodeStream input, int k) { int mark = input.Mark(); try { for (int i = 0; i < k - 1; i++) input.Consume(); ExtractInformationFromTreeNodeStream(input); } finally { input.Rewind(mark); } }