aboutsummaryrefslogtreecommitdiff
path: root/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs')
-rw-r--r--runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs312
1 files changed, 0 insertions, 312 deletions
diff --git a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs b/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs
deleted file mode 100644
index f9cb0a7..0000000
--- a/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * [The "BSD license"]
- * Copyright (c) 2011 Terence Parr
- * All rights reserved.
- *
- * Conversion to C#:
- * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-namespace Antlr.Runtime.Tree
-{
- using System.Collections.Generic;
- using Antlr.Runtime.Misc;
-
- using StringBuilder = System.Text.StringBuilder;
-
- [System.Serializable]
- public class CommonTreeNodeStream : LookaheadStream<object>, ITreeNodeStream, IPositionTrackingStream
- {
- public const int DEFAULT_INITIAL_BUFFER_SIZE = 100;
- public const int INITIAL_CALL_STACK_SIZE = 10;
-
- /** <summary>Pull nodes from which tree?</summary> */
- private readonly object _root;
-
- /** <summary>If this tree (root) was created from a token stream, track it.</summary> */
- protected ITokenStream tokens;
-
- /** <summary>What tree adaptor was used to build these trees</summary> */
- [System.NonSerialized]
- private ITreeAdaptor _adaptor;
-
- /** The tree iterator we are using */
- private readonly TreeIterator _it;
-
- /** <summary>Stack of indexes used for push/pop calls</summary> */
- private Stack<int> _calls;
-
- /** <summary>Tree (nil A B C) trees like flat A B C streams</summary> */
- private bool _hasNilRoot = false;
-
- /** <summary>Tracks tree depth. Level=0 means we're at root node level.</summary> */
- private int _level = 0;
-
- /**
- * Tracks the last node before the start of {@link #data} which contains
- * position information to provide information for error reporting. This is
- * tracked in addition to {@link #prevElement} which may or may not contain
- * position information.
- *
- * @see #hasPositionInformation
- * @see RecognitionException#extractInformationFromTreeNodeStream
- */
- private object _previousLocationElement;
-
- public CommonTreeNodeStream( object tree )
- : this( new CommonTreeAdaptor(), tree )
- {
- }
-
- public CommonTreeNodeStream( ITreeAdaptor adaptor, object tree )
- {
- this._root = tree;
- this._adaptor = adaptor;
- _it = new TreeIterator( adaptor, _root );
- }
-
- #region Properties
-
- public virtual string SourceName
- {
- get
- {
- if ( TokenStream == null )
- return null;
-
- return TokenStream.SourceName;
- }
- }
-
- public virtual ITokenStream TokenStream
- {
- get
- {
- return tokens;
- }
-
- set
- {
- tokens = value;
- }
- }
-
- public virtual ITreeAdaptor TreeAdaptor
- {
- get
- {
- return _adaptor;
- }
-
- set
- {
- _adaptor = value;
- }
- }
-
- public virtual object TreeSource
- {
- get
- {
- return _root;
- }
- }
-
- public virtual bool UniqueNavigationNodes
- {
- get
- {
- return false;
- }
-
- set
- {
- }
- }
-
- #endregion
-
- public override void Reset()
- {
- base.Reset();
- _it.Reset();
- _hasNilRoot = false;
- _level = 0;
- _previousLocationElement = null;
- if ( _calls != null )
- _calls.Clear();
- }
-
- public override object NextElement()
- {
- _it.MoveNext();
- object t = _it.Current;
- //System.out.println("pulled "+adaptor.getType(t));
- if ( t == _it.up )
- {
- _level--;
- if ( _level == 0 && _hasNilRoot )
- {
- _it.MoveNext();
- return _it.Current; // don't give last UP; get EOF
- }
- }
- else if ( t == _it.down )
- {
- _level++;
- }
-
- if ( _level == 0 && TreeAdaptor.IsNil( t ) )
- {
- // if nil root, scarf nil, DOWN
- _hasNilRoot = true;
- _it.MoveNext();
- t = _it.Current; // t is now DOWN, so get first real node next
- _level++;
- _it.MoveNext();
- t = _it.Current;
- }
-
- return t;
- }
-
- public override object Dequeue()
- {
- object result = base.Dequeue();
- if (_p == 0 && HasPositionInformation(PreviousElement))
- _previousLocationElement = PreviousElement;
-
- return result;
- }
-
- public override bool IsEndOfFile(object o)
- {
- return TreeAdaptor.GetType(o) == CharStreamConstants.EndOfFile;
- }
-
- public virtual int LA( int i )
- {
- return TreeAdaptor.GetType( LT( i ) );
- }
-
- /** Make stream jump to a new location, saving old location.
- * Switch back with pop().
- */
- public virtual void Push( int index )
- {
- if ( _calls == null )
- _calls = new Stack<int>();
-
- _calls.Push( _p ); // save current index
- Seek( index );
- }
-
- /** Seek back to previous index saved during last push() call.
- * Return top of stack (return index).
- */
- public virtual int Pop()
- {
- int ret = _calls.Pop();
- Seek( ret );
- return ret;
- }
-
- /**
- * Returns an element containing position information. If {@code allowApproximateLocation} is {@code false}, then
- * this method will return the {@code LT(1)} element if it contains position information, and otherwise return {@code null}.
- * If {@code allowApproximateLocation} is {@code true}, then this method will return the last known element containing position information.
- *
- * @see #hasPositionInformation
- */
- public object GetKnownPositionElement(bool allowApproximateLocation)
- {
- object node = _data[_p];
- if (HasPositionInformation(node))
- return node;
-
- if (!allowApproximateLocation)
- return null;
-
- for (int index = _p - 1; index >= 0; index--)
- {
- node = _data[index];
- if (HasPositionInformation(node))
- return node;
- }
-
- return _previousLocationElement;
- }
-
- public bool HasPositionInformation(object node)
- {
- IToken token = TreeAdaptor.GetToken(node);
- if (token == null)
- return false;
-
- if (token.Line <= 0)
- return false;
-
- return true;
- }
-
- #region Tree rewrite interface
-
- public virtual void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t )
- {
- if ( parent != null )
- {
- TreeAdaptor.ReplaceChildren( parent, startChildIndex, stopChildIndex, t );
- }
- }
-
- #endregion
-
- public virtual string ToString( object start, object stop )
- {
- // we'll have to walk from start to stop in tree; we're not keeping
- // a complete node stream buffer
- return "n/a";
- }
-
- /** <summary>For debugging; destructive: moves tree iterator to end.</summary> */
- public virtual string ToTokenTypeString()
- {
- Reset();
- StringBuilder buf = new StringBuilder();
- object o = LT( 1 );
- int type = TreeAdaptor.GetType( o );
- while ( type != TokenTypes.EndOfFile )
- {
- buf.Append( " " );
- buf.Append( type );
- Consume();
- o = LT( 1 );
- type = TreeAdaptor.GetType( o );
- }
- return buf.ToString();
- }
- }
-}