vidarh / writing-a-compiler-in-ruby

Code from my series on writing a Ruby compiler in Ruby

This URL has Read+Write access

writing-a-compiler-in-ruby / sexp.rb
100644 31 lines (24 sloc) 0.486 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
require 'parserbase'
 
# Simple Recursive-Descent s-expression parser
class SEXParser < ParserBase
 
  def initialize(scanner)
    super(scanner)
  end
 
  def parse
    expect("%s") or return
    parse_sexp or expected("s-expression")
  end
 
  def parse_sexp
    expect("(") or return
    ws
    exprs = zero_or_more(:exp)
    expect(")") or expected("')'")
    return exprs
  end
 
  def parse_exp
    ws
    ret = expect(Atom, Int, Quoted) || parse_sexp
    ws
    return ret
  end
end