Esempio n. 1
0
        public void TestMerge()
        {
            var loc1 = new SourcePosition(0, 1, 1);
            var loc2 = new SourcePosition(2, 1, 3);
            var loc3 = new SourcePosition(5, 2, 6);
            var loc4 = new SourcePosition(6, 1, 7);
            var loc5 = new SourcePosition(9, 2, 14);

            Assert.AreEqual(SourceRange.Unknown, SourceRange.Merge());
            Assert.AreEqual(SourceRange.Unknown, SourceRange.Merge(null));
            Assert.AreEqual(SourceRange.Unknown, SourceRange.Merge(SourceRange.Unknown));
            Assert.AreEqual(SourceRange.Unknown, SourceRange.Merge(SourceRange.Unknown, SourceRange.Unknown));
            Assert.AreEqual(new SourceRange(loc1), SourceRange.Merge(SourceRange.Unknown, new SourceRange(loc1)));
            Assert.AreEqual(new SourceRange(loc1),
                            SourceRange.Merge(SourceRange.Unknown, new SourceRange(loc1), SourceRange.Unknown, new SourceRange(loc1)));
            Assert.AreEqual(new SourceRange(loc1, loc5),
                            SourceRange.Merge(new SourceRange(loc3, loc5), SourceRange.Unknown, new SourceRange(loc1)));
            Assert.AreEqual(new SourceRange(loc1, loc5),
                            SourceRange.Merge(new SourceRange(loc3, loc5), new SourceRange(loc1, loc5)));
            Assert.AreEqual(new SourceRange(loc1, loc5),
                            SourceRange.Merge(new SourceRange(loc4, loc5), new SourceRange(loc1, loc2), new SourceRange(loc2, loc3)));
            Assert.AreEqual(new SourceRange(loc2, loc5),
                            SourceRange.Merge(new SourceRange(loc3, loc5), new SourceRange(loc2, loc3)));
            Assert.AreEqual(new SourceRange(loc2, loc5),
                            SourceRange.Merge(new SourceRange(loc4, loc5), new SourceRange(loc2, loc3)));
            Assert.AreEqual(new SourceRange(loc1, loc3),
                            SourceRange.Merge(new SourceRange(loc1, loc2), new SourceRange(loc2, loc3)));
        }
 /// <summary>
 /// 向 <see cref="ParserController&lt;T&gt;"/> 中添加指定堆栈中的词法单元。
 /// </summary>
 /// <param name="stack">要添加词法单元的堆栈。</param>
 /// <param name="count">要添加的词法单元的数量。</param>
 internal void InternalAdd(Stack <Token <T> > stack, int count)
 {
     while (this.Count > count)
     {
         base.Items.RemoveAt(this.Count - 1);
     }
     while (this.Count < count)
     {
         base.Items.Add(null);
     }
     if (count == 0)
     {
         if (stack.Count == 0)
         {
             this.Start = SourcePosition.Unknown;
         }
         else
         {
             this.Start = stack.Peek().Start;
         }
         this.End = this.Start;
     }
     else
     {
         while (count-- > 0)
         {
             base.Items[count] = stack.Pop();
         }
         SourceRange range = SourceRange.Merge((IEnumerable <ISourceLocatable>) this);
         this.Start = range.Start;
         this.End   = range.End;
     }
 }
Esempio n. 3
0
        public void TestProperties()
        {
            var loc1 = new SourcePosition(0, 1, 1);
            var loc2 = new SourcePosition(2, 1, 3);

            Assert.AreEqual(true, SourceRange.Unknown.IsUnknown);
            Assert.AreEqual(true, new SourceRange(SourcePosition.Unknown).IsUnknown);
            Assert.AreEqual(true, new SourceRange(SourcePosition.Unknown, SourcePosition.Unknown).IsUnknown);
            Assert.AreEqual(true, new SourceRange(new SourceRange(SourcePosition.Unknown, SourcePosition.Unknown)).IsUnknown);
            Assert.AreEqual(false, new SourceRange(loc1).IsUnknown);
            Assert.AreEqual(false, SourceRange.Merge(SourceRange.Unknown, new SourceRange(loc1)).IsUnknown);
            Assert.AreEqual(0, SourceRange.Unknown.Length);
            Assert.AreEqual(0, new SourceRange(new SourceRange(SourcePosition.Unknown, SourcePosition.Unknown)).Length);
            Assert.AreEqual(1, new SourceRange(loc1).Length);
            Assert.AreEqual(3, new SourceRange(loc1, loc2).Length);
        }
Esempio n. 4
0
        public void TestMerge()
        {
            SourceLocation loc1 = new SourceLocation(0, 1, 1);
            SourceLocation loc2 = new SourceLocation(2, 1, 3);
            SourceLocation loc3 = new SourceLocation(5, 1, 6);
            SourceLocation loc4 = new SourceLocation(6, 2, 1);
            SourceLocation loc5 = new SourceLocation(9, 2, 4);

            Assert.AreEqual(SourceRange.Unknown, SourceRange.Merge(SourceRange.Unknown));
            Assert.AreEqual(SourceRange.Unknown, SourceRange.Merge(SourceRange.Unknown, SourceRange.Unknown));
            Assert.AreEqual(new SourceRange(loc1), SourceRange.Merge(SourceRange.Unknown, new SourceRange(loc1)));
            Assert.AreEqual(new SourceRange(loc1),
                            SourceRange.Merge(SourceRange.Unknown, new SourceRange(loc1), SourceRange.Unknown, new SourceRange(loc1)));
            Assert.AreEqual(new SourceRange(loc1, loc5),
                            SourceRange.Merge(new SourceRange(loc3, loc5), SourceRange.Unknown, new SourceRange(loc1)));
            Assert.AreEqual(new SourceRange(loc1, loc5),
                            SourceRange.Merge(new SourceRange(loc3, loc5), new SourceRange(loc1, loc5)));
            Assert.AreEqual(new SourceRange(loc1, loc5),
                            SourceRange.Merge(new SourceRange(loc4, loc5), new SourceRange(loc1, loc2), new SourceRange(loc2, loc3)));
            Assert.AreEqual(new SourceRange(loc2, loc5),
                            SourceRange.Merge(new SourceRange(loc3, loc5), new SourceRange(loc2, loc3)));
            Assert.AreEqual(new SourceRange(loc2, loc5),
                            SourceRange.Merge(new SourceRange(loc4, loc5), new SourceRange(loc2, loc3)));
            Assert.AreEqual(new SourceRange(loc1, loc3),
                            SourceRange.Merge(new SourceRange(loc1, loc2), new SourceRange(loc2, loc3)));
            Assert.AreEqual(SourceRange.Unknown, SourceRange.Unknown.MergeWith());
            Assert.AreEqual(SourceRange.Unknown, SourceRange.Unknown.MergeWith(SourceRange.Unknown));
            Assert.AreEqual(new SourceRange(loc1), SourceRange.Unknown.MergeWith(new SourceRange(loc1)));
            Assert.AreEqual(new SourceRange(loc1), new SourceRange(loc1).MergeWith(SourceRange.Unknown));
            Assert.AreEqual(new SourceRange(loc1),
                            SourceRange.Unknown.MergeWith(new SourceRange(loc1), SourceRange.Unknown, new SourceRange(loc1)));
            Assert.AreEqual(new SourceRange(loc1, loc5),
                            new SourceRange(loc3, loc5).MergeWith(SourceRange.Unknown, new SourceRange(loc1)));
            Assert.AreEqual(new SourceRange(loc1, loc5),
                            new SourceRange(loc3, loc5).MergeWith(new SourceRange(loc1, loc5)));
            Assert.AreEqual(new SourceRange(loc1, loc5),
                            new SourceRange(loc4, loc5).MergeWith(new SourceRange(loc1, loc2), new SourceRange(loc2, loc3)));
            Assert.AreEqual(new SourceRange(loc2, loc5),
                            new SourceRange(loc3, loc5).MergeWith(new SourceRange(loc2, loc3)));
            Assert.AreEqual(new SourceRange(loc2, loc5),
                            new SourceRange(loc4, loc5).MergeWith(new SourceRange(loc2, loc3)));
            Assert.AreEqual(new SourceRange(loc1, loc3),
                            new SourceRange(loc1, loc2).MergeWith(new SourceRange(loc2, loc3)));
        }