class Klam::Reader
Public Class Methods
new(stream)
click to toggle source
# File lib/klam/reader.rb, line 5 def initialize(stream) @lexer = Klam::Lexer.new(stream) end
Public Instance Methods
next()
click to toggle source
# File lib/klam/reader.rb, line 9 def next token = @lexer.next unless token.nil? if token.kind_of? Klam::Lexer::OpenParen read_list else token end end end
Private Instance Methods
read_list()
click to toggle source
# File lib/klam/reader.rb, line 22 def read_list items = [] stack = [items] until stack.empty? do token = @lexer.next raise Klam::SyntaxError, 'Unterminated list' if token.nil? case token when Klam::Lexer::OpenParen items = [] stack.push items when Klam::Lexer::CloseParen array = stack.pop unless stack.empty? items = stack.last items << array end else items << token end end arrayToList(array) end