Hi,

I am new to Ruby, but I find the language easy to learn and use.
However I have some code that I think could be written smarter.

I am writing a lexer and parser for a small language I have created.
The first part splitting some input into tokens was easy to write using
"yield" (20 lines or so). I was actually a little overwhelmed how easy
it was. The next part is to examine these tokens and parse them into
language structures. I want to create a class with "current" and "next"
methods to get the current token and fetch the next (advance the
pointer). I have solved it by using the first lexer yielding tokens and
collecting them in an array. Afterwards I can fetch tokens from the
array. But could it be done in a smarter way?

My code is like this:

class FirstParse
  def initialize
    ...
  end
  def each
    ... yield tokens ...
  end
end

class SecondParse
  def initialize
    @tokens = []
    @index = 0
    first_parse = FirstParse.new
    for token in first_parse
      @tokens.add token
    end
  end
  def current
    @tokens[@index]
  end
  def next
    @index++
    self.current
  end
  def read_structure1
    ... read structures ...
  end
  def read_structure2
    ... read structures ...
  end
end

Am I being to "Java'ish" or what do you think. It is not a big problem
since the code works, but do I really need to load the tokens into an
array first?

- Bjarke Walling