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

📄 tokenrewritestream.java

📁 antlr最新版本V3源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			if ( op instanceof ReplaceOp ) {				boolean replaced = false;				int i;				// look for an existing replace				for (i=pos; i<rewrites.size(); i++) {					RewriteOperation prevOp = (RewriteOperation)rewrites.get(pos);					if ( prevOp.index!=op.index ) {						break;					}					if ( prevOp instanceof ReplaceOp ) {						rewrites.set(pos, op); // replace old with new						replaced=true;						break;					}					// keep going; must be an insert				}				if ( !replaced ) {					// add replace op to the end of all the inserts					rewrites.add(i, op);				}			}			else {				// inserts are added in front of existing inserts				rewrites.add(pos, op);			}		}		else {			//System.out.println("no instruction at pos=="+pos);			rewrites.add(-pos-1, op);		}		//System.out.println("after, rewrites="+rewrites);	}	public void insertAfter(Token t, Object text) {		insertAfter(DEFAULT_PROGRAM_NAME, t, text);	}	public void insertAfter(int index, Object text) {		insertAfter(DEFAULT_PROGRAM_NAME, index, text);	}	public void insertAfter(String programName, Token t, Object text) {		insertAfter(programName,t.getTokenIndex(), text);	}	public void insertAfter(String programName, int index, Object text) {		// to insert after, just insert before next index (even if past end)		insertBefore(programName,index+1, text);		//addToSortedRewriteList(programName, new InsertAfterOp(index,text));	}	public void insertBefore(Token t, Object text) {		insertBefore(DEFAULT_PROGRAM_NAME, t, text);	}	public void insertBefore(int index, Object text) {		insertBefore(DEFAULT_PROGRAM_NAME, index, text);	}	public void insertBefore(String programName, Token t, Object text) {		insertBefore(programName, t.getTokenIndex(), text);	}	public void insertBefore(String programName, int index, Object text) {		addToSortedRewriteList(programName, new InsertBeforeOp(index,text));	}	public void replace(int index, Object text) {		replace(DEFAULT_PROGRAM_NAME, index, index, text);	}	public void replace(int from, int to, Object text) {		replace(DEFAULT_PROGRAM_NAME, from, to, text);	}	public void replace(Token indexT, Object text) {		replace(DEFAULT_PROGRAM_NAME, indexT, indexT, text);	}	public void replace(Token from, Token to, Object text) {		replace(DEFAULT_PROGRAM_NAME, from, to, text);	}	public void replace(String programName, int from, int to, Object text) {		if ( from > to || from<0 || to<0 ) {			return;		}		addToSortedRewriteList(programName, new ReplaceOp(from, to, text));		/*		// replace from..to by deleting from..to-1 and then do a replace		// on last index		for (int i=from; i<to; i++) {			addToSortedRewriteList(new DeleteOp(i,i));		}		addToSortedRewriteList(new ReplaceOp(to, to, text));		*/	}	public void replace(String programName, Token from, Token to, Object text) {		replace(programName,				from.getTokenIndex(),				to.getTokenIndex(),				text);	}	public void delete(int index) {		delete(DEFAULT_PROGRAM_NAME, index, index);	}	public void delete(int from, int to) {		delete(DEFAULT_PROGRAM_NAME, from, to);	}	public void delete(Token indexT) {		delete(DEFAULT_PROGRAM_NAME, indexT, indexT);	}	public void delete(Token from, Token to) {		delete(DEFAULT_PROGRAM_NAME, from, to);	}	public void delete(String programName, int from, int to) {		replace(programName,from,to,null);	}	public void delete(String programName, Token from, Token to) {		replace(programName,from,to,null);	}	public int getLastRewriteTokenIndex() {		return getLastRewriteTokenIndex(DEFAULT_PROGRAM_NAME);	}	protected int getLastRewriteTokenIndex(String programName) {		Integer I = (Integer)lastRewriteTokenIndexes.get(programName);		if ( I==null ) {			return -1;		}		return I.intValue();	}	protected void setLastRewriteTokenIndex(String programName, int i) {		lastRewriteTokenIndexes.put(programName, new Integer(i));	}	protected List getProgram(String name) {		List is = (List)programs.get(name);		if ( is==null ) {			is = initializeProgram(name);		}		return is;	}	private List initializeProgram(String name) {		List is = new ArrayList(PROGRAM_INIT_SIZE);		programs.put(name, is);		return is;	}	public String toOriginalString() {		return toOriginalString(MIN_TOKEN_INDEX, size()-1);	}	public String toOriginalString(int start, int end) {		StringBuffer buf = new StringBuffer();		for (int i=start; i>=MIN_TOKEN_INDEX && i<=end && i<tokens.size(); i++) {			buf.append(get(i).getText());		}		return buf.toString();	}	public String toString() {		return toString(MIN_TOKEN_INDEX, size()-1);	}	public String toString(String programName) {		return toString(programName, MIN_TOKEN_INDEX, size()-1);	}	public String toString(int start, int end) {		return toString(DEFAULT_PROGRAM_NAME, start, end);	}	public String toString(String programName, int start, int end) {		List rewrites = (List)programs.get(programName);		if ( rewrites==null || rewrites.size()==0 ) {			return toOriginalString(start,end); // no instructions to execute		}		StringBuffer buf = new StringBuffer();		/// Index of first rewrite we have not done		int rewriteOpIndex = 0;		int tokenCursor=start;		while ( tokenCursor>=MIN_TOKEN_INDEX &&				tokenCursor<=end &&				tokenCursor<tokens.size() )		{			//System.out.println("tokenCursor="+tokenCursor);			// execute instructions associated with this token index			if ( rewriteOpIndex<rewrites.size() ) {				RewriteOperation op =						(RewriteOperation)rewrites.get(rewriteOpIndex);				// skip all ops at lower index				while ( op.index<tokenCursor && rewriteOpIndex<rewrites.size() ) {					rewriteOpIndex++;					if ( rewriteOpIndex<rewrites.size() ) {						op = (RewriteOperation)rewrites.get(rewriteOpIndex);					}				}				// while we have ops for this token index, exec them				while ( tokenCursor==op.index && rewriteOpIndex<rewrites.size() ) {					//System.out.println("execute "+op+" at instruction "+rewriteOpIndex);					tokenCursor = op.execute(buf);					//System.out.println("after execute tokenCursor = "+tokenCursor);					rewriteOpIndex++;					if ( rewriteOpIndex<rewrites.size() ) {						op = (RewriteOperation)rewrites.get(rewriteOpIndex);					}				}			}			// dump the token at this index			if ( tokenCursor<=end ) {				buf.append(get(tokenCursor).getText());				tokenCursor++;			}		}		// now see if there are operations (append) beyond last token index		for (int opi=rewriteOpIndex; opi<rewrites.size(); opi++) {			RewriteOperation op =					(RewriteOperation)rewrites.get(opi);			if ( op.index>=size() ) {				op.execute(buf); // must be insertions if after last token			}			//System.out.println("execute "+op+" at "+opi);			//op.execute(buf); // must be insertions if after last token		}		return buf.toString();	}	public String toDebugString() {		return toDebugString(MIN_TOKEN_INDEX, size()-1);	}	public String toDebugString(int start, int end) {		StringBuffer buf = new StringBuffer();		for (int i=start; i>=MIN_TOKEN_INDEX && i<=end && i<tokens.size(); i++) {			buf.append(get(i));		}		return buf.toString();	}}

⌨️ 快捷键说明

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