Class: SportDb::Tokens
- Inherits:
-
Object
- Object
- SportDb::Tokens
- Defined in:
- lib/sportdb/parser/lexer_buffer.rb
Overview
token iter/find better name
e.g. TokenBuffer/Scanner or such ??
Instance Method Summary collapse
- #cur ⇒ Object
- #eos? ⇒ Boolean
-
#initialize(tokens) ⇒ Tokens
constructor
A new instance of Tokens.
-
#match?(*pattern) ⇒ Boolean
pattern e.g.
- #next ⇒ Object
- #peek(offset = 1) ⇒ Object
- #pos ⇒ Object
Constructor Details
#initialize(tokens) ⇒ Tokens
Returns a new instance of Tokens.
19 20 21 22 |
# File 'lib/sportdb/parser/lexer_buffer.rb', line 19 def initialize( tokens ) @tokens = tokens @pos = 0 end |
Instance Method Details
#cur ⇒ Object
46 |
# File 'lib/sportdb/parser/lexer_buffer.rb', line 46 def cur() peek(0); end |
#eos? ⇒ Boolean
25 |
# File 'lib/sportdb/parser/lexer_buffer.rb', line 25 def eos?() @pos >= @tokens.size; end |
#match?(*pattern) ⇒ Boolean
pattern e.g. [:TEXT, [:VS,:SCORE], :TEXT]
31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/sportdb/parser/lexer_buffer.rb', line 31 def match?( *pattern ) ## puts " starting match? #{pattern.inspect} @ #{@pos}" pattern.each_with_index do |types,offset| tok = peek(offset) return false if tok.nil? ## no more tokens (cannot match) ## if single symbol wrap in array types = types.is_a?(Array) ? types : [types] return false unless types.include?( tok.type ) end true end |
#next ⇒ Object
57 58 59 60 61 62 63 64 65 66 |
# File 'lib/sportdb/parser/lexer_buffer.rb', line 57 def next # if @pos >= @tokens.size # raise ArgumentError, "end of array - #{@pos} >= #{@tokens.size}" # end # throw (standard) end of iteration here why? why not? t = @tokens[@pos] @pos += 1 t end |
#peek(offset = 1) ⇒ Object
48 49 50 51 52 53 54 55 |
# File 'lib/sportdb/parser/lexer_buffer.rb', line 48 def peek(offset=1) ## return nil if eos if @pos+offset >= @tokens.size nil else @tokens[@pos+offset] end end |
#pos ⇒ Object
24 |
# File 'lib/sportdb/parser/lexer_buffer.rb', line 24 def pos() @pos; end |