⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commontreenodestream.java

📁 antlr最新版本V3源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
				//System.out.println("found in index; stream index = "+streamIndexI);				return streamIndexI.intValue(); // found it!			}		}		return -1;	}	protected int getNodeIndexLinearly(Object node) {		if ( p==-1 ) {			fillBuffer();		}		for (int i = 0; i < nodes.size(); i++) {			Object t = (Object) nodes.get(i);			if ( t==node ) {				return i;			}		}		return -1;	}	/** As we flatten the tree, we use UP, DOWN nodes to represent	 *  the tree structure.  When debugging we need unique nodes	 *  so instantiate new ones when uniqueNavigationNodes is true.	 */	protected void addNavigationNode(final int ttype) {		Object navNode = null;		if ( ttype==Token.DOWN ) {			if ( hasUniqueNavigationNodes() ) {				navNode = adaptor.create(Token.DOWN, "DOWN");			}			else {				navNode = down;			}		}		else {			if ( hasUniqueNavigationNodes() ) {				navNode = adaptor.create(Token.UP, "UP");			}			else {				navNode = up;			}		}		nodes.add(navNode);	}	public Object get(int i) {		if ( p==-1 ) {			fillBuffer();		}		return nodes.get(i);	}	public Object LT(int k) {		if ( p==-1 ) {			fillBuffer();		}		if ( k==0 ) {			return null;		}		if ( k<0 ) {			return LB(-k);		}		//System.out.print("LT(p="+p+","+k+")=");		if ( (p+k-1) >= nodes.size() ) {			return eof;		}		return nodes.get(p+k-1);	}/*	public Object getLastTreeNode() {		int i = index();		if ( i>=size() ) {			i--; // if at EOF, have to start one back		}		System.out.println("start last node: "+i+" size=="+nodes.size());		while ( i>=0 &&			(adaptor.getType(get(i))==Token.EOF ||			 adaptor.getType(get(i))==Token.UP ||			 adaptor.getType(get(i))==Token.DOWN) )		{			i--;		}		System.out.println("stop at node: "+i+" "+nodes.get(i));		return nodes.get(i);	}*/		/** Look backwards k nodes */	protected Object LB(int k) {		if ( k==0 ) {			return null;		}		if ( (p-k)<0 ) {			return null;		}		return nodes.get(p-k);	}	public Object getTreeSource() {		return root;	}	public TokenStream getTokenStream() {		return tokens;	}	public void setTokenStream(TokenStream tokens) {		this.tokens = tokens;	}	public TreeAdaptor getTreeAdaptor() {		return adaptor;	}	public boolean hasUniqueNavigationNodes() {		return uniqueNavigationNodes;	}	public void setUniqueNavigationNodes(boolean uniqueNavigationNodes) {		this.uniqueNavigationNodes = uniqueNavigationNodes;	}	public void consume() {		if ( p==-1 ) {			fillBuffer();		}		p++;	}	public int LA(int i) {		return adaptor.getType(LT(i));	}	public int mark() {		if ( p==-1 ) {			fillBuffer();		}		lastMarker = index();		return lastMarker;	}	public void release(int marker) {		// no resources to release	}	public int index() {		return p;	}	public void rewind(int marker) {		seek(marker);	}	public void rewind() {		seek(lastMarker);	}	public void seek(int index) {		if ( p==-1 ) {			fillBuffer();		}		p = index;	}	/** Make stream jump to a new location, saving old location.	 *  Switch back with pop().  I manage dyanmic array manually	 *  to avoid creating Integer objects all over the place.	 */	public void push(int index) {		if ( calls==null ) {			calls = new int[INITIAL_CALL_STACK_SIZE];		}		else if ( (_sp+1)>=calls.length ) {			int[] newStack = new int[calls.length*2];			System.arraycopy(calls, 0, newStack, 0, calls.length);			calls = newStack;		}		calls[++_sp] = p; // save current index		seek(index);	}	/** Seek back to previous index saved during last push() call.	 *  Return top of stack (return index).	 */	public int pop() {		int ret = calls[_sp--];		seek(ret);		return ret;	}	public int size() {		if ( p==-1 ) {			fillBuffer();		}		return nodes.size();	}	public Iterator iterator() {		if ( p==-1 ) {			fillBuffer();		}		return new StreamIterator();	}	/** Used for testing, just return the token type stream */	public String toString() {		if ( p==-1 ) {			fillBuffer();		}		StringBuffer buf = new StringBuffer();		for (int i = 0; i < nodes.size(); i++) {			Object t = (Object) nodes.get(i);			buf.append(" ");			buf.append(adaptor.getType(t));		}		return buf.toString();	}	public String toString(Object start, Object stop) {		if ( start==null || stop==null ) {			return null;		}		if ( p==-1 ) {			fillBuffer();		}		System.out.println("stop: "+stop);		if ( start instanceof CommonTree )			System.out.print("toString: "+((CommonTree)start).getToken()+", ");		else			System.out.println(start);		if ( stop instanceof CommonTree )			System.out.println(((CommonTree)stop).getToken());		else			System.out.println(stop);		// if we have the token stream, use that to dump text in order		if ( tokens!=null ) {			int beginTokenIndex = adaptor.getTokenStartIndex(start);			int endTokenIndex = adaptor.getTokenStopIndex(stop);			// if it's a tree, use start/stop index from start node			// else use token range from start/stop nodes			if ( adaptor.getType(stop)==Token.UP ) {				endTokenIndex = adaptor.getTokenStopIndex(start);			}			else if ( adaptor.getType(stop)==Token.EOF ) {				endTokenIndex = size()-2; // don't use EOF			}			return tokens.toString(beginTokenIndex, endTokenIndex);		}		// walk nodes looking for start		Object t = null;		int i = 0;		for (; i < nodes.size(); i++) {			t = nodes.get(i);			if ( t==start ) {				break;			}		}		// now walk until we see stop, filling string buffer with text		 StringBuffer buf = new StringBuffer();		t = nodes.get(i);		while ( t!=stop ) {			String text = adaptor.getText(t);			if ( text==null ) {				text = " "+String.valueOf(adaptor.getType(t));			}			buf.append(text);			i++;			t = nodes.get(i);		}		// include stop node too		String text = adaptor.getText(stop);		if ( text==null ) {			text = " "+String.valueOf(adaptor.getType(stop));		}		buf.append(text);		return buf.toString();	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -