1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#!/usr/bin/ruby
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# encoding: utf-8
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'antlr3'
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'antlr3/tree'
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermodule ANTLR3
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermodule ASTBuilder
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  extend ClassMacros
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def self.included( klass )
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def klass.return_scope_members
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      super.push( :tree )
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    end
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def initialize( input, options = {} )
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @adaptor = options[ :adaptor ] ||= begin
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ( input.adaptor rescue nil ) or
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        AST::CommonTreeAdaptor.new( token_class )
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    end
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    super( input, options )
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  shared_attribute( :adaptor )
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverprivate
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def subtree_stream( desc, element = nil )
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    AST::RewriteRuleSubtreeStream.new( @adaptor, desc, element )
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def token_stream( desc, element = nil )
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    AST::RewriteRuleTokenStream.new( @adaptor, desc, element )
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def node_stream( desc, element = nil )
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    AST::RewriteRuleNodeStream.new( @adaptor, desc, element )
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend
41