/** Copyright (c) 2012 Delcyon, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package com.delcyon.capo.parsers; import java.util.Vector; /** * @author jeremiah * */ public class ParseTape { private int position = -1; private Vector<ParseToken> streamVector = new Vector<ParseToken>(); private Tokenizer tokenizer = null; public ParseTape(Tokenizer tokenizer) throws Exception { this.tokenizer = tokenizer; } public int getPosition() { return position; } public void setPosition(int position) { this.position = position; } public ParseToken next() throws Exception { position++; if(position < streamVector.size()) { return streamVector.get(position); } else if(hasMore()) { tokenizer.nextToken(); streamVector.add(new ParseToken(tokenizer.getValue(),tokenizer.getTokenType())); return streamVector.lastElement(); } else { position--; return null; } } public void pushBack() { position--; if(position < -1) { position = -1; } } public ParseToken getCurrent() { if(position < streamVector.size()) { return streamVector.get(position); } else { return null; } } public boolean hasMore() throws Exception { return tokenizer.hasMore(); } }