public Token next() throws WalkerException{
		if (!token_unget_stack.isEmpty())
			return token_unget_stack.pop();
		clear();
		initalize();
		if(currentChar == EOF){
			return null;
		}
		if(currentState.getAccept()){
			acceptIds();
		}
		currentState = currentState.match(currentChar);
		while(currentState!=table.deadState){
			value+=currentChar;
			removeIds();
			if(currentState.getAccept()){
				lastVal = value; 
				acceptIds();
			}
			currentChar = nextValidChar();
			if(currentChar == EOF || currentChar == '\n'){
				break;
			}
			currentState = currentState.match(currentChar);
		}
		if(currentState==table.deadState){
			ungetChar(currentChar);
		}
		if(lastIds.size()!=1){
			throw new WalkerException("Ambiguos REGEX specs");
		}
		return new Token(lastIds.get(0), lastVal);
		
	}