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
32
33
34
35
36
37
38
39
40
41
42
43
~/NetBeansProjects/jruby ➔ cat fib.rb
  def self.fib(n)
    {n => :int, :return => :int}
    if (n < 2)
      n
    else
      fib(n - 2) + fib(n - 1)
    end
  end
~/NetBeansProjects/jruby ➔ jruby -rcompiler/duby -rjruby -e "n = JRuby.parse(File.read('fib.rb')); puts 'Normal AST:'; p n; puts 'Duby AST:'; new_ast = n.child_nodes[0].transform(nil); p new_ast"
Normal AST:
RootNode
  NewlineNode
    DefsNode |fib|
      SelfNode |self|
      ArgsNode
      BlockNode
        NewlineNode
          HashNode
        NewlineNode
          IfNode
Duby AST:
StaticMethodDefinition(fib)
 TypeReference(int, array = false)
 TypeReference(int, array = false)
 Arguments
  RequiredArgument(n)
 Body
  Noop
  If
   Call(<)
    Local(n)
    Fixnum(2)
   Local(n)
   Call(+)
    FunctionalCall(fib)
     Call(-)
      Local(n)
      Fixnum(2)
    FunctionalCall(fib)
     Call(-)
      Local(n)
      Fixnum(1)