import string

class TokenizedFile:

    def __init__(self, file):
	self.fd = open(file)
	self.filename = file
	self.token_list = []
	self.opened = 1
	self.peeked = ""

    def close(self):
	self.fd.close()
	self.opened = 0;

    def _token_aux(self):
	if (self.opened == 0): raise IOError, "File closed"
	# while no tokens, read a line
	while (len(self.token_list) == 0):
	    s = self.fd.readline()
	    if (s == ""): return ""
	    self.token_list = string.split(s)
	# take next token
	r = self.token_list[0]
	self.token_list = self.token_list[1:]
	return r

    def token(self):
	if (self.peeked != ""): 
	    r = self.peeked
	    self.peeked = ""
	    return r
	else:
	    return self._token_aux()

    def peek(self):
	if (self.peeked != ""): raise IOError, "You peeked twice in a row!"
	else:
	    self.peeked = self._token_aux()
	    return self.peeked

#tf = Tokenized_File("spec")
#word = tf.token()
#while (word):
#    print word
#    peek = tf.peek()
#    print "PEEK: ", peek
#    word = tf.token()
