1#!/usr/bin/ruby
2# encoding: utf-8
3require 'antlr3'
4require 'antlr3/tree'
5
6module ANTLR3
7module ASTBuilder
8  extend ClassMacros
9
10  def self.included( klass )
11    def klass.return_scope_members
12      super.push( :tree )
13    end
14  end
15
16  def initialize( input, options = {} )
17    @adaptor = options[ :adaptor ] ||= begin
18      ( input.adaptor rescue nil ) or
19        AST::CommonTreeAdaptor.new( token_class )
20    end
21    super( input, options )
22  end
23
24  shared_attribute( :adaptor )
25
26private
27
28  def subtree_stream( desc, element = nil )
29    AST::RewriteRuleSubtreeStream.new( @adaptor, desc, element )
30  end
31
32  def token_stream( desc, element = nil )
33    AST::RewriteRuleTokenStream.new( @adaptor, desc, element )
34  end
35
36  def node_stream( desc, element = nil )
37    AST::RewriteRuleNodeStream.new( @adaptor, desc, element )
38  end
39end
40end
41