~tim/scheme-vm

ref: d947890410d3f5830161c11c89fdcb49aca9c10c scheme-vm/parser.rb -rw-r--r-- 304 bytes
d9478904Tim Morgan Fix ruby-version file 6 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Parser
  PARENS_RE = /(\((?>[^()]|\g<1>)*\)|[^\(\)]+)/

  def initialize(code = nil)
    @code = code
  end

  def parse(code = @code)
    code.scan(PARENS_RE).flat_map do |(sexp)|
      if sexp[0] == '('
        [parse(sexp[1..-1])]
      else
        sexp.strip.split
      end
    end
  end
end